如何实现可满足以下要求的架构验证
<test>
<e1>abc</e1>
<e2>
<e21>xxx</e21>
<e22>yyy</e22>
</e2>
</test>
所以我的要求是如果e21不为null,e22不能为null,那么我如何设计我的xsd架构
答案 0 :(得分:1)
如果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问题。