233 votes

Valeurs par défaut de XML Schema minOccurs / maxOccurs

Je me demande comment la spécification XML Schema gère ces cas :

<xsd:element minOccurs="1" name="asdf"/>

Pas de maxOccurs donné -> Est-ce la cardinalité [1..1] ?

<xsd:element minOccurs="5" maxOccurs="2" name="asdf"/>

Je suppose que c'est tout simplement invalide ?

<xsd:element maxOccurs="2" name="asdf"/>

S'agit-il de la cardinalité [0..2] ou [1..2] ?

Existe-t-il une définition "officielle" de la manière dont la spécification XML Schema traite ces cas ?

346voto

jasso Points 7802

Les valeurs par défaut pour minOccurs y maxOccurs sont égaux à 1. Ainsi :

<xsd:element minOccurs="1" name="asdf"/>

la cardinalité est de [1-1] Remarque : si vous spécifiez sólo minOccurs, elle ne peut pas être supérieure à 1, car la valeur par défaut de maxOccurs est 1.

<xsd:element minOccurs="5" maxOccurs="2" name="asdf"/>

invalide

<xsd:element maxOccurs="2" name="asdf"/>

la cardinalité est de [1-2] Note : si vous spécifiez sólo maxOccurs, elle ne peut pas être inférieure à 1, car la valeur par défaut de minOccurs est 1.

<xsd:element minOccurs="0" maxOccurs="0"/>

est une combinaison valide qui rend l'élément interdit.

Pour plus d'informations, voir http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

0 votes

<xsd:element minOccurs="0" maxOccurs="0"/> ne fonctionne pas dans mon cas.

6 votes

Dans ce cas, ne définissez pas cet élément dans le fichier xsd

85voto

kjhughes Points 5581

<em>Une nouvelle réponse élargie à une ancienne question fréquemment posée...</em>

Valeurs par défaut

  • Contraintes d'occurrence minOccurs y maxOccurs par défaut 1 .

Les cas les plus courants expliqués

<xsd:element name="A"/>

signifie A es requis et doit apparaître exactement une fois .


<xsd:element name="A" minOccurs="0"/>

signifie A es en option et peut apparaître au maximum une fois .


 <xsd:element name="A" maxOccurs="unbounded"/>

signifie A es requis et peut répéter une nombre illimité de fois .


 <xsd:element name="A" minOccurs="0" maxOccurs="unbounded"/>

signifie A es en option et peut répéter une nombre illimité de fois .


Voir aussi

  • W3C XML Schema Part 0 : Primer (en anglais)

    En général, un élément est tenu d'apparaître lorsque la valeur de minOccurs est égale ou supérieure à 1. Le nombre maximum de fois qu'un élément peut apparaître est déterminé par la valeur de l'attribut maxOccurs de sa déclaration. déclaration. Cette valeur peut être un nombre entier positif tel que 41, ou le terme terme non borné pour indiquer qu'il n'y a pas de nombre maximal d'occurrences. La valeur par défaut des attributs minOccurs et maxOccurs est 1. est 1. Ainsi, lorsqu'un élément tel qu'un commentaire est déclaré sans attribut maxOccurs, l'élément ne peut pas apparaître plus d'une fois. Assurez-vous que si vous spécifiez une valeur pour l'attribut minOccurs uniquement, elle est inférieure ou égale à la valeur par défaut de maxOccurs, c'est-à-dire qu'elle soit égale à 0 ou 1. De même, si vous spécifiez une valeur pour le seul attribut maxOccurs, elle doit être supérieure ou égale à la valeur par défaut de minOccurs, c'est-à-dire 1 ou plus. Si les deux attributs sont omis, l'élément doit apparaître exactement une fois. apparaître exactement une fois.

  • W3C XML Schema Partie 1 : Structures Deuxième édition

    <element
      maxOccurs = (nonNegativeInteger | unbounded)  : 1
      minOccurs = nonNegativeInteger : 1
      >
    
    </element>

1voto

Daniel Perník Points 1556

Réponse courte :

Comme écrit dans xsd :

<xs:attribute name="minOccurs" type="xs:nonNegativeInteger" use="optional" default="1"/>
<xs:attribute name="maxOccurs" type="xs:allNNI" use="optional" default="1"/>

Si vous fournissez un attribut avec un numéro, alors le numéro est limitatif. Sinon, l'attribut doit apparaître exactement une fois .

-4voto

Ausra Points 21

Exemple :

XML

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="country.xsl"?>
<country xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="country.xsd">
    <countryName>Australia</countryName>
    <capital>Canberra</capital>
    <nationalLanguage>English</nationalLanguage>
    <population>21000000</population>
    <currency>Australian Dollar</currency>
    <nationalIdentities>
        <nationalAnthem>Advance Australia Fair</nationalAnthem>
        <nationalDay>Australia Day (26 January)</nationalDay>
        <nationalColour>Green and Gold</nationalColour>
        <nationalGemstone>Opal</nationalGemstone>
        <nationalFlower>Wattle (Acacia pycnantha)</nationalFlower>
    </nationalIdentities>
    <publicHolidays>
        <newYearDay>1 January</newYearDay>
        <australiaDay>26 January</australiaDay>
        <anzacDay>25 April</anzacDay>
        <christmasDay>25 December</christmasDay>
        <boxingDay>26 December</boxingDay>
        <laborDay>Variable Date</laborDay>
        <easter>Variable Date</easter>
        <queenBirthDay>21 April (Variable Date)</queenBirthDay>
    </publicHolidays>
    <states>
        <stateName><Name>NSW -  New South Wales</Name></stateName>
        <stateName><Name>VIC -  Victoria</Name></stateName>
        <stateName><Name>QLD -  Queensland</Name></stateName>
        <stateName><Name>SA -  South Australia</Name></stateName>
        <stateName><Name>WA -  Western Australia</Name></stateName>
        <stateName><Name>TAS -  Tasmania</Name></stateName>
    </states>
    <territories>
        <territoryName>ACT -  Australian Capital Territory</territoryName>
        <territoryName>NT -  Northern Territory</territoryName>
    </territories>
</country>

XSD :

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="country">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="countryName" type="xs:string"/>
                <xs:element name="capital" type="xs:string"/>
                <xs:element name="nationalLanguage" type="xs:string"/>
                <xs:element name="population" type="xs:double"/>
                <xs:element name="currency" type="xs:string"/>
                <xs:element name="nationalIdentities">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="nationalAnthem" type="xs:string"/>
                        <xs:element name="nationalDay" type="xs:string"/>
                        <xs:element name="nationalColour" type="xs:string"/>
                        <xs:element name="nationalGemstone" type="xs:string"/>
                        <xs:element name="nationalFlower" type="xs:string"/>
                    </xs:sequence>
                </xs:complexType>
                </xs:element>
                <xs:element name="publicHolidays">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="newYearDay" maxOccurs="1" type="xs:string"/>
                            <xs:element name="australiaDay" maxOccurs="1" type="xs:string"/>
                            <xs:element name="anzacDay" maxOccurs="1" type="xs:string"/>
                            <xs:element name="christmasDay" maxOccurs="1" type="xs:string"/>
                            <xs:element name="boxingDay" maxOccurs="1" type="xs:string"/>
                            <xs:element name="laborDay" maxOccurs="1" type="xs:string"/>
                            <xs:element name="easter" maxOccurs="1" type="xs:string"/>
                            <xs:element name="queenBirthDay" maxOccurs="1" type="xs:string"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="states">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="stateName" minOccurs="1" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="Name" type="xs:string"/>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="territories">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="territoryName" maxOccurs="unbounded"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

XSL :

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" indent="yes" version="4.0"/>
    <xsl:template match="/">
        <html>
            <body>          
                <xsl:for-each select="country">         
                    <xsl:value-of select="countryName"/><br/>
                    <xsl:value-of select="capital"/><br/>
                    <xsl:value-of select="nationalLanguage"/><br/>
                    <xsl:value-of select="population"/><br/>
                    <xsl:value-of select="currency"/><br/>              
                    <xsl:for-each select="nationalIdentities">
                        <xsl:value-of select="nationalAnthem"/><br/>
                        <xsl:value-of select="nationalDay"/><br/>
                        <xsl:value-of select="nationalColour"/><br/>
                        <xsl:value-of select="nationalGemstone"/><br/>
                        <xsl:value-of select="nationalFlower"/><br/>
                    </xsl:for-each>
                    <xsl:for-each select="publicHolidays">
                        <xsl:value-of select="newYearDay"/><br/>
                        <xsl:value-of select="australiaDay"/><br/>
                        <xsl:value-of select="anzacDay"/><br/>
                        <xsl:value-of select="christmasDay"/><br/>
                        <xsl:value-of select="boxingDay"/><br/>
                        <xsl:value-of select="laborDay"/><br/>
                        <xsl:value-of select="easter"/><br/>
                        <xsl:value-of select="queenBirthDay"/><br/>
                    </xsl:for-each>
                    <xsl:for-each select="states/stateName">
                        <xsl:value-of select="Name"/><br/>
                    </xsl:for-each>
                </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Résultat :

Australia
Canberra
English
21000000
Australian Dollar
Advance Australia Fair
Australia Day (26 January)
Green and Gold
Opal
Wattle (Acacia pycnantha)
1 January
26 January
25 April
25 December
26 December
Variable Date
Variable Date
21 April (Variable Date)
NSW - New South Wales
VIC - Victoria
QLD - Queensland
SA - South Australia
WA - Western Australia
TAS - Tasmania

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X