1

XQuery関数fn:idref()に何も返さないようにすることができません。

私はこのXMLドキュメントdoc.xmlを持っています;

<doc>
  <foo idref="xyz"/>
  <bar xml:id="xyz"/>
</doc>

そしてこのXQuery;

let $d := doc("doc.xml")
return $d/idref("xyz")

しかし、結果は常に空です。属性idref="xyz"を型として宣言する必要があるとidref思いますが、スキーマなしで宣言できますか?

SaxonXQuery1.0プロセッサを使用しています。

4

1 に答える 1

3

はい、idref()関数は、IDREFとしてラベル付けされた属性のみを取得します。これは、スキーマ検証の結果としてのみ発生します。

非推奨のレガシー設定config.setRetainDTDAttributeTypes()があり、DTD検証の結果として機能するようになっていますが、私はそれを使用しません。

あなたはいつでもすることができますdoc("doc.xml")//*[@idref="xyz"]。これにより、Saxon-HEおよびSaxon-PEでシリアル検索が実行されますが、Saxon-EEではインデックスが使用されます。私は一般的に、idref()関数を使用するよりもこれをお勧めします。

もちろん、XSLTではキーを使用できます。

于 2011-06-22T07:25:24.300 に答える