我不确定XSD是否有这种能力,但如果有,我就不知道如何做到。当提交类型为"submit_one"时,报告只能有值A、B或C。当提交类别为"submit _two"时,报表只能有值X、Y或Z。如何在XML架构定义文件中表示这一点?
这两个文件都是使用此架构的有效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>
如果您只执行XSD 1.0,那么这是不可能的。如果您愿意将XSD 1.0处理器与Schematron引擎相结合,那么您可以这样做
或者,如果您可以访问XSD 1.1处理器,则可以使用<xsd:assert/>或者您可以使用类型替换。请查看此处以获取更多信息。
对于您想要进行的验证类型,您需要定义两种独立的"提交"类型,一种用于一个"限制集",另一种用于另一个。
不幸的是,这样做将无法在模式中相同位置的两个不同类型之间共享相同的节点名称。