Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XSD中用于验证XML的条件_Java_Xml_Xsd_Xsd 1.0 - Fatal编程技术网

Java XSD中用于验证XML的条件

Java XSD中用于验证XML的条件,java,xml,xsd,xsd-1.0,Java,Xml,Xsd,Xsd 1.0,XML是否需要根据XSD进行严格验证?如何在XSD中验证基于条件的XML 我有一个需要验证条件的场景。在做了一些研究之后,我发现XSD1.0不会进行基于条件的验证 示例:根据属性“Y”或“N”,我必须显示不同的元素 请提供任何建议。考虑以下设计:在A元素中,我们有一个frob属性,其值为“Y”或“N”。如果frob='Y',则A必须包含B,C,并且D的出现次数为零或更多;如果frob='N',则A的内容为X,Y,Z。正如您所说,XSD1.0无法强制执行frob属性与A内容的一致性 现在考虑下面的

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

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

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


请提供任何建议。

考虑以下设计:在
A
元素中,我们有一个
frob
属性,其值为“Y”或“N”。如果
frob='Y'
,则
A
必须包含
B
C
,并且
D
的出现次数为零或更多;如果
frob='N'
,则
A
的内容为
X
Y
Z
。正如您所说,XSD1.0无法强制执行
frob
属性与
A
内容的一致性

现在考虑下面的设计:<代码> A<代码>元素包含<代码> B<代码> >代码> C>代码>随后出现“<代码> d>代码>,或“<代码> x <代码> > <代码> y>代码>,和<代码> z <代码>。XSD1.0可以非常简单地表达这种设计

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


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

的内容尚未传递的有用信息。不,XML不必根据XSD进行验证


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

您也可以在其他堆栈站点()上问这个问题。如果不使用frob属性,我完全可以。您能为第二个建议的设计提供xml模式吗?按照您的说法,我们可以为下面的xml构建xsd。请让我知道。我能够使用组来计算上述表示的xsd。假设我想要下面的场景A-BCD还是A-BXYZ。基本上,我希望B出现在这两个版本中。对上面的内容做一点补充。A-B(仅值Y)CD或A-B(仅值N)XYZSo,如果根据xsd对xml结构进行基本验证,然后以编程方式验证条件元素,则应该可以。请确认。是的,这是一种方法。