XSD中用于验证XML的条件

时间:2014-09-04 12:56:37

标签: java xml xsd xsd-1.0

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

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

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

请提供任何建议。

2 个答案:

答案 0 :(得分:1)

考虑以下设计:在我们的A元素中,我们有frob属性,其值为'Y'或值'N'。如果frob='Y',则A必须包含BC,以及D的零次或多次出现;如果frob='N',则A的内容为XYZ。正如您所说,XSD 1.0无法强制frob属性与A内容的一致性。

现在考虑以下设计:A元素包含BC,后跟零个或多个D,或者X,按此顺序YZ。 XSD 1.0可以非常简单地表达这种设计。

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

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

答案 1 :(得分:1)

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

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