Require XML element in XSD when another element has certain value?

XSD 1.1 Here’s how use xs:assert to make IBAN be mandatory when TYPE = ‘INTERNATIONAL’: <?xml version=”1.0″ encoding=”UTF-8″?> <xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema” xmlns:vc=”http://www.w3.org/2007/XMLSchema-versioning” vc:minVersion=”1.1″> <xs:element name=”root”> <xs:complexType> <xs:sequence> <xs:element name=”TYPE” type=”TestEnum” /> <!– // This Element should only required when TYPE = INTERNATIONAL –> <xs:element name=”IBAN” minOccurs=”0″/> </xs:sequence> <xs:assert test=”not(TYPE = ‘INTERNATIONAL’) or IBAN”/> </xs:complexType> </xs:element> <xs:simpleType … Read more

How to make type depend on attribute value using Conditional Type Assignment

You can do this using XSD 1.1’s Conditional Type Assignment: <?xml version=”1.0″ encoding=”UTF-8″?> <xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema” xmlns:vc=”http://www.w3.org/2007/XMLSchema-versioning” elementFormDefault=”qualified” vc:minVersion=”1.1″> <xs:element name=”listOfA”> <xs:complexType> <xs:sequence> <xs:element name=”a” maxOccurs=”unbounded”> <xs:alternative test=”@type = 1″ type=”a1Type”/> <xs:alternative test=”@type = 2″ type=”a2Type”/> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name=”a1Type”> <xs:sequence> <xs:element name=”name”/> <xs:element name=”surname”/> </xs:sequence> </xs:complexType> <xs:complexType name=”a2Type”> <xs:sequence> <xs:element name=”name”/> <xs:element name=”id”/> … Read more