我试图为特定元素支持两种不同的结构。
这是我试图允许的例子:
<wrapper>
<example>
<a>str</a>
<b>str</b>
<cs>
<c>str</c>
<c>str</c>
<c>str</c>
</cs>
</example>
<example>
<a>str</a>
<e>str</e>
<cs>
<c>str</c>
<c>str</c>
<d>str</d>
</cs>
</example>
</wrapper>
显然结构不同,虽然它包含一些类似的部分。
规则:
我试图编写以下xsd:
<xs:element name="wrapper">
<xs:complexType>
<xs:sequence>
<xs:element name="example">
<xs:complexType>
<xs:choice maxOccurs="1" minOccurs="1">
<xs:sequence>
<xs:element name="a" maxOccurs="1" minOccurs="1" type="xs:string"/>
<xs:element name="b" maxOccurs="1" minOccurs="1" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="cs">
<xs:complexType>
<xs:sequence>
<xs:element name="c" maxOccurs="unbounded" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:sequence>
<xs:element name="a" maxOccurs="1" minOccurs="1" type="xs:string"/>
<xs:element name="e" maxOccurs="1" minOccurs="1" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="cs">
<xs:complexType>
<xs:sequence>
<xs:element name="c" maxOccurs="unbounded" type="xs:string"/>
<xs:element name="d" maxOccurs="1" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
但是,当我使用它进行验证时,结果是一个例外:
org.xml.sax.SAXParseException:类型&#39;#AnonType_example&#39;出错。 名称为“cs&#39;”且具有不同类型的多个元素出现在 模特组。
实施此类验证的最佳方法是什么?我正在尝试提取组下的每个序列并引用它但结果是相同的。
修改 试图采取共同措施,但仍然抱怨cs:
<xs:element name="wrapper">
<xs:complexType>
<xs:sequence>
<xs:element name="example">
<xs:complexType>
<xs:sequence>
<xs:element name="a" maxOccurs="1" minOccurs="1" type="xs:string"/>
<xs:choice maxOccurs="1" minOccurs="1">
<xs:sequence>
<xs:element name="b" maxOccurs="1" minOccurs="1" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="cs">
<xs:complexType>
<xs:sequence>
<xs:element name="c" maxOccurs="unbounded" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:sequence>
<xs:element name="e" maxOccurs="1" minOccurs="1" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="cs">
<xs:complexType>
<xs:sequence>
<xs:element name="c" maxOccurs="unbounded" type="xs:string"/>
<xs:element name="d" maxOccurs="1" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
类型&#39;#AnonType_examplewrapper&#39;出错。名称为“cs&#39;”且具有不同类型的多个元素将显示在模型组中。
答案 0 :(得分:0)
您的内容模型必须明确无误。因此,举例来说,不应在(abc)
和(aecd)
之间进行选择,而应将其重写为以a
开头并继续选择的序列,即{{1} }。如果有选择,遇到的第一个元素名称必须使系统能够决定选择哪个分支。
编辑,因为你似乎需要拼写出来:
(a(bc|ecd))