XML模式用ref表示不同的片段

时间:2011-03-23 05:13:17

标签: xml xsd

我有这个架构:
片段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以避免重复 我的问候

1 个答案:

答案 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的“顶级”声明的存在才能使它们成为文件室的候选者。

相关问题