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:boolean
fn:contains-token(
    $input as xs:string*, 
    $token as xs:string, 
    $collation as xs:string
) as xs:boolean

Properties

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().