From Michael Kay: The main use of a void type is that it helps you construct a system with closure properties, so you can have operators on types (e.g. the intersection of two types) where the result of the operation is always a legitimate type. Use-cases are the bane of orthogonality. Any system with good orthogonality can do things for which it is very difficult to find a use case. What’s the use case for adding two negative numbers? Design focused excessively on use-cases leads
to a lack of orthogonality. XSD 1.1 introduced xs:error which is a void simple type. It’s defined similarly to <xs:choice/> as a union with no member types. The specific use case for introducing it was for conditional type assignment, it allows you to have the last
alternative in a list of alternatives say “if none of the above conditions is true, then the type is xs:error, meaning no content is accepted”. Michael Kay From: Costello, Roger L. Here's an idea: use the empty choice as a way to express "I'm terminating my connection with you". For example, a sender creates XML documents containing data of either books, magazines, or Kindles. At some point the sender wants to signal that he will send no further XML documents. So the XML Schema is created
in which one of the choices is a Halt element (of type ValidationKiller): <xs:element name="Document"> <xs:complexType> <xs:choice> <xs:element name="Books" type="BooksType" /> <xs:element name="Magazines" type="MagazinesType" /> <xs:element name="Kindles" type="KindlesType" /> <xs:element name="Halt" type="ValidationKiller" /> </xs:choice> </xs:complexType> </xs:element> where ValidationKiller is a complexType containing an empty choice: <xs:complexType name="ValidationKiller"> <xs:choice/> </xs:complexType> To halt the communication the sender sends this XML document: <Document> <Halt/> </Document> That fails validation and thus terminates the connection. Is that a reasonable use of ValidationKiller? /Roger From: Costello, Roger L. Hi Folks, Thanks for the outstanding responses. I have learned that an empty choice:
<xs:complexType name="ValidationKiller"> has no valid content, i.e., the set of valid content is the empty set, {}. When would one use such a complex type? Can you think of a use-case for it? /Roger |