私のxmlファイルは次のDTDに準拠しています。
<!ELEMENT eprints (paper+)>
<!ELEMENT paper (eprintsid,userid,dir,datestamp,type,author+,title)>
<!ELEMENT eprintsid (#PCDATA)>
<!ELEMENT userid (#PCDATA)>
<!ELEMENT dir (#PCDATA)>
<!ELEMENT datestamp (#PCDATA)>
<!ELEMENT type (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ATTLIST author id CDATA #REQUIRED>
このxmlファイルから、複数のIDを子ノードとして、複数のID値に一致する作成者のすべての異なる値のテキストノードのリストノードを生成したいと思います。
したがって、次のxqueryを使用してみました。
let $doc := doc("eprints")
for $i in distinct-values($doc//author)
let $jn := $i/@id
where (count(distinct-values($jn)) > 1)
return <idByAuthor>{$jn}</idByAuthor>
$i
(xmlデータベースエンジンBaseXから)次のエラーが発生するため、XQueryではの「id」属性ノードに移動できないようです。「@id」に必要なコンテキストノード。xs:untypedAtomicが見つかりました。
のid属性に到達できない理由を誰かが知っています$i
か?