2012-04-23 15 views
5

मैं xquery में समूह का उपयोग करना चाहता हूं। क्या कोई मुझे बता सकता है कि मार्कब्लिक में समूह का उपयोग कैसे करें?मार्कब्लिक में समूह का उपयोग कैसे करें?

+1

इस्तेमाल नहीं किया है MarkLogic। लेकिन कृपया http://blakeley.com/blogofile/archives/560/ –

+0

पर एक नज़र डालें क्या मार्कलॉगिक का संस्करण आप XQuery 3.0 ड्राफ़्ट का समर्थन कर रहे हैं? (यह केवल 3.0 के रूप में है कि 'समूह द्वारा' समर्थन FLWOR अभिव्यक्तियों में जोड़ा गया था; उस बिंदु से पहले, आपको इसे स्वयं करना होगा)। XQuery 3.0 में 'समूह द्वारा' का सारांश http://docs.basex.org/wiki/XQuery_3.0#Group_By –

उत्तर

4

वैकल्पिक रूप से, आप xdmp:xslt-invoke या xdmp:xslt-eval का उपयोग कर एक्सएसएलटी को कॉल कर सकते हैं। मार्कलोगिक का एक्सएसएलटी प्रोसेसर एक्सएसएलटी 2.0 का समर्थन करता है, जिसमें <xsl:for-each-group> के लिए पूर्ण समर्थन शामिल है।

+0

पर पाया जा सकता है उदाहरण के लिए @mg_kedzie का उत्तर देखें .. – grtjn

0

मार्कलॉगिक XQuery 3.0 के हिस्सों को कवर करता है (इसकी 1.0-मिली बोलीभाषा के साथ), लेकिन दुर्भाग्य से समर्थन के द्वारा FLWOR समूह की कमी है।

हालांकि, आप अभी भी प्रोग्रामेटिक रूप से वाक्यविन्यास की तरह समूह बना सकते हैं जो एक ही परिणाम प्राप्त करेगा। यहाँ एक 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

+1

मार्कलोगिक 5 समर्थन नहीं करता है समूह द्वारा। – wst

+0

आप 'cts: values' (अलग-अलग मानों के बजाय), और 'cts: search' (XPath predicates के बजाए) का उपयोग करके इस दृष्टिकोण को तेज कर सकते हैं, खासकर यदि आप ऑर्डर आइटम को अलग-अलग फ़ाइलों के रूप में स्टोर कर सकते हैं। – grtjn

1
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)