fn:contains-token
Determines whether or not any of the supplied strings, when tokenized at whitespace boundaries, contains the supplied token, under the rules of the supplied collation.
Signatures
fn:contains-token(
$input as xs:string*,
$token as xs:string
) as xs:booleanfn:contains-token(
$input as xs:string*,
$token as xs:string,
$collation as xs:string
) as xs:booleanProperties
The two-argument form of this function is deterministic, context-dependent, and focus-independent. It depends on collations.
The three-argument form of this function is deterministic, context-dependent, and focus-independent. It depends on collations, and static base URI.
Rules
If $input is the empty sequence, the function returns false.
Leading and trailing whitespace is trimmed from the supplied value of $token. If the trimmed value of $token
is a zero-length string, the function returns false.
The collation used by this function is determined according to the rules in Choosing a collation.
The function returns true if and only if there is string in $input which,
after tokenizing at whitespace boundaries, contains a token
that is equal to the trimmed value of $token under
the rules of the selected collation.
That is, the function returns the value of the expression:
some $t in $input!fn:tokenize(.) satisfies
compare($t, fn:replace($token, '^\s*|\s*$', ''), $collation) eq 0)Notes
Interior whitespace within $token will cause the function to return false,
unless such whitespace is ignored by the selected collation.
This function can be used for processing space-separated attribute values (for example, the XHTML and DITA class attribute), where one often needs to test for the presence of a single token in a space-separated list. The function is designed to work both when the attribute has been validated against an XSD list type, and when it appears as a single untyped string. It differs from the HTML 5 definition in that HTML 5 recognizes form feed (x0C) as a separator. To reproduce the HTML token matching behavior, the HTML ASCII case-insensitive collation should be used: see The HTML ASCII Case-Insensitive Collation.
Examples
The expression fn:contains-token("red green blue ", "red") returns true().
The expression fn:contains-token(("red", "green", "blue"), " red ") returns true().
The expression fn:contains-token("red, green, blue", "red") returns false().
The expression fn:contains-token("red green blue", "RED", "http://www.w3.org/2005/xpath-functions/collation/html-ascii-case-insensitive") returns true().