我正在尝试编写一个允许以下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吗?如果是,怎么样?
答案 0 :(得分:1)
在XSD 1.0中无法基于其他元素约束元素的值。
XSD 1.1具有断言(甚至条件类型赋值),允许每个文档的每个值的约束变化。如果XSD 1.1不是一个选项(因为它不适用于libxml),那么这些检查必须在XSD之外执行。