使用 XSD 一个元素对另一个元素的依赖
Dependency of one element on another using XSD
我需要检查如果 imagetype
= I
那么 docext
应该只是 TIFF/tiff
并且如果 imagetype
= N
那么docext
应该是 PDF/pdf
。否则验证应该失败。我正在为此写一个 XSD 并且不知道如何实现这个约束。目前我正在使用 XSD 1.0.
<xs:element name="docext" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="((T|t)(I|i)(F|f)(F|f))|((P|p)(D|d)(F|f))" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="imagetype" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="N" />
<xs:enumeration value="I" />
</xs:restriction>
</xs:simpleType>
</xs:element>
XSD 1.0 无法满足您所述的要求。
您的选择包括以下任一选项:
- 重新设计您的 XML. 如果可能,这是更好的选择。类型
通常通过元素名称比通过元素名称更好地传达信息
元素值;这样的设计通常可以避免需要
依赖约束超出了基本可以表达的范围
内容模型要求。
- 使用 XSD 1.1 断言。 您可以使用 XPath 在以下位置指定约束
docext
和 imagetype
的共同祖先点。你会
如果你必须走这条路,你需要考虑比显示更多的 XSD。
我需要检查如果 imagetype
= I
那么 docext
应该只是 TIFF/tiff
并且如果 imagetype
= N
那么docext
应该是 PDF/pdf
。否则验证应该失败。我正在为此写一个 XSD 并且不知道如何实现这个约束。目前我正在使用 XSD 1.0.
<xs:element name="docext" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="((T|t)(I|i)(F|f)(F|f))|((P|p)(D|d)(F|f))" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="imagetype" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="N" />
<xs:enumeration value="I" />
</xs:restriction>
</xs:simpleType>
</xs:element>
XSD 1.0 无法满足您所述的要求。
您的选择包括以下任一选项:
- 重新设计您的 XML. 如果可能,这是更好的选择。类型 通常通过元素名称比通过元素名称更好地传达信息 元素值;这样的设计通常可以避免需要 依赖约束超出了基本可以表达的范围 内容模型要求。
- 使用 XSD 1.1 断言。 您可以使用 XPath 在以下位置指定约束
docext
和imagetype
的共同祖先点。你会 如果你必须走这条路,你需要考虑比显示更多的 XSD。