0

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

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

例如:

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

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

例如:

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

2 回答 2

0

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

其他技术包括:

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

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

于 2013-11-05T12:29:14.367 回答