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

时间:2016-04-21 13:50:26

标签: xml xsd

我正在尝试编写一个允许以下XML文档的XML Schema:

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

但我对如何制定限制感到茫然。

基本上我需要像 这样的东西允许给定的一组值,这组值取决于e1 的值。上面的例子很简单。

这可以使用XML Schema吗?如果是,怎么样?

1 个答案:

答案 0 :(得分:1)

XSD 1.0

在XSD 1.0中无法基于其他元素约束元素的值。

XSD 1.1

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