我正在閱讀和測試XQuery,並且使用BaseX(www.basex.org)和saxon-HE 9.4.0.6N等測試工具。 對於以下簡單的XML文件 - 沒有連接到sample.xml中的模式:使用idref的XPath表達式
<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>
在,如果我輸入下面的XPath表達式Basex_GUI://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表達式只返回一個節點?我認爲的兩個...
在薩克森,通過使用下面的XQL文件:
<?xml version="1.0" encoding="UTF-8"?><test/>
:
<test>
{
doc('sample.xml')//idref("abc")/..
}
</test>
或XQuery表達式,我通過運行命令query sample.xql
得到相同的結果q2)我的撒克遜測試有什麼問題?
非常感謝您的幫助!
沒有DTD ... sample.xml是在我讀了書中的一些章節後寫的。 – dag
如果沒有DTD且沒有模式,那麼系統無法知道哪些屬性是IDREF屬性,因此idref()函數將永遠不會返回任何內容。 –
如果我編寫自己的DTD,是否可以使用Saxon從命令行使用它(內部DTD或外部引用)? (例如查詢-useDTD:x sample.xql)。但在編程上,在.Net? DTD文件假設只是我需要的非常簡單 - 一些屬性要聲明爲IDREF類型。非常感謝你! – dag