使用XSD发生指标

时间:2009-05-19 13:03:43

标签: xml xsd

XML Schema指定“发生指标”(maxOccurrence,minOccurrence)。是否有“最佳实践”,其中应使用元素(xsd:element,xsd:sequence或xsd:all)这些指标?

示例:

或者


<xsd:element name="XList">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="X" type="xsd:token" minOccurs="1" maxOccurs="unbounded" />
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>


<xsd:element name="XList">
    <xsd:complexType>
        <xsd:sequence minOccurs="1" maxOccurs="unbounded">
            <xsd:element name="X" type="xsd:token" />
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

我想到达:


<XList>
    <X>First</X>
    <X>Second</X>
    <X>Third</X>
    <X>Fourth</X>
    <X>Fifth</X>
...
</XList>

2 个答案:

答案 0 :(得分:7)

我发现了自己。

我的例子之间的区别乍一看并不是很明显,但如果这个例子稍微复杂一点就会有意义。

以下扩展阐明了差异:


<xsd:element name="XList">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="X" type="xsd:token"
                         minOccurs="1" maxOccurs="1"/>
            <xsd:element name="Y" type="xsd:token"
                         minOccurs="1" maxOccurs="1"/>   
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

导致


<XList>
    <X>Only X</X>
    <Y>Only Y</Y>
</XList>

,而


<xsd:element name="XList">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="X" type="xsd:token"
                         minOccurs="1" maxOccurs="unbounded"/>
            <xsd:element name="Y" type="xsd:token"
                         minOccurs="1" maxOccurs="unbounded"/>   
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

导致


<XList>
    <X>First X</X>
    <X>Second X</X>
    <X>Third X</X>
    ...
    <Y>First Y</Y>
    <Y>Second Y</Y>
    ...
</XList>


<xsd:element name="XList">
    <xsd:complexType>
        <xsd:sequence minOccurs="1" maxOccurs="unbounded" >
            <xsd:element name="X" type="xsd:token"
                         minOccurs="2" maxOccurs="2"/>
            <xsd:element name="Y" type="xsd:token"
                         minOccurs="1" maxOccurs="1"/>   
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

导致


<XList>
    <X>First X</X>
    <X>Second X</X>
    <Y>First Y</Y>
    <X>Third X</X>
    <X>Fourth X</X>
    <Y>Second Y</Y>
    ...
</XList>


<xsd:element name="XList">
    <xsd:complexType>
        <xsd:sequence minOccurs="1" maxOccurs="unbounded" >
            <xsd:element name="X" type="xsd:token"
                         minOccurs="1" maxOccurs="unbounded"/>
            <xsd:element name="Y" type="xsd:token"
                         minOccurs="1" maxOccurs="unbounded"/>   
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

导致


<XList>
    <X>First X</X>
    <X>Second X</X>
    <X>Third X</X>
    ...
    <Y>First Y</Y>
    <Y>Second Y</Y>
    ...
    <X>Fourth X</X>
    <X>Fifth X</X>
    <X>Sixth X</X>
    ...
    <Y>Third Y</Y>
    <Y>Fourth Y</Y>
    ...
</XList>

答案 1 :(得分:0)

如果你的序列只包含一个孩子,我认为它没有太大的效果。我会把它放在xsd:元素上,但是如果序列中有多个元素,我通常会将它们放在那里。