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.

Veja também