Is it possible to validate XML node in XSD file "conditionally"? That is, validate it based on parent node name?
For example:
<?xml version="1.0"?>
<rootNode>
<parentA>
<value>Some text</value>
</parentA>
<parentB>
<value>Some text</value>
</parentB>
</rootNode>
Validation for value
used in parentA
would look like:
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="10"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Validation for value
used in parentB
would be different:
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="4"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Yes, even in XSD 1.0, locally declared elements can vary in type according to the context provided by the parent element:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="rootNode">
<xs:complexType>
<xs:sequence>
<xs:element name="ParentA">
<xs:complexType>
<xs:sequence>
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="10"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ParentB">
<xs:complexType>
<xs:sequence>
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="4"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
The value
element within ParentA
has a different type than the value
element within ParentB
.