如何限制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.
之外执行此类检查
我正在尝试编写一个 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.
之外执行此类检查