簡體   English   中英

使用XSD發生指標

[英]Usage of XSD occurrence Indicators

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>

我發現了自己。

我的例子之間的區別乍一看並不是很明顯,但如果這個例子稍微復雜一點就有意義了。

以下擴展闡明了差異:


<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>

如果你的序列只包含一個孩子,我認為它沒有太大的效果。 我會把它放在xsd:元素上,但是如果序列中有多個元素,我通常會將它們放在那里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM