(: parse tests :) { for $sales in doc("sales-records.xml")/*/record let $pname := $sales/product-name group by $pname order by $pname return { sum($sales/qty) } } %%%{ for $sales in doc("sales-records.xml")/*/record let $state := doc("stores.xml")/*/store[store-number = $sales/store-number]/state let $category := doc("products.xml")/*/product[name = $sales/product-name]/category group by $state, $category order by $state, $category return {$state, $category} {sum($sales/qty)} } %%%{ for $sales in doc("sales-records.xml")/*/record let $state := doc("stores.xml")/*/store[store-number = $sales/store-number]/state, $product := doc("products.xml")/*/product[name = $sales/product-name], $category := $product/category, $revenue := $sales/qty * $product/price group by $state, $category order by $state, $category return {$state, $category} {sum($revenue)} } %%%{ for $store in doc("stores.xml")/*/store let $state := $store/state group by $state order by $state return { for $product in doc("products.xml")/*/product let $category := $product/category group by $category order by $category return { for $sales in doc("sales-records.xml")/*/record[store-number = $store/store-number and product-name = $product/name] let $pname := $sales/product-name group by $pname order by $pname return } } } %%%{ for $sales in doc("sales-records.xml")/*/record let $storeno := $sales/store-number group by $storeno order by $storeno return { for $s in $sales order by xs:int($s/qty) descending return } } %%%{ for $sales in doc("sales-records.xml")/*/record let $storeno := $sales/store-number, $product := doc("products.xml")/*/product[name = $sales/product-name], $prd := $product, $profit := $sales/qty * ($prd/price - $prd/cost) group by $storeno let $total-store-profit := sum($profit) where $total-store-profit > 100 order by $total-store-profit descending return } %%%{ for $book in doc("books.xml")/*/book for $author in $book/author group by $author order by $author return { for $b in $book order by $b/title return {fn:data($b/title)} } } %%%{ for $book in doc("books.xml")/*/book let $author-list := fn:string-join($book/author, ', ') group by $author-list order by $author-list return { for $b in $book order by $b/title return {fn:data($b/title)} } } %%%declare variable $seq := fn:doc("arrange_rows.xml"); { for tumbling window $w in $seq/doc/* start at $x when fn:true() end at $y when $y - $x = 2 return { for $i in $w return } }
{data($i)}
%%%declare variable $seq := fn:doc("head_para.xml"); { for tumbling window $w in $seq/body/* start previous $s when $s[self::h2] end at $e when $e[self::h2] return
{ for $x in $w return {data($x)} }
}
%%%declare variable $seq := fn:doc("term_def_list.xml"); { for tumbling window $w in $seq/doc/* start at $x when $x[self::dt] end at $y next $z when $y[self::dd] and $z[self::dt] return { $w } } %%%declare variable $timesequence := fn:doc("temp_events.xml"); let $MAX_DIFF := 2 for sliding window $w in $timesequence/stream/event start $s_curr at $s_pos previous $s_prev when ($s_curr/@time ne $s_prev/@time) or (empty($s_prev)) only end next $e_next when $e_next/@time - $s_curr/@time gt $MAX_DIFF return avg( $w/@temp ) %%%declare variable $timesequence := fn:doc("temp_events.xml"); let $SMOOTH_CONST := 0.2 for sliding window $w in $timesequence/stream/event start at $s_pos when true() only end at $e_pos when $e_pos - $s_pos eq 2 return round-half-to-even($SMOOTH_CONST * data($w[3]/@temp) + (1 - $SMOOTH_CONST) * ( $SMOOTH_CONST * data($w[2]/@temp) + (1 - $SMOOTH_CONST) * data($w[1]/@temp) ), 2) %%%declare variable $seq := fn:doc("temp_events.xml"); for sliding window $w in $seq/stream/event start $s_curr when fn:true() only end next $next when $next/@time > $s_curr/@time + 3 return let $avg := fn:avg($w/@temp) where $avg * 2 lt xs:double($next/@temp) or $avg div 2 gt xs:double($next/@temp) return Outlier detected. Event id:{data($next/@time)} %%%declare variable $seq := fn:doc("person_events.xml"); { for tumbling window $w in $seq/stream/event start $s when $s/person eq "Anton" and $s/direction eq "in" only end $e next $n when xs:dateTime($n/@time) - xs:dateTime($s/@time) gt xs:dayTimeDuration("PT1H") or $e/person eq "Barbara" and $e/direction eq "in" where $e/person eq "Barbara" and $e/direction eq "in" return Barbara: Anton arrived 1h ago } %%%declare variable $seq := fn:doc("person_events.xml"); { for sliding window $w in $seq/stream/event start $s when $s/direction eq "in" only end $e when $s/person eq $e/person and $e/direction eq "out" return {$s/person} } %%%declare variable $seq := fn:doc("person_events.xml"); { for sliding window $w in $seq/stream/event start $s when $s/direction eq "in" only end $e when $s/person eq $e/person and $e/direction eq "out" let $person := $s/person let $workingTime := xs:dateTime($e/@time) - xs:dateTime($s/@time) group by $person return {$person} } %%%declare variable $seq := fn:doc("person_events.xml"); { for tumbling window $w in $seq/stream/event[direction eq "in"] start $s when fn:true() end next $e when xs:date( xs:dateTime($s/@time) ) ne xs:date( xs:dateTime($e/@time) ) let $date := xs:date(xs:dateTime($s/@time)) where not($w[person eq "Barbara"]) return Barbara did not come to work } %%%declare variable $seq := fn:doc("person_events.xml"); { for tumbling window $w in $seq/stream/event start when true() only end $x when $x/person eq "Clara" and $x/direction eq "in" return { distinct-values(for $y in $w where (xs:dateTime($y/@time) + xs:dayTimeDuration("PT15M") ) lt xs:dateTime($x/@time) return $y/person) } } %%% declare variable $seq := fn:doc("person_events.xml"); { for tumbling window $w in $seq/stream/event[direction eq "in"] start $x when $x/person = ("Barbara", "Anton") end next $y when xs:dateTime($y/@time) - xs:dateTime($x/@time) gt xs:dayTimeDuration("PT30M") where $w[person eq "Anton"] and $w[person eq "Barbara"] return Anton and Barbara just arrived } %%%declare variable $seq := fn:doc("person_events.xml"); { for sliding window $w in $seq/stream/event start $s when true() end next $e when xs:dateTime($e/@time) - xs:dateTime($s/@time) gt xs:dayTimeDuration("PT1H") where count($w[person eq $s/person and direction eq "in"]) ge 3 return {fn:data($s/person)} is suspicious } %%%declare variable $rssfeed := fn:doc("rss.xml"); { for tumbling window $w in $rssfeed/rss/channel/item start $first when fn:true() end next $lookAhead when $first/author ne $lookAhead/author where count($w) ge 3 return { $w[1]/author } } %%%declare variable $rssfeed := fn:doc("rss.xml"); { for tumbling window $w in $rssfeed/rss/channel/item start $s_curr when true() end next $e_next when fn:day-from-dateTime(xs:dateTime($e_next/pubDate)) ne fn:day-from-dateTime(xs:dateTime($s_curr/pubDate)) return {xs:date(xs:dateTime($s_curr/pubDate))} { for $item in $w where fn:contains( xs:string($item/title), 'XQuery') return $item/title } } %%%declare variable $rssfeed := fn:doc("rss.xml"); { for tumbling window $w in $rssfeed/rss/channel/item start $s_curr when true() end next $e_next when fn:day-from-dateTime(xs:dateTime($e_next/pubDate)) ne fn:day-from-dateTime(xs:dateTime($s_curr/pubDate)) return {xs:date(xs:dateTime($s_curr/pubDate))} { for $a in fn:distinct-values($w/author) return { $w[author eq $a]/title } } } %%%declare variable $seq := fn:doc("cxml.xml"); { for sliding window $w in $seq/sequence/* start $cur previous $prev when day-from-date(xs:dateTime($cur/@date)) ne day-from-date(xs:dateTime($prev/@date)) or empty($prev) end when newstart return { let $companies := for $x in distinct-values($w/@billTo ) return {sum($w[@billTo eq $x]/@total)} let $max := max($companies) for $company in $companies where $company eq xs:untypedAtomic($max) return $company } } %%%declare variable $seq := fn:doc("cxml.xml"); { for sliding window $w in $seq/sequence/* start $s when $s[self::OrderRequest] end $e when $e/@orderID eq $s/@orderID and $e[self::ConfirmationRequest] and $e/@status eq "reject" or $e[self::ShipNotice] where $e[self::ShipNotice] return {xs:dateTime($e/@date) - xs:dateTime($s/@date) } } %%%declare variable $seq := fn:doc("cxml.xml"); { for sliding window $w in $seq/sequence/* start previous $wSPrev when $wSPrev[self::OrderRequest] end next $wENext when $wENext/@orderID eq $wSPrev/@orderID and ( $wENext[self::ConfirmationRequest] and $wENext/@status eq "reject") or $wENext[self::ShipNotice] where $wENext[self::ShipNotice] return { for sliding window $bundle in $w start $bSCur when $bSCur[self::OrderRequest] and $bSCur/@shipTo eq $wSPrev/@shipTo end $bECur next $bENext when $bECur/@orderID eq $bSCur/@orderID and ($bECur[self::ConfirmationRequest] and $bECur/@status eq "reject") or $bECur[self::ShipNotice] where empty($bENext) return $bSCur } } %%%