使用 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 无法满足您所述的要求。

您的选择包括以下任一选项:

  1. 重新设计您的 XML. 如果可能,这是更好的选择。类型 通常通过元素名称比通过元素名称更好地传达信息 元素值;这样的设计通常可以避免需要 依赖约束超出了基本可以表达的范围 内容模型要求。
  2. 使用 XSD 1.1 断言。 您可以使用 XPath 在以下位置指定约束 docextimagetype 的共同祖先点。你会 如果你必须走这条路,你需要考虑比显示更多的 XSD。