我如何实现可以满足以下要求的模式验证
<test>
<e1>abc</e1>
<e2>
<e21>xxx</e21>
<e22>yyy</e22>
</e2>
</test>
所以我的要求是,如果 e21 不为空,则 e22 不能为空,那么我该如何设计我的 xsd 架构
我认为,“如果 e21 不为空,则 e22 不能为空”的要求意味着 e21 和 e22 都为空,或者两者都不是。
如果通过不存在元素来传达 e21 和 e22 的空值,则简单的内容模型可以解决问题:
<complexType name="e2">
<sequence minOccurs="0" maxOccurs="1">
<element ref="e21"/>
<element ref="e22"/>
</sequence>
</complexType>
这里文档中要么同时存在 e21 和 e22,要么都不存在。
如果您还想允许 e21 不存在(null)而 e22 不存在的情况,则将序列更改为
<sequence minOccurs="0" maxOccurs="1">
<element ref="e21" minOccurs="0"/>
<element ref="e22"/>
</sequence>
如果“为空”是指“为空”,则无法在 XSD 1.0 中强制执行约束;在 XSD 1.1 中,您可以使用断言来表达和实施相对复杂的约束。查找有关 XSD 1.1 中的共同约束和断言的 Stack Overflow 问题。