Limit XSD attribute value based on a different attribute value

I have this in XML:

<Const Name="a" Value="1.0"/> <Const Name="b" Value="1"/> <Const Name="c" Value="A"/> <Const Name="d" Value="B"/> 

Now only for Name = "b" Const , Value should be 1, 2, 3 or 4. No other values ​​are allowed. Other Const may contain other values, as shown. How to express it in XSD?

So far I have this:

 <xs:element name="Const"> <xs:complexType> <xs:attribute name="Value" type="xs:string" use="required"/> <xs:attribute name="Name" type="xs:string" use="required"/> </xs:complexType> </xs:element> 

I am using XSD 1.0, it seems: VS2013 ... so the "Alternative" does not work for me ... unfortunately ...

+5
source share
2 answers

You can do this using XSD 1.1 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="Const"> <xs:alternative test="@Name = 'a'" type="aType"/> <xs:alternative type="otherType"/> </xs:element> <xs:complexType name="aType"> <xs:sequence/> <xs:attribute name="Name" type="xs:string"/> <xs:attribute name="Value"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="1"/> <xs:maxInclusive value="4"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> <xs:complexType name="otherType"> <xs:sequence/> <xs:attribute name="Name" type="xs:string"/> <xs:attribute name="Value" type="xs:string"/> </xs:complexType> </xs:schema> 
+11
source

An example ussing xs: assert solution assuming you are using XSD 1.1 :

 <xs:element name="Const"> <xs:complexType> <xs:attribute name="Value" type="xs:string" use="required"/> <xs:attribute name="Name" type="xs:string" use="required"/> <xs:assert test="(@Name='b' and @Value=('1', '2', '3', '4')) or (@Name='a' and @Value=('1.0', '2.0', '3.0', '4.0')) or (@Name='c') or (@Name='d')"></xs:assert> </xs:complexType> </xs:element> 

Please note that this is just an example, and you may need to modify it.

+3
source

All Articles