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

How to restrict combination of element values in XSD?

我正在尝试编写一个 XML 架构,其中允许以下 XML 文档:

<e><e1>1</e1><e2>2</e2></e>
<e><e1>2</e1><e2>1</e2></e>

但不是:

<e><e1>1</e1><e2>1</e2></e>
<e><e1>2</e1><e2>2</e2></e>

每一行代表一个文档。

为此,我创建了一个具有复杂类型 etype 的架构,如下所示:

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

现在我尝试声明一个限制 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

在 XSD 1.0 中无法根据其他元素约束元素的值。

XSD 1.1

XSD 1.1 具有断言(甚至是条件类型分配),允许约束因每个文档的值而异。如果 XSD 1.1 不是一个选项(因为它不适用于 libxml),则必须在 XSD.

之外执行此类检查