OK, here is the query info. Most time is used for evaluation, also printing takes some time, but parsing and compiling looks pretty fast, I think.
Query: for $i at $p in //entry[phraseme[text() = "Ad0194"] and selected[text() = "yes"]] let $query := $i/query let $node := $i/node let $prefix := fn:in-scope-prefixes($i) let $title := db:open-id('TG-DTA-GerManC-stemming-ws', $node) /ancestor::*:TEI[1]//*:fileDesc[1]//*:titleStmt[1]//*:title[1]
let $author := db:open-id('TG-DTA-GerManC-stemming-ws', $node) /ancestor::*:TEI[1]//*:sourceDesc[1]//*:bibl[1]//*:author[1] let $note := db:open-id('TG-DTA-GerManC-stemming-ws', $node) /ancestor::*:TEI[1]//*:notesStmt//*:note let $expr := concat("ft:mark(db:open-id('TG-DTA-GerManC-stemming-ws',
", $node, ") ", $query, ")") let $time := data($i/@time) return <div> <hit count="{ $p}"> <p><input type="checkbox" name="NODE" value="{$node}"/><b class="hitno">{$p} ({ if($prefix = "dta") then "DTA" else "TG"})</b>Knoten: {$i/node}</p> {xquery:eval($expr)}
</hit> <bib> <p class="bibl"><b>{$time}</b><br/><b>Bibliographie</b> { data($author)}: { data($title)} <br/><b>Anmerkung</b>: { data ($note) }<br/> <b>Korpus</b>: { if($prefix = "dta") then "Deutsches Textarchiv" else "TextGrid Digitale Bibliothek"}</p> </bib>
<p></p></div>
Compiling:
- rewriting And expression to predicate(s)
- rewriting fn:boolean(phraseme[text() = "Ad0194"])
- rewriting fn:boolean(selected[text() = "yes"])
- simplifying descendant-or-self step(s)
- simplifying descendant-or-self step(s)
Result: for $i at $p as xs:integer in document-node { "collect.xml" }/descendant::entry[phraseme[text() = "Ad0194"]][selected[text() = "yes"]] let $query := $i/query let $node := $i/node let $prefix := fn:in-scope-prefixes($i) let $title := db:open-id("TG-DTA-GerManC-stemming-ws",
$node)/ancestor::*:TEI[1]/descendant-or-self::node()/*:fileDesc[1]/descendant-or-self::node()/*:titleStmt[1]/descendant-or-self::node()/*:title[1] let $author := db:open-id("TG-DTA-GerManC-stemming-ws", $node)/ancestor::*:TEI[1]/descendant-or-self::node()/*:sourceDesc[1]/descendant-or-self::node()/*:bibl[1]/descendant-or-self::node()/*:author[1]
let $note := db:open-id("TG-DTA-GerManC-stemming-ws", $node)/ancestor::*:TEI[1]/descendant::*:notesStmt/descendant::*:note let $expr := fn:concat("ft:mark(db:open-id('TG-DTA-GerManC-stemming-ws', ", $node, ") ", $query, ")") let $time := fn:data($i/@time)
return element div { element hit { attribute count { $p }, element p { element input { attribute type { "checkbox" }, attribute name { "NODE" }, attribute value { $node } }, element b { attribute class { "hitno" }, $p, " (", if($prefix = "dta") then "DTA"
else "TG", ")" }, "Knoten: ", $i/node }, xquery:eval($expr) }, element bib { element p { attribute class { "bibl" }, element b { $time }, element br { () }, element b { "Bibliographie" }, fn:data($author), ": ", fn:data($title), element br { () }, element
b { "Anmerkung" }, ": ", fn:data($note), element br { () }, element b { "Korpus" }, ": ", if($prefix = "dta") then "Deutsches Textarchiv" else "TextGrid Digitale Bibliothek" } }, element p { () } }
Timing:
- Parsing: 14.63 ms
- Compiling: 33.34 ms
- Evaluating: 12216.87 ms
- Printing: 449.52 ms
- Total Time: 12714.37 ms
Result:
- Hit(s): 676 Items
- Updated: 0 Items
- Printed: 2048 KB
Query plan:
<QueryPlan>
<FLWR>
<For var="$i" pos="$p as xs:integer">
<IterPath>
<DBNode name="collect-ws" pre="0"/>
<IterStep axis="descendant" test="entry">
<AxisPath>
<IterStep axis="child" test="phraseme">
<CmpG op="=">
<AxisPath>
<IterStep axis="child" test="text()"/>
</AxisPath>
<Str value="Ad0194" type="xs:string"/>
</CmpG>
</IterStep>
</AxisPath>
<AxisPath>
<IterStep axis="child" test="selected">
<CmpG op="=">
<AxisPath>
<IterStep axis="child" test="text()"/>
</AxisPath>
<Str value="yes" type="xs:string"/>
</CmpG>
</IterStep>
</AxisPath>
</IterStep>
</IterPath>
</For>
<Let var="$query">
<AxisPath>
<VarRef>
<Var name="$i" id="0"/>
</VarRef>
<IterStep axis="child" test="query"/>
</AxisPath>
</Let>
<Let var="$node">
<AxisPath>
<VarRef>
<Var name="$i" id="0"/>
</VarRef>
<IterStep axis="child" test="node"/>
</AxisPath>
</Let>
<Let var="$prefix">
<FNQName name="in-scope-prefixes(elem)">
<VarRef>
<Var name="$i" id="0"/>
</VarRef>
</FNQName>
</Let>
<Let var="$title">
<AxisPath>
<FNDb name="open-id(database,id)">
<Str value="TG-DTA-GerManC-stemming-ws" type="xs:string"/>
<VarRef>
<Var name="$node" id="3"/>
</VarRef>
</FNDb>
<IterPosStep axis="ancestor" test="*:TEI">
<Pos min="1" max="1"/>
</IterPosStep>
<IterStep axis="descendant-or-self" test="node()"/>
<IterPosStep axis="child" test="*:fileDesc">
<Pos min="1" max="1"/>
</IterPosStep>
<IterStep axis="descendant-or-self" test="node()"/>
<IterPosStep axis="child" test="*:titleStmt">
<Pos min="1" max="1"/>
</IterPosStep>
<IterStep axis="descendant-or-self" test="node()"/>
<IterPosStep axis="child" test="*:title">
<Pos min="1" max="1"/>
</IterPosStep>
</AxisPath>
</Let>
<Let var="$author">
<AxisPath>
<FNDb name="open-id(database,id)">
<Str value="TG-DTA-GerManC-stemming-ws" type="xs:string"/>
<VarRef>
<Var name="$node" id="3"/>
</VarRef>
</FNDb>
<IterPosStep axis="ancestor" test="*:TEI">
<Pos min="1" max="1"/>
</IterPosStep>
<IterStep axis="descendant-or-self" test="node()"/>
<IterPosStep axis="child" test="*:sourceDesc">
<Pos min="1" max="1"/>
</IterPosStep>
<IterStep axis="descendant-or-self" test="node()"/>
<IterPosStep axis="child" test="*:bibl">
<Pos min="1" max="1"/>
</IterPosStep>
<IterStep axis="descendant-or-self" test="node()"/>
<IterPosStep axis="child" test="*:author">
<Pos min="1" max="1"/>
</IterPosStep>
</AxisPath>
</Let>
<Let var="$note">
<AxisPath>
<FNDb name="open-id(database,id)">
<Str value="TG-DTA-GerManC-stemming-ws" type="xs:string"/>
<VarRef>
<Var name="$node" id="3"/>
</VarRef>
</FNDb>
<IterPosStep axis="ancestor" test="*:TEI">
<Pos min="1" max="1"/>
</IterPosStep>
<IterStep axis="descendant" test="*:notesStmt"/>
<IterStep axis="descendant" test="*:note"/>
</AxisPath>
</Let>
<Let var="$expr">
<FNStr name="concat(atom,atom[,...])">
<Str value="ft:mark(db:open-id('TG-DTA-GerManC-stemming-ws', " type="xs:string"/>
<VarRef>
<Var name="$node" id="3"/>
</VarRef>
<Str value=") " type="xs:string"/>
<VarRef>
<Var name="$query" id="2"/>
</VarRef>
<Str value=")" type="xs:string"/>
</FNStr>
</Let>
<Let var="$time">
<FNGen name="data([item])">
<AxisPath>
<VarRef>
<Var name="$i" id="0"/>
</VarRef>
<IterStep axis="attribute" test="time"/>
</AxisPath>
</FNGen>
</Let>
<Return>
<CElem>
<QNm value="div" type="xs:QName"/>
<CElem>
<QNm value="hit" type="xs:QName"/>
<CAttr>
<QNm value="count" type="xs:QName"/>
<VarRef>
<Var name="$p as xs:integer" id="1"/>
</VarRef>
</CAttr>
<CElem>
<QNm value="p" type="xs:QName"/>
<CElem>
<QNm value="input" type="xs:QName"/>
<CAttr>
<QNm value="type" type="xs:QName"/>
<Str value="checkbox" type="xs:string"/>
</CAttr>
<CAttr>
<QNm value="name" type="xs:QName"/>
<Str value="NODE" type="xs:string"/>
</CAttr>
<CAttr>
<QNm value="value" type="xs:QName"/>
<VarRef>
<Var name="$node" id="3"/>
</VarRef>
</CAttr>
</CElem>
<CElem>
<QNm value="b" type="xs:QName"/>
<CAttr>
<QNm value="class" type="xs:QName"/>
<Str value="hitno" type="xs:string"/>
</CAttr>
<VarRef>
<Var name="$p as xs:integer" id="1"/>
</VarRef>
<Str value=" (" type="xs:string"/>
<If>
<CmpG op="=">
<VarRef>
<Var name="$prefix" id="4"/>
</VarRef>
<Str value="dta" type="xs:string"/>
</CmpG>
<Str value="DTA" type="xs:string"/>
<Str value="TG" type="xs:string"/>
</If>
<Str value=")" type="xs:string"/>
</CElem>
<Str value="Knoten: " type="xs:string"/>
<AxisPath>
<VarRef>
<Var name="$i" id="0"/>
</VarRef>
<IterStep axis="child" test="node"/>
</AxisPath>
</CElem>
<FNXQuery name="eval(string[,bindings])">
<VarRef>
<Var name="$expr" id="8"/>
</VarRef>
</FNXQuery>
</CElem>
<CElem>
<QNm value="bib" type="xs:QName"/>
<CElem>
<QNm value="p" type="xs:QName"/>
<CAttr>
<QNm value="class" type="xs:QName"/>
<Str value="bibl" type="xs:string"/>
</CAttr>
<CElem>
<QNm value="b" type="xs:QName"/>
<VarRef>
<Var name="$time" id="9"/>
</VarRef>
</CElem>
<CElem>
<QNm value="br" type="xs:QName"/>
</CElem>
<CElem>
<QNm value="b" type="xs:QName"/>
<Str value="Bibliographie" type="xs:string"/>
</CElem>
<FNGen name="data([item])">
<VarRef>
<Var name="$author" id="6"/>
</VarRef>
</FNGen>
<Str value=": " type="xs:string"/>
<FNGen name="data([item])">
<VarRef>
<Var name="$title" id="5"/>
</VarRef>
</FNGen>
<CElem>
<QNm value="br" type="xs:QName"/>
</CElem>
<CElem>
<QNm value="b" type="xs:QName"/>
<Str value="Anmerkung" type="xs:string"/>
</CElem>
<Str value=": " type="xs:string"/>
<FNGen name="data([item])">
<VarRef>
<Var name="$note" id="7"/>
</VarRef>
</FNGen>
<CElem>
<QNm value="br" type="xs:QName"/>
</CElem>
<CElem>
<QNm value="b" type="xs:QName"/>
<Str value="Korpus" type="xs:string"/>
</CElem>
<Str value=": " type="xs:string"/>
<If>
<CmpG op="=">
<VarRef>
<Var name="$prefix" id="4"/>
</VarRef>
<Str value="dta" type="xs:string"/>
</CmpG>
<Str value="Deutsches Textarchiv" type="xs:string"/>
<Str value="TextGrid Digitale Bibliothek" type="xs:string"/>
</If>
</CElem>
</CElem>
<CElem>
<QNm value="p" type="xs:QName"/>
</CElem>
</CElem>
</Return>
</FLWR>
</QueryPlan>