fn:idref
Returns the sequence of element or attribute nodes with an IDREF value
matching the value of one or more of the ID values supplied in
$arg.
Signatures
fn:idref($arg as xs:string*) as node()*fn:idref(
$arg as xs:string*,
$node as node()
) as node()*Properties
The one-argument form of this function is deterministic, context-dependent, and focus-dependent.
The two-argument form of this function is deterministic, context-independent, and focus-independent.
Rules
The function returns a sequence, in document order with duplicates eliminated,
containing every element or attribute node $N that satisfies all the
following conditions:
-
$Nis in the target document. The target document is the document containing$nodeor the document containing the context item (.) if the second argument is omitted. The behavior of the function if$nodeis omitted is exactly the same as if the context item had been passed as$node. -
$Nhas anIDREFvalue equal to one of the candidateIDvalues, where:-
A node
$Nhas anIDREFvalue equal toVif both of the following conditions are true:-
The
is-idrefsproperty (see is-idrefs Accessor) of$Nistrue. -
The sequence
fn:tokenize(fn:normalize-space(fn:string($N)), ' ')contains a string that is equal to
Vunder the rules of theeqoperator using the Unicode code point collation (http://www.w3.org/2005/xpath-functions/collation/codepoint).
-
-
Each
xs:stringin$argis parsed as if it were of lexically of typexs:ID. Thesexs:strings are then included in the list of candidatexs:IDs. If any of the strings in$argis not a lexically validxs:ID(that is, if it is not lexically anxs:NCName), it is ignored. More formally, the candidateIDvalues are the strings in the sequence:$arg[. castable as xs:NCName]
-
Error Conditions
A dynamic error is raised [ERRFODC0001] if
$node, or the context item if the second argument is omitted, is a node
in a tree whose root is not a document node.
The following errors may be raised when $node is omitted:
If the context item is absent, dynamic error [ERRXPDY0002]
If the context item is not a node, type error [ERRXPTY0004].
Notes
An element or attribute typically acquires the is-idrefs property by being
validated against the schema type xs:IDREF or xs:IDREFS, or
(for attributes only) by being described as of type IDREF or
IDREFS in a DTD.
Because the function is sensitive to the way in which the data model is constructed, calls on this function are not always interoperable.
No error is raised in respect of a candidate ID value that does not match
the IDREF value of any element or attribute in the document. If no
candidate ID value matches the IDREF value of any element or
attribute, the function returns the empty sequence.
It is possible for two or more nodes to have an IDREF value that matches a
given candidate ID value. In this situation, the function will return all
such nodes. However, each matching node will be returned at most once, regardless
how
many candidate ID values it matches.
It is possible in a well-formed but invalid document to have a node whose
is-idrefs property is true but that does not conform to the lexical
rules for the xs:IDREF type. The effect of the above rules is that
ill-formed candidate ID values and ill-formed IDREF values are
ignored.
If the data model is constructed from a PSVI, the typed value of a node that has the
is-idrefs property will contain at least one atomic value of type
xs:IDREF (or a type derived by restriction from xs:IDREF).
It may also contain atomic values of other types. These atomic values are treated
as
candidate ID values if two conditions are met: their lexical form must be valid as an
xs:NCName, and there must be at least one instance of xs:IDREF
in the typed value of the node. If these conditions are not satisfied, such values
are ignored.
Examples
let $emp :=
validate lax {
document {
<employees xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<employee xml:id="ID21256">
<empnr xsi:type="xs:ID">E21256</empnr>
<first>Anil</first>
<last>Singh</last>
<deputy xsi:type="xs:IDREF">E30561</deputy>
</employee>
<employee xml:id="ID30561">
<empnr xsi:type="xs:ID">E30561</empnr>
<first>John</first>
<last>Brown</last>
<manager xsi:type="xs:IDREF">ID21256</manager>
</employee>
</employees>
}
}
The expression $emp/(element-with-id('ID21256')/@xml:id => fn:idref())/ancestor::employee/last =>
string() returns "Brown". (Assuming that manager has the is-idref property, the call on fn:idref selects
the manager element. If, instead, the manager had a ref
attribute with the is-idref property, the call on fn:idref would select the attribute node.)
The expression $emp/(element-with-id('E30561')/empnr => fn:idref())/ancestor::employee/last => string() returns "Singh". (Assuming that employee/deputy has the is-idref property, the call on fn:idref selects
the deputy element.)