Skema XML minOccurs / nilai default maxOccurs

214

Saya ingin tahu bagaimana spesifikasi Skema XML menangani kasus ini:

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

Tidak ada maxOccurs yang diberikan -> Apakah ini kardinalitas [1..1]?

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

Saya kira ini tidak valid?

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

Apakah ini kardinalitas [0..2] atau [1..2]?

Apakah ada definisi "resmi" tentang bagaimana skema XML menangani kasus-kasus ini?

Chris
sumber

Jawaban:

327

Nilai default untuk minOccursdan maxOccursadalah 1. Jadi:

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

cardinality adalah [1-1] Catatan: jika Anda hanya menentukan atribut minOccurs, tidak boleh lebih dari 1, karena nilai default untuk maxOccurs adalah 1.

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

tidak valid

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

cardinality adalah [1-2] Catatan: jika Anda hanya menetapkan atribut maxOccurs, itu tidak boleh lebih kecil dari 1, karena nilai default untuk minOccurs adalah 1.

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

adalah kombinasi yang valid yang membuat elemen tersebut dilarang.

Untuk info lebih lanjut, lihat http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

jasso
sumber
<xsd: element minOccurs = "0" maxOccurs = "0" /> tidak berfungsi dalam kasus saya.
ashish
4
Dalam hal ini, jangan mendefinisikan elemen itu di xsd
tapasvi
66

Baru, jawaban yang diperluas untuk pertanyaan lama yang sering diajukan ...

Nilai dasar

  • Batasan kejadian minOccursdan maxOccurs standar untuk1 .

Kasus Umum Dijelaskan

<xsd:element name="A"/>

sarana Ayang diperlukan dan harus muncul tepat satu kali .


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

berarti Aadalah opsional dan mungkin muncul paling banyak sekali .


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

sarana Ayang diperlukan dan dapat mengulangi jumlah yang tidak terbatas kali .


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

berarti Aadalah opsional dan dapat mengulangi jumlah yang tidak terbatas kali .


Lihat juga

  • Skema XML W3C Bagian 0: Primer

    Secara umum, sebuah elemen diperlukan untuk muncul ketika nilai minOccurs adalah 1 atau lebih. Jumlah maksimum kali suatu elemen dapat muncul ditentukan oleh nilai atribut maxOccurs dalam deklarasinya. Nilai ini dapat berupa bilangan bulat positif seperti 41, atau istilah tidak terikat untuk menunjukkan tidak ada jumlah maksimum kejadian. Nilai default untuk atribut minOccurs dan maxOccurs adalah 1. Dengan demikian, ketika elemen seperti komentar dideklarasikan tanpa atribut maxOccurs, elemen tersebut tidak dapat muncul lebih dari satu kali. Pastikan bahwa jika Anda menetapkan nilai hanya untuk atribut minOccurs, itu kurang dari atau sama dengan nilai default maxOccurs, yaitu 0 atau 1. Demikian pula, jika Anda menentukan nilai untuk hanya atribut maxOccurs, itu harus lebih besar dari atau sama dengan nilai default minOccurs, yaitu 1 atau lebih.

  • Skema XML W3C Bagian 1: Struktur Edisi Kedua

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

Jawaban singkat:

Seperti yang ditulis dalam xsd:

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

Jika Anda memberikan atribut dengan nomor, maka nomor tersebut merupakan batas. Kalau tidak, atribut akan muncul tepat sekali .

Daniel Perník
sumber
-2

contoh:

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>

Hasil:

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
sumber
1
Jawaban Anda tidak ada hubungannya dengan pertanyaan yang diajukan. Mungkin Anda mempostingnya ke pertanyaan yang salah? Bagaimanapun, itu harus dihapus. Terima kasih.
kjhughes