Xml 如何限制XSD中元素值的组合?

Xml 如何限制XSD中元素值的组合?,xml,xsd,Xml,Xsd,我正在尝试编写一个XML模式,其中允许使用以下XML文档: <e><e1>1</e1><e2>2</e2></e> <e><e1>2</e1><e2>1</e2></e> 现在我试图声明一个限制etype的元素: <xs:element name="e"> <xs:complexType> <xs:

我正在尝试编写一个XML模式,其中允许使用以下XML文档:

<e><e1>1</e1><e2>2</e2></e>
<e><e1>2</e1><e2>1</e2></e>
现在我试图声明一个限制
etype
的元素:

  <xs:element name="e">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="etype">
        ...
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

...
但我不知道如何准确地制定限制

基本上,我需要类似于的东西,e2允许一组给定的值,而这组值取决于e1的值。上面的例子被简化了

这在XML模式中是可能的吗?如果是,如何进行?

XSD 1.0 在XSD1.0中,基于其他元素约束元素的值是不可能的

XSD 1.1
XSD1.1具有断言(甚至条件类型分配),允许约束在每个文档的每个值上变化。如果XSD 1.1不是一个选项(因为它不适用于libxml),那么此类检查必须在XSD之外执行。

XSD 1.0无法表示e2是允许的一组给定值,并且这组值取决于e1的值,但XSD 1.1可以通过断言来执行。XSD 1.1是您的一个选项吗?@kjhughes libxml需要能够使模式有效,因此XSD 1.1不是一个选项。然后必须在XSD之外检查该约束。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="etype">
    <xs:sequence>
      <xs:element name="e1">
        <xs:simpleType>
          <xs:restriction base="xs:int">
            <xs:enumeration value="1"></xs:enumeration>
            <xs:enumeration value="2"></xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="e2">
        <xs:simpleType>
          <xs:restriction base="xs:int">
            <xs:enumeration value="1"></xs:enumeration>
            <xs:enumeration value="2"></xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:schema>
  <xs:element name="e">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="etype">
        ...
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>