group-by - name - r repository
¿Cómo usar Group By en Marklogic? (4)
Quiero usar Group By en xquery. ¿Puede alguien decirme cómo utilizar Group By en Marklogic?
Alternativamente, puede llamar a XSLT usando xdmp:xslt-invoke
xdmp:xslt-eval
o xdmp:xslt-eval
. El procesador XSLT de MarkLogic es compatible con XSLT 2.0, que incluye soporte completo para <xsl:for-each-group>
.
xquery version "1.0-ml";
let $xml:= <Students>
<Student Country="England" Name="Dan" Age="20" Class="C"/>
<Student Country="England" Name="Maria" Age="20" Class="B" />
<Student Country="Australia" Name="Mark" Age="22" Class="A" />
</Students>
let $xsl:= <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:template match="Students">
<result>
<xsl:for-each-group select="Student" group-by="@Country">
<country>
<xsl:attribute name="name"><xsl:value-of select="fn:current-grouping-key()"/></xsl:attribute>
<xsl:for-each select="fn:current-group()/@Name">
<name><xsl:value-of select="."/></name>
</xsl:for-each>
</country>
</xsl:for-each-group>
</result>
</xsl:template>
</xsl:stylesheet>
return xdmp:xslt-eval($xsl,$xml)
La respuesta corta es usar map:map
. Consulte http://docs.marklogic.com/map:map para obtener documentación, y http://blakeley.com/blogofile/archives/560/ para una discusión más larga.
MarkLogic cubre partes de XQuery 3.0 (con su dialecto de 1.0 ml), pero desafortunadamente falta el grupo FLWOR por soporte.
Sin embargo, aún puede crear grupos mediante la sintaxis similar que logrará los mismos resultados. Aquí hay un ejemplo de XQuery:
for $d in distinct-values(doc("order.xml")//item/@dept)
let $items := doc("order.xml")//item[@dept = $d]
order by $d
return <department code="{$d}">{
for $i in $items
order by $i/@num
return $i
}</department>
HTH