Я читаю о XQuery и тестирую его, и в качестве инструментов тестирования я использую BaseX (www.basex.org) и saxon-HE 9.4.0.6N. Для следующего простого XML-файла — схема не привязана к sample.xml:
<rootab>
<l1>
<items p="a">
<itema x1="10" id="abc">testa</itema>
<itemb x1="10" id="dfe">testb</itemb>
<itemc x1="10" id="jgh">testc</itemc>
</items>
</l1>
<l2>
<items p="b">
<itema x1="10" xidref="abc">testa</itema>
<itemc x1="10" xidref="jgh">testc</itemc>
<itemd x1="10" xidref="abc">testA101</itemd>
<iteme x1="10" xidref="jgh">testB202</iteme>
</items>
</l2>
</rootab>
В Basex_GUI, если я введу следующее выражение XPath: //idref("abc")/..
, результат будет: <itema x1="10" xidref="abc">testa</itema>
В BaseX_GUI, если я добавлю простое выражение XQuery:
for $x in doc('sample.xml')//idref("abc")/..
return <aaa>{$x}</aaa>
результат:
<aaa>
<itema x1="10" xidref="abc">testa</itema>
</aaa>
<aaa>
<itemd x1="10" xidref="abc">testA101</itemd>
</aaa>
q1) Почему выражение XPath вернуло только один узел? Я ожидал два...
В Saxon, используя приведенный ниже файл xql:
<test>
{
doc('sample.xml')//idref("abc")/..
}
</test>
или выражение XQuery, я получаю тот же результат, выполнив команду query sample.xql
:
<?xml version="1.0" encoding="UTF-8"?><test/>
q2) что не так в моем саксонском тесте?
Заранее спасибо за вашу помощь!