我正在为这样的XML文档编写模式:
<workbook>
<worksheet>
<column/>
</worksheet>
</workbook>
每个节点都可以包装到env元素中(例如)
<workbook>
<env>
<worksheet>
<column/>
</worksheet>
</env>
</workbook>
或
<workbook>
<worksheet>
<env>
<column/>
</env>
</worksheet>
</workbook>
因此,根据env元素的位置,它可以有不同的子节点(工作簿的子节点必须包含工作表子节点,工作表的env-child必须具有列子节点)
当我将env元素声明为嵌套时,我会得到多重定义的元素错误。
我怎么能为这样的文件写xsd,或者它是否可能?
提前致谢!
答案 0 :(得分:0)
是的,这是可能的,因为你可以拥有同名env
但在不同地方有不同类型(结构)的元素 - 这可以解决这个问题:
<xs:element name="workbook">
<xs:complexType>
<xs:choice>
<xs:element name="env">
<xs:complexType>
<xs:sequence>
<xs:element ref="worksheet"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element ref="worksheet"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="worksheet">
<xs:complexType>
<xs:choice>
<xs:element name="env">
<xs:complexType>
<xs:sequence>
<xs:element ref="column"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element ref="column"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="column" type="xs:string">
</xs:element>