idref
Busca os elementos que se referem a outros pelo ID
Descrição
A função fn:idref devolve os nós (elementos ou atributos) que fazem referência a um dos IDs de uma sequência. Se $node não for informado, procura no mesmo documento do item de contexto atual. Se $node for informado, procura no mesmo documento de $node.
Para fazer referência a um ID, o nó precisa estar marcado como IDREF ou IDREFS e conter aquele valor. Em geral, isso significa que foi declarado como xs:IDREF ou xs:IDREFS num schema em escopo. Se for IDREFS, basta um dos valores da lista corresponder ao ID. A collation padrão não é usada para comparar os IDs; a comparação é simples, pelos code points Unicode.
A função devolve os nós na ordem do documento, e não na ordem dos valores de $arg. O resultado não tem elementos repetidos, mesmo que um ID apareça duas vezes em $arg. Mas pode haver no resultado vários elementos ou atributos que fazem referência ao mesmo ID.
Parâmetros |
Descrição |
|---|---|
arg:string() |
o valor de IDREF cujas referências se quer achar |
node:node() |
um nó do documento onde procurar |
Exemplos
Os exemplos abaixo usam este documento de entrada:
<xsl:variable name="book" select="doc('http://www.functx.com/input/book.xml')"/>
<!-- content of book.xml -->
<!DOCTYPE book [
<!ELEMENT book (section*) >
<!ELEMENT section ANY >
<!ATTLIST section id ID #REQUIRED >
<!ELEMENT fn ANY >
<!ATTLIST fn fnid ID #REQUIRED >
<!ELEMENT fnref EMPTY >
<!ATTLIST fnref ref IDREF #REQUIRED >
<!ELEMENT secRef EMPTY >
<!ATTLIST secRef refs IDREFS #REQUIRED >
]>
<book>
<section id='preface'>This book introduces XQuery...
The examples are downloadable<fnref ref="fn1"/>...
</section>
<section id='context'>...</section>
<section id='language'>...Expressions, introduced
in <secRef refs='context'/>, are...
</section>
<section id='types'>...As described in
<secRef refs='context language'/>, you can...
</section>
<fn fnid='fn1'>See http://datypic.com.</fn>
</book>
Supõe-se que o documento de entrada foi validado, que o tipo dos atributos id e fnid é xs:ID, o do atributo ref é xs:IDREF e o do atributo refs é xs:IDREFS.
XPath |
Resultado |
Explicação |
|---|---|---|
$book/idref('language')/string(.) |
context language |
O valor de string do atributo refs do segundo elemento secRef. |
$book/idref('context')/string(.) |
('context', 'context language') |
O valor de string dos atributos refs dos dois elementos secRef. |
$book/idref(('context', 'language'))/string(.) |
('context', 'context language') |
O valor de string dos atributos refs dos dois elementos secRef. |
$book//fn[1]/idref(@fnid)/string(.) |
fn1 |
O valor de string do atributo ref do elemento fnRef. |
$book/idref(('language', 'noMatch', 'in!valid'))/string(.) |
context language |
O valor de string do atributo refs do segundo elemento secRef. |