0

XML 是否需要针对 XSD 进行严格验证?如何在 XSD 中验证基于条件的 XML?

我有一个需要验证条件的场景。在做了一些研究之后,我发现 XSD 1.0 不会进行基于条件的验证。

示例:基于属性“Y”或“N”,我必须显示不同的元素。

请提供任何建议。

4

2 回答 2

1

考虑以下设计:在我们的A元素内部,我们有一个frob值为“Y”或值为“N”的属性。如果frob='Y', 则A必须包含B, C, 和零个或多个D; 如果frob='N', 那么 的内容AX, Y, Z. 正如您所说,XSD 1.0 无法强制frob属性与A.

现在考虑以下设计:A元素包含BC后跟零次或多次出现D, 或X, Y, 和Z按此顺序。XSD 1.0 可以很简单地表达这种设计。

对于第一个设计正确的每个 XML 实例,都有一个对应第二个设计正确的对应实例,反之亦然。换句话说,这两种设计包含完全相同的信息。

在这种情况下,我的建议是问自己为什么要使用冗余frob属性,因为它没有传达内容尚未传达的有用信息A

于 2014-09-04T13:32:26.530 回答
1

不,XML 不必针对 XSD 进行验证。

XSD 1.0 无法对您的数据实施任意约束。如果您有无法使用 XSD 1.0 强制执行的约束,您有多种选择:重新设计 XML,迁移到 XSD 1.1,使用不同的技术验证它(包括编写您自己的自定义验证器的选项,比如在 XSLT 中),或根本不验证它。

于 2014-09-04T16:02:07.860 回答