【问题标题】:Xsd element dependency based on collection values基于集合值的 Xsd 元素依赖
【发布时间】:2013-11-05 08:20:22
【问题描述】:

我在我的 XSD 中定义了一个集合,可以在其中将属性设置为特定的 mime 类型。例如,其中一种 mime 类型是:application/pdf。

当集合中的一个元素包含应该需要另一个元素的应用程序/pdf 属性时,是否可以在 XSD 中创建依赖关系、关系或类似的东西?

例如:

<collection>
   <item mime-type="application/pdf" />
   <item mime-type="image/jpeg" />
</collection>

在这个集合中有一个“application/pdf”元素。 XSD 应该要求填写另一个元素(但当集合不包含任何 application/pdf 元素时不需要)。

例如:

<pdfdetails>
   <somedetails></somedetails>
</pdfdetails>

【问题讨论】:

    标签: xml xsd dependencies


    【解决方案1】:

    可以使用 XSD 1.1 中的断言来定义此类依赖关系。在 XSD 1.0 中没有办法做到这一点。 XSD 1.1 目前在 Saxon、Xerces 和(自上周以来)Altova 中实施。

    【讨论】:

    • 感谢您的评论,我会调查一下
    【解决方案2】:

    正如 Michael Kay 已经指出的,这在 XSD 1.1 中使用断言很容易做到。

    其他技术包括:

    • 条件类型赋值(也是 XSD 1.1)
    • Schematron 中的断言(在这种情况下,与 XSD 1.1 断言相比没有特别的优势,但如果您无法部署 XSD 1.1 实现但可以部署 Schematron 验证器,则可能值得研究)
    • 重构 XML 结构以将 MIME 类型信息放入元素名称而不是属性值,然后使用正常的内容模型规则来要求添加信息(这要求附加信息要么嵌入 MIME-类型元素或在附近某处,因此可以构造内容模型以有条件地要求它)
    • 对于这种特殊情况,可以通过引用完整性约束做一些聪明的事情

    【讨论】:

    • 感谢您的评论,我会调查一下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多