fn:lang( $testlang as xs:string?, [$node as node()] ) as xs:boolean
This function tests whether the language of $node, or the context node if the second argument is omitted, as specified by xml:lang attributes is the same as, or is a sublanguage of, the language specified by $testlang. The language of the argument node, or the context node if the second argument is omitted, is determined by the value of the xml:lang attribute on the node, or, if the node has no such attribute, by the value of the xml:lang attribute on the nearest ancestor of the node that has an xml:lang attribute. If there is no such ancestor, then the function returns false
If the second argument is omitted and the context item is undefined an error is raised: [err:XPDY0002]. If the context item is not a node an error is raised [err:XPTY0004].
If $testlang is the empty sequence it is interpreted as the zero-length string.
The relevant xml:lang attribute is determined by the value of the XPath expression: (ancestor-or-self::* /@xml:lang)[last()]
If this expression returns an empty sequence, the function returns false.
Otherwise, the function returns true if and only if the string-value of the relevant xml:lang attribute is equal to $testlang based on a caseless default match as specified in section 3.13 of [The Unicode Standard], or if the string-value of the relevant testlang attribute contains a hyphen, "-" (The character "-" is HYPHEN-MINUS, #x002D) such that the part of the string-value preceding that hyphen is equal to $testlang, using caseless matching.
Parameters | |
---|---|
testlang | The language against which to test the node. |
node | The node to test. |
The expression fn:lang("en") would return true if the context node were any of the following four elements:
The expression fn:lang("fr") would return false if the context node were <para xml:lang="EN"/>
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.