如何在XML Schema中指定字段依赖?

时间:2008-11-11 17:39:33

标签: xsd

这更像是一个通用的XML Schema问题,但是您是否以及如何指定 XML Schema中的字段依赖项。例如,我怎么说fieldB是 如果提供了fieldA,则需要

2 个答案:

答案 0 :(得分:0)

你可以使用< choice>伪造这个和/或<序列>。例如,您可以不允许任何内容,fieldB或fieldA和fieldB,但不能只允许fieldA。这可能会导致重复,您可以通过定义complexType来阻止重复。

答案 1 :(得分:0)

您对此类事情的选择取决于“字段”在XML中的表示方式以及您正在使用的XSD版本。

如果fieldAfieldB是元素,那么在适当的内容模型中包含以下形式的某些结构就可以了。

<sequence minOccurs="0">
  <element ref="tns:fieldA" minOccurs="0"/>
  <element ref="tns:fieldB"/>
</sequence>

(如果您愿意,两个元素引用可以以其他顺序出现。)我不清楚为什么Erik Hesselink担心这可能导致重复,或者他担心什么形式的重复。

如果您将fieldB作为元素并且fieldA是该元素的(可选?)属性,则您想要的共现约束会自动跟随。

如果同时使它们成为两个属性,则XSD 1.0不能强制执行共现约束;有些人求助于Schematron来处理这样的事情。在XSD 1.1中,在这种情况下强制执行约束的选项包括xs:assert和条件类型赋值。