O uso de indicadores de ocorrência XSD

votos
5

XML Schema especifica indicadores de ocorrência (maxOccurrence, minOccurrence). Existe uma melhor prática em que os elementos (xsd: element, xsd: seqüência ou xsd: all) estes indicadores devem ser usados?

Exemplo:

ou


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

ou


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

Quero chegar a:


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

Publicado 19/05/2009 em 14:03
fonte usuário
Em outras línguas...                            


2 respostas

votos
6

Eu descobri a mim mesmo.

A diferença entre meus exemplos não é muito óbvio na primeira vista, mas se o exemplo tivesse sido um pouco mais complexo que teria feito sentido.

A extensão a seguir esclarece as diferenças:


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

leva a


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

enquanto que


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

leva a


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

e


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

leva a


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

e


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

leva a


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

Respondeu 19/05/2009 em 15:28
fonte usuário

votos
0

Se a sua sequência contém apenas um filho, acho que não faz diferença muito eficaz. Gostaria de colocá-lo no xsd: element, porém: que é onde eu normalmente colocá-los se havia mais de um elemento na seqüência.

Respondeu 19/05/2009 em 14:27
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more