2

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

4

2 回答 2

0

您可以使用 <choice> 和/或 <sequence> 来伪造它。例如,您可以不允许任何内容、fieldB 或 fieldA 和 fieldB,但不能只允许 fieldA。这可能会导致重复,您可以通过定义 complexType 来防止这种情况。

于 2008-11-11T18:35:23.403 回答
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条件类型分配。

于 2012-08-21T00:07:38.623 回答