フィルタリングされていない検索で間違った結果が返されます。
以下の xml サンプルと問題を見つけてください。
サンプル:
<root>
<id1>11</id1>
<elem1>ee1</elem1>
<ele2>ee2</ele2>
<entry>
<volume>10</volume>
<issue>10</issue>
<elemEntry>eleme</elemEntry>
</entry>
<entry>
<volume>20</volume>
<issue>20</issue>
<elemEntry>eleme</elemEntry>
</entry>
<entry>
<volume>20</volume>
<issue>10</issue>
<elemEntry>eleme</elemEntry>
</entry>
<entry>
<volume>10</volume>
<issue>20</issue>
<elemEntry>eleme</elemEntry>
</entry>
</root>
<volume> & <issue>
ノードの下に存在する必要がある両方の値の組み合わせを持つエントリノードを取得する必要があり<entry>
ます (例: volume-10 & issue-10, volume-10 & issue-20)
上記の例のように、エントリ ノード全体を<volume> (10), <issue> (10)
.
volume
他のエントリ ノードには必要な(値 10)、issue
(値 10) の組み合わせがないため、他のエントリ ノードは返されません。
cts:search
私がやっていることを以下に見つけてください。
cts:search(
doc("/sample.xml")//entry,
cts:and-query((
cts:element-value-query(xs:QName("volume"), "10", ("case-insensitive","unstemmed")),
cts:element-value-query(xs:QName("issue"), "10", ("case-insensitive","unstemmed"))
)),
"unfiltered"
)
サンプル xml が/sample.xml
uriで DB に格納されていると仮定します。
上記のクエリは、他のエントリ ( <entry>
) も返します。
「フィルタリングされた」検索を実行すると、上記のクエリは正しい結果を返します。
なぜそれが起こっているのか、解決策は何か教えてください。
の組み合わせを持つエントリ ノードを取得する他の良い方法があればvolume and issue
教えてください。