Search code examples
xmlxsdxsd-validationxml-validationxsd-1.1

XSD assert test for null values


I'm using XSD 1.1 to validate incoming XML. I have an assert that works properly except when the values are null.

Here's the test:

<xs:assert test="ELEM1 = ' ' and ELEM2 = ' '
    or ELEM1 != ' ' and matches(ELEM2, '.*')"/>

Here's what the XML in question shows:

<ELEM1 />
<ELEM2 />

I've tried "is null", "is nil", "= null", "= nil", but nothing seems to work.

How do I test for a null element?


Solution

  • Terminology note: The elements, ELEM1 and ELEM2, are generally referred to as being empty rather than having null values.

    This xs:assert,

    <xs:assert test="ELEM1[not(node())] and ELEM2[not(node())] "/>
    

    says that there must be two empty child elements, ELEM1 and ELEM2.