我希望有一个以顶级祖先类型为条件的后代元素。是否可以在 xml 模式 1.0 中对这种关系进行建模?如果是这样,怎么做?
以下是我想要的结构/验证行为:
<a1>
<b>
<c>
<d/> -- allowed if ancestor is a1
</c>
</b>
</a1>
<a2>
<b>
<c>
<d/> -- validation error - not allowed if ancestor is not a1
</c>
</b>
</a2>
似乎 XSD 1.1 断言可以让我做到这一点,但我坚持使用 XML Schema 1.0。
我显然可以创建并行层次结构,并且只允许在一个中使用 d 元素,但这对于我们模式的用户来说会变得冗长和混乱。
并行层次结构可能如下所示:
<a1>
<b1>
<c1>
<d/> -- allowed in c1 element
</c1>
</b1>
</a1>
<a2>
<b2>
<c2>
<d/> -- not allowed in c2
</c2>
</b2>
</a2>
编辑:使用CM的提示解决上述问题的方案
<xs:element name="a1">
<xs:complexType>
<xs:sequence>
<xs:element name="b" type="b1"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="a2">
<xs:complexType>
<xs:sequence>
<xs:element name="b" type="b2"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="b1">
<xs:sequence>
<xs:element name="c" type="c1"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="b2">
<xs:sequence>
<xs:element name="c" type="c2"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="c1">
<xs:sequence>
<xs:element name="d"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="c2">
<xs:sequence>
</xs:sequence>
</xs:complexType>