2012-01-18 67 views
2

我不知道XSD有这个能力,但如果它确实我无法弄清楚如何做到这一点。当提交类型是“submit_one”,报告只能具有值A,B或C时提交类型是“submit_two”,报告只能具有值X,Y,或Z如何可以代表这在XML模式定义文件?XSD元素相关的限制

这些都希望能利用这个模式有效的XML文件。

<submission type="submit_one"> 
    <reports> 
     <report>A</report> 
     <report>B</report> 
    </reports> 
</submission> 

<submission type="submit_two"> 
    <reports> 
     <report>X</report> 
     <report>Y</report> 
    </reports> 
</reports> 

这不会是一个有效的XML

<submission type="submit_one"> 
    <reports> 
     <report>X</report> 
     <report>Z</report> 
    </reports> 
</submission> 

回答

3

如果你做只XSD 1.0的话,那是不可能的。如果您愿意将XSD 1.0处理器与Schematron引擎相结合,那么您可以做到这一点。或者,如果您有权访问XSD 1.1处理器,则可以使用< xsd:assert />来解决此问题,也可以使用类型替代方法。请参阅here了解更多信息。

0

的那种验证你想要做你需要定义两个单独的“提交”类型,一个是一个“限制集”和一个为另一个。不幸的是

通过这样做,你将无法在架构相同的位置在两个不同类型的共享相同的节点名称。

+0

雅,那是我的问题。我需要该节点名称是相同的。我的XSD正试图验证政府创建的模式,这会产生这样的头痛。 – Spidy 2012-01-18 19:59:15