我正在尝试为类似于以下内容的 XML 生成一个非常简单的 XML 模式:
<messages>
<item>
<important_tag></important_tag>
</item>
<item>
<important_tag></important_tag>
<tag2></tag2>
</item>
<item>
<tag2></tag2>
<tag3></tag3>
</item>
</messages>
这个想法是<important_tag>
会有一个特定的定义,它可能会或可能不会出现在<item>
. 它也可能出现不止一次。此外,之前或之后可能还有其他标签<important_tag>
,我无法提前命名。
我想给出一个具体的定义<important_tag>
。例如,定义它必须包含的属性。我的意思是,如果important_tag 存在,它必须符合我的定义。任何其他标签不必符合任何定义。
我尝试使用以下方案:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="messages">
<xs:complexType>
<xs:sequence>
<xs:element ref="item" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item">
<xs:complexType>
<xs:sequence>
<xs:element ref="important_tag" minOccurs="0"/>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="important_tag">
<xs:complexType>
<xs:simpleContent>
... specific definitions for important_tag ...
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
这会导致错误提示架构不明确。
确切的错误信息是:
cos-nonambig: '<xs:element ref="important_tag">' makes the content model non-deterministic against '<xs:any>'. Possible causes: name equality, overlapping occurrence or substitution groups.
我正在使用 Altova 的 XML Spy。
我该如何解决这个问题?
谢谢,达娜