Schema XML minOccurs / maxOccurs valori predefiniti


214

Mi chiedo come la specifica dello schema XML gestisca questi casi:

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

Nessun maxOccurs dato -> È questa la cardinalità [1..1]?

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

Suppongo che questo non sia semplicemente valido?

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

È questa la cardinalità [0..2] o [1..2]?

Esiste una definizione "ufficiale" su come le specifiche dello schema XML gestiscono questi casi?

Risposte:


327

I valori predefiniti per minOccurse maxOccurssono 1. Pertanto:

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

cardinality è [1-1] Nota: se si specifica solo l' attributo minOccurs, non può essere maggiore di 1, poiché il valore predefinito per maxOccurs è 1.

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

non valido

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

cardinality è [1-2] Nota: se si specifica solo l' attributo maxOccurs, non può essere inferiore a 1, poiché il valore predefinito per minOccurs è 1.

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

è una combinazione valida che rende l'elemento proibito.

Per ulteriori informazioni, consultare http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints


<xsd: element minOccurs = "0" maxOccurs = "0" /> non funziona nel mio caso.
ashish,

4
In tal caso, non definire quell'elemento in xsd
tapasvi il

66

Nuova, estesa risposta a una vecchia domanda comune ...

Valori standard

  • Vincoli di occorrenza minOccurse maxOccurs impostazione predefinita a1 .

Spiegazione di casi comuni

<xsd:element name="A"/>

significa che Aè richiesto e deve apparire esattamente una volta .


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

significa che Aè facoltativo e può apparire al massimo una volta .


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

mezzi Aè necessaria e può ripetere un numero illimitato di volte .


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

significa che Aè facoltativo e può essere ripetuto un numero illimitato di volte .


Guarda anche

  • W3C XML Schema Part 0: Primer

    In generale, è necessario che un elemento appaia quando il valore di minOccurs è 1 o più. Il numero massimo di volte in cui un elemento può apparire è determinato dal valore di un attributo maxOccurs nella sua dichiarazione. Questo valore può essere un numero intero positivo come 41 o il termine non associato per indicare che non esiste un numero massimo di occorrenze. Il valore predefinito per entrambi gli attributi minOccurs e maxOccurs è 1. Pertanto, quando un elemento come un commento viene dichiarato senza un attributo maxOccurs, l'elemento non può verificarsi più di una volta. Assicurarsi che se si specifica un valore solo per l'attributo minOccurs, è inferiore o uguale al valore predefinito di maxOccurs, ovvero è 0 o 1. Analogamente, se si specifica un valore solo per l'attributo maxOccurs, deve essere maggiore o uguale al valore predefinito di minOccurs, ovvero 1 o più.

  • W3C XML Schema Part 1: Structures Second Edition

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

0

Risposta breve:

Come scritto in xsd:

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

Se si fornisce un attributo con numero, il numero è limite. Altrimenti l'attributo dovrebbe apparire esattamente una volta .


-2

esempio:

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>

Risultato:

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

1
La tua risposta non ha nulla a che fare con la domanda posta. Forse l'hai postato alla domanda sbagliata? In ogni caso, dovrebbe essere eliminato. Grazie.
kjhughes,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.