XML-Schema minOccurs / maxOccurs Standardwerte

214

Ich frage mich, wie die XML-Schemaspezifikation diese Fälle behandelt:

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

Keine maxOccurs angegeben -> Ist dies die Kardinalität [1..1]?

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

Ich nehme an, das ist einfach ungültig?

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

Ist das die Kardinalität [0..2] oder [1..2]?

Gibt es eine "offizielle" Definition, wie die XML-Schemaspezifikation diese Fälle behandelt?

Chris
quelle

Antworten:

327

Die Standardwerte für minOccursund maxOccurssind 1. Also:

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

Die Kardinalität ist [1-1]. Hinweis: Wenn Sie nur das Attribut minOccurs angeben , darf es nicht größer als 1 sein, da der Standardwert für maxOccurs 1 ist.

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

ungültig

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

Kardinalität ist [1-2] Hinweis: Wenn Sie nur das Attribut maxOccurs angeben , darf es nicht kleiner als 1 sein, da der Standardwert für minOccurs 1 ist.

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

ist eine gültige Kombination, die das Element verbietet.

Weitere Informationen finden Sie unter http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

jasso
quelle
<xsd: element minOccurs = "0" maxOccurs = "0" /> funktioniert in meinem Fall nicht.
Ashish
4
In diesem Fall definieren Sie dieses Element nicht in der xsd
tapasvi
66

Neue, erweiterte Antwort auf eine alte, häufig gestellte Frage ...

Standardwerte

  • Vorkommensbeschränkungen minOccursund maxOccurs Standardeinstellung auf1 .

Häufige Fälle erklärt

<xsd:element name="A"/>

Mittel Aist erforderlich und muss genau einmal erscheinen .


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

Mittel Aist optional und darf höchstens einmal erscheinen .


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

Mittel Aist erforderlich und kann unbegrenzt oft wiederholt werden .


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

Mittel Aist optional und kann unbegrenzt oft wiederholt werden .


Siehe auch

  • W3C XML Schema Teil 0: Grundierung

    Im Allgemeinen muss ein Element angezeigt werden, wenn der Wert von minOccurs 1 oder mehr beträgt. Die maximale Häufigkeit, mit der ein Element angezeigt wird, wird durch den Wert eines maxOccurs-Attributs in seiner Deklaration bestimmt. Dieser Wert kann eine positive Ganzzahl wie 41 oder der Begriff unbegrenzt sein, um anzuzeigen, dass es keine maximale Anzahl von Vorkommen gibt. Der Standardwert für die Attribute minOccurs und maxOccurs ist 1. Wenn ein Element wie ein Kommentar ohne das Attribut maxOccurs deklariert wird, darf das Element daher nur einmal vorkommen. Stellen Sie sicher, dass ein Wert, der nur für das Attribut minOccurs angegeben wird, kleiner oder gleich dem Standardwert von maxOccurs ist, dh 0 oder 1. Wenn Sie einen Wert nur für das Attribut maxOccurs angeben, muss dies auch der Fall sein größer oder gleich dem Standardwert von minOccurs, dh 1 oder mehr.

  • W3C XML-Schema Teil 1: Strukturen Zweite Ausgabe

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

Kurze Antwort:

Wie in xsd geschrieben:

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

Wenn Sie ein Attribut mit einer Nummer angeben, ist die Nummer eine Grenze. Andernfalls sollte das Attribut genau einmal angezeigt werden .

Daniel Perník
quelle
-2

Beispiel:

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>

Ergebnis:

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
Ausra
quelle
1
Ihre Antwort hat überhaupt nichts mit der gestellten Frage zu tun. Vielleicht hast du es auf die falsche Frage gestellt? In jedem Fall sollte es gelöscht werden. Danke dir.
kjhughes