这更像是一个通用的XML Schema问题,但是您是否以及如何指定 XML Schema中的字段依赖项。例如,我怎么说fieldB是 如果提供了fieldA,则需要
答案 0 :(得分:0)
你可以使用< choice>伪造这个和/或<序列>。例如,您可以不允许任何内容,fieldB或fieldA和fieldB,但不能只允许fieldA。这可能会导致重复,您可以通过定义complexType来阻止重复。
答案 1 :(得分:0)
您对此类事情的选择取决于“字段”在XML中的表示方式以及您正在使用的XSD版本。
如果fieldA
和fieldB
是元素,那么在适当的内容模型中包含以下形式的某些结构就可以了。
<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
和条件类型赋值。