2011-06-21 14 views
1

XQuery関数fn:idref()を返すことができません。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として宣言される必要があると推測していますが、それはスキーマなしで行うことができますか?

私はSaxon XQuery 1.0プロセッサを使用しています。

答えて

3

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

DTDの検証の結果として動作するようにする廃止予定の従来の設定config.setRetainDTDAttributeTypes()がありますが、私は使用しません。

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

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

+0

よろしくお願い致します。同様の問題があるがidrefs属性がある。私は新しい質問をします。 –

関連する問題