Hi Folks,
This XML Schema declares an element with a content model that is a simple type:
<xs:element name="Test1">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minInclusive value="0" />
<xs:maxInclusive value="9" />
</xs:restriction>
</xs:simpleType>
</xs:element>
In an XML instance document, the value of <Test1> can be 0, 1, …, 9.
The content model of Test1 denotes this set: {0, 1, …, 9}
Now consider this XML Schema, it declares an element with a content model that is a complex type with an empty sequence:
<xs:element name="Test2">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
Lastly, consider this XML Schema, it declares an element with a content model that is a complex type that is an empty choice:
<xs:element name="Test3">
<xs:complexType>
<xs:choice/>
</xs:complexType>
</xs:element>
Michael Sperberg-McQueen wrote an article [1] which says that a content model which is an empty sequence denotes a set with an empty string, { ε }. So the value of <Test2> must be a string of length zero. Here’s how a string of length zero is physically expressed in an XML instance document:
<Test2></Test2>
MSM says that a content model that is an empty choice denotes an empty set, {}.
That puzzled me, so I created an XML instance document containing <Test3>:
<Test3></Test3>
and validated it against the schema. It validated!
Okay, I’m confused. In an XML instance document, does an empty element denote that the element’s value is ε (the empty string, i.e., a string of length zero), or does an empty element denote that the element has no value, i.e., the set of allowable values is the empty set?
Can you give a concrete example that illustrates how Test2’s content is different than Test3’s content?