基于集合值的Xsd元素依赖性

时间:2013-11-05 08:20:22

标签: xml xsd dependencies

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

在集合中,如果其中一个元素包含应该需要另一个元素的application / pdf属性,是否可以在XSD中创建依赖关系,关系或类似内容?

例如:

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

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

例如:

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

正如Michael Kay已经指出的那样,使用断言可以在XSD 1.1中轻松完成。

其他技术包括:

  • 条件类型分配(也是XSD 1.1)
  • Schematron中的
  • 断言(对于XSD 1.1断言,这种情况没有特别的优势,但如果你不能部署XSD 1.1实现但可以部署Schematron验证器,则可能值得研究)
  • 重构XML结构以将MIME类型信息放入元素名称而不是属性值,然后使用普通的内容模型规则来要求添加的信息(这需要将附加信息嵌入到MIME中 - 类型元素或在附近的某个地方,因此可以构建内容模型以有条件地要求它。
  • 对于这种特殊情况,可能可以通过参照完整性约束来做一些聪明的事情