我有XML Schema应用程序的问题。第一种情况是一个带有元素引用的序列。这种情况有效,但我有一个请求,允许onlyone
元素中的一个元素main
或元素onlyone
中的problem
(不在main
元素中)。我尝试了很多解决方案,特别是拆分为序列并使元素problem
作为新定义的元素引用。这有效,但当我将complexType
添加到元素problem
时,它会警告我为错误。我需要具有请求条件的新元素problem
。
XSD:
<xs:sequence>
<xs:sequence>
<xs:element ref="el1" minOccurs="1" maxOccurs="1"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="el2" minOccurs="0" maxOccurs="1"/>
<xs:element name="problem" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="inside1" maxOccurs="unbounded"/>
<xs:element ref="inside2" maxOccurs="unbounded"/>
</xs:choice>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element ref="onlyone" minOccurs="0" maxOccurs="1"/>
</xs:choice>
<xs:element ref="el3" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:sequence>
<xs:element ref="el1" minOccurs="1" maxOccurs="1"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="el2" minOccurs="0" maxOccurs="1"/>
<xs:element name="problem" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="inside1" maxOccurs="unbounded"/>
<xs:element ref="onlyone" minOccurs="0" maxOccurs="1"/>
<xs:element ref="inside2" maxOccurs="unbounded"/>
</xs:choice>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:choice>
<xs:element ref="el3" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:sequence>
在保存时,XMLSpy写信给我:
元素问题&#39;与元素问题不一致&#39; cos元素一致性1:两种类型定义(&#39; {anonymous}&#39;和#39; {anonymous}&#39;)必须命名。
答案 0 :(得分:0)
XSD具有Element Declarations Consistent约束,要求内容模型中的相同命名元素具有一致的内容模型。您的problem
元素通过在同一优质内容模型中包含两个不同的内容模型而违反此约束,因此确实是一个问题。
分辨率可采用以下形式之一:
problem
元素。problem
元素的内容模型保持一致
(更好,通常引用(通过xs:element/@ref
)。problem
内容模型之间的兄弟关系。