【发布时间】:2017-07-21 12:59:20
【问题描述】:
我正在编写一个模式,我想定义以下结构(假设我们有类型A, B, C, D, E)。模式应该接受[A, B or C] 之一,它必须出现并且只出现1 次+ [D or E] 之一,它可能出现一个或两个或两者都不出现,但每次不超过一次。 ABC 和DE 类的元素都应该对它们遵循的顺序不敏感。换句话说,接受以下示例:
<root>
<el_A/>
</root>
<root>
<el_B/>
<el_E/>
<el_D/>
</root>
<root>
<el_C/>
<el_D/>
</root>
以下是架构不应接受的几个示例:
<root>
<el_A/>
<el_B/>
<el_E/>
<el_D/>
</root>
<root>
<el_C/>
<el_D/>
<el_D/>
</root>
我为 root 定义的类型如下所示:
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="1" maxOccurs="1">
<xs:element name="el_A" type="tns:A"/>
<xs:element name="el_B" type="tns:B"/>
<xs:element name="el_C" type="tns:C"/>
</xs:choise>
<xs:choice minOccurs="0">
<xs:sequence>
<xs:element name="el_D" type="tns:D" minOccurs="1" maxOccurs="1"/>
<xs:element name="el_E" type="tns:E" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:sequence>
<xs:element name="el_E" type="tns:E" minOccurs="1" maxOccurs="1"/>
<xs:element name="el_D" type="tns:D" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:element name="el_E" type="tns:E"/>
<xs:element name="el_D" type="tns:D"/>
</xs:choise>
</xs:sequence>
</xs:complexType>
但是,当针对此架构验证文档时,处理器会报告 el_D 的“cos-nonambig”错误。我不明白为什么这个模式允许模棱两可的解释,因为它描述了三个元素之间的选择:要么都以DE 顺序存在,要么都以ED 顺序存在,要么只存在E,要么只存在D。
【问题讨论】: