xml - 使用 XSD 一个元素对另一个元素的依赖性

标签 xml xsd xml-parsing xsd-validation xml-validation

我需要检查如果 imagetype = Idocext 只能是 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。

关于xml - 使用 XSD 一个元素对另一个元素的依赖性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35625124/

相关文章:

xml - 使用 Perl 和 XML::Twig 解析 XML - 进一步提取嵌套子项

xml - HTML 到 XML,反之亦然,并在运行时从 UI - JAXB 使用模式进行验证?

使用 XSD 时出现 xmllint 验证错误 "no DTD found"

xml - 无法通过 XPathNavigator 读取 xml

xml - 如何使用具有另一个给定属性值的元素访问命名属性

java - 处理多个按钮

windows - Windows 版 OCaml 中的 XML 解析器

c++ - 我如何使用 tinyxml 将 xml 属性转换为 C++ 类

jboss - StAXSource 未被 JBoss EAP 6.1 中的验证器接受

android - 在 android 中自定义时 Swich 背景图像拉伸(stretch)