XML XSD 基于父元素的验证?

XML XSD validation based on parent element?

是否可以验证 XSD 文件 "conditionally" 中的 XML 节点?即根据父节点名来验证?

例如:

<?xml version="1.0"?>
<rootNode>
  <parentA>
    <value>Some text</value>
  </parentA>
  <parentB>
    <value>Some text</value>
  </parentB>  
</rootNode>

parentA 中使用的 value 的验证看起来像:

<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>

parentB 中使用的 value 的验证会有所不同:

<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>

是的,即使在 XSD 1.0 中,局部声明的元素也可以根据父元素提供的上下文在类型上有所不同:

<?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>

ParentA 中的 value 元素与 ParentB 中的 value 元素具有不同的类型。