XSD 1.1 xs:alternative/xs:assert

Gabriel picture Gabriel · Jul 16, 2014 · Viewed 9.1k times · Source

Is that possible with xsd 1.1? I want to switch the attributes depending on the "type" if its "A" or "B". How can I write an XSD 1.1 syntax for this simple problem?

  <?xml version="1.0"?>
  <node type="A" a1="asd" a2="d"/>

  <node type="B" b="4" />

Answer

Michael Kay picture Michael Kay · Jul 16, 2014

Yes, you can define alternative types for node depending on the value of the type attribute using xs:alternative. You don't need xs:assert in this case.

Your example seems so similar to the ones in the spec that I'm not quite sure why you are asking the question. For example:

<xs:element name="message" type="messageType">
  <xs:alternative test="@kind='string'" type="messageTypeString"/>
  <xs:alternative test="@kind='base64'" type="messageTypeBase64"/>
  <xs:alternative test="@kind='binary'" type="messageTypeBase64"/>
  <xs:alternative test="@kind='xml'"    type="messageTypeXML"/>
  <xs:alternative test="@kind='XML'"    type="messageTypeXML"/> 
  <xs:alternative                       type="messageType"/>
</xs:element>