我想有一個後代元素的條件在頂級祖先類型。是否有可能在xml模式1.0中建模該關係?如果是這樣,怎麼樣?後代約束有條件的頂級祖先在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模式1.0。
我明顯可以創建並行層次結構,並且只允許在一個d元素中使用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>
完美!正是我需要的。我不明白創建上下文敏感元素的能力。在我的問題編輯中查看基於CM上面的響應的功能模式。 – user1981490