我有这个架构:
片段1:
<fragments>
<a>
<item></item>
<item></item>
<item></item>
</a>
<a>
<item></item>
<item></item>
<item></item>
</a>
<a>
<item></item>
<item></item>
<item></item>
</a>
</fragments>
fragment2:
<fragments>
<b>
<item></item>
<item></item>
<item></item>
</b>
<b>
<item></item>
<item></item>
<item></item>
</b>
<b>
<item></item>
<item></item>
<item></item>
</b>
</fragments>
fragment3:
<fragments>
<c>
<item></item>
<item></item>
<item></item>
</c>
<c>
<item></item>
<item></item>
<item></item>
</c>
<c>
<item></item>
<item></item>
<item></item>
</c>
</fragments>
<xs:element name="Fragments">
<xs:complexType>
<xs:sequence>
<xs:element ref="A"/>
<xs:element ref="B"/>
<xs:element ref="C"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="A">
<xs:complexType>
<xs:sequence>
<xs:element ref="item" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="B">
<xs:complexType>
<xs:sequence>
<xs:element ref="item" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="C">
<xs:complexType>
<xs:sequence>
<xs:element ref="item" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item">
<xs:complexType>
<xs:sequence>
<xs:element name="location"/>
<xs:element name="quantity"/>
<xs:element name="name"/>
<xs:element name="payment"/>
<xs:element name="description"/>
<xs:element name="shipping"/>
<xs:element name="incategory" maxOccurs="unbounded"/>
<xs:element name="mailbox"/>
</xs:sequence>
<xs:attribute name="id" type="xs:ID" use="required"/>
<xs:attribute name="featured" type="xs:anySimpleType"/>
</xs:complexType>
</xs:element>
回答问题how xsd can represent different xml file? 我可以说我可以通过在模式中使用ref来表示不同分区中的A和B和C.但是我的问题是模式使用带有ref的项来减少重复名称定义。我如何区分表示其他片段的ref和仅用于模式的ref以避免重复 我的问候
答案 0 :(得分:0)
我的问题不清楚,但我想你问,“我怎么能指出A,B和C可以是文档根,但item
不能是文档根?”
没有办法表明哪些全局元素可以作为文档根源。但是,您可以将“内部”元素声明设置为模型组的本地,并引用该模型组。
可能是这样的:
<xs:element name="A">
<xs:complexType>
<xs:sequence>
<group ref="itemgroup" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:group name="itemgroup">
<xs:sequence>
<xs:element name="item>
...
</xs:element>
</xs:sequence>
</xs:group>
顺便说一句,如果我正确理解你的目标,你实际上并不需要Fragments
元素。只有A,B和C的“顶级”声明的存在才能使它们成为文件室的候选者。