[xsl] XPath expression to express: There must be an empty sequence

Subject: [xsl] XPath expression to express: There must be an empty sequence
From: "Costello, Roger L. costello@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Sun, 19 Nov 2017 18:38:20 -0000
Hi Folks,

I have a set:

<set>
    <element>A</element>
    <element>B</element>
</set>

Here are some sequences derived from the set:

<sequences>
    <sequence/>
    <sequence>
        <item>A</item>
    </sequence>
    <sequence>
        <item>B</item>
    </sequence>
    <sequence>
        <item>A</item>
        <item>A</item>
    </sequence>
    <sequence>
        <item>A</item>
        <item>B</item>
    </sequence>
    <sequence>
        <item>B</item>
        <item>A</item>
    </sequence>
    <sequence>
        <item>B</item>
        <item>B</item>
    </sequence>
</sequences>

Notice that:
- there is an empty sequence
- there is a sequence corresponding to each element of the set
- and there are other sequences (that I'm not concerned with for now)

I want to create XPath expressions which express the rules that sequences must
satisfy to be valid.

First rule: There must be an empty sequence. I expressed that rule with this
XPath expression:

sequence[not(item)]

Assume that the root element, <sequences>, is the context node.

Is that the right way to express the rule? Is there a better XPath expression?
By "better" I mean simpler, plainer, more transparent. I seek simplicity and
clarity over efficiency and cleverness.

Second rule: There must be a singleton sequence corresponding to every element
in the set. A "singleton sequence" is a <sequence> containing one <item>.

I expressed that rule with this XPath expression:

every $element in $set//element satisfies exists(sequence[(item = $element)
and not(item[2])])

Assume that $set is a variable whose value is the set.

Is that the right way to express the rule? Is there a better XPath
expression?

/Roger

Current Thread