Schemat XML Wartości domyślne minOccurs / maxOccurs

214

Zastanawiam się, jak specyfikacja schematu XML obsługuje te przypadki:

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

Nie podano maxOccurs -> Czy to jest liczność [1..1]?

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

Przypuszczam, że to po prostu nieważne?

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

Czy to jest liczność [0..2] czy [1..2]?

Czy istnieje „oficjalna” definicja tego, jak specyfikacja schematu XML obsługuje te przypadki?

Chris
źródło

Odpowiedzi:

327

Domyślne wartości dla minOccursi maxOccurswynoszą 1. Zatem:

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

liczność wynosi [1-1] Uwaga: jeśli podasz tylko atrybut minOccurs, nie może być on większy niż 1, ponieważ domyślna wartość dla maxOccurs to 1.

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

nieważny

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

liczność wynosi [1-2] Uwaga: jeśli podasz tylko atrybut maxOccurs, nie może być mniejszy niż 1, ponieważ domyślna wartość dla minOccurs to 1.

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

jest prawidłową kombinacją, która uniemożliwia element.

Aby uzyskać więcej informacji, zobacz http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

jasso
źródło
<xsd: element minOccurs = "0" maxOccurs = "0" /> nie działa w moim przypadku.
ashish
4
W takim przypadku nie definiuj tego elementu w xsd
tapasvi
66

Nowa, rozszerzona odpowiedź na stare, często zadawane pytanie ...

Wartości domyślne

  • Ograniczenia występowania minOccursi maxOccurs domyślnie na1 .

Najczęstsze przypadki wyjaśnione

<xsd:element name="A"/>

środki Awymagane i muszą pojawić się dokładnie raz .


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

środki Aopcjonalne i mogą pojawić się maksymalnie raz .


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

środki Awymagane i mogą powtarzać się nieograniczoną liczbę razy .


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

oznacza Ato opcjonalne i mogą powtarzać się nieograniczoną liczbę razy .


Zobacz też

  • W3C XML Schema Part 0: Primer

    Ogólnie rzecz biorąc, element musi się pojawić, gdy wartość minOccurs wynosi 1 lub więcej. Maksymalna liczba wystąpień elementu zależy od wartości atrybutu maxOccurs w jego deklaracji. Ta wartość może być dodatnią liczbą całkowitą, taką jak 41, lub terminem nieograniczonym, wskazującym, że nie ma maksymalnej liczby wystąpień. Domyślna wartość zarówno atrybutów minOccurs, jak i maxOccurs wynosi 1. Zatem, gdy element taki jak komentarz zostanie zadeklarowany bez atrybutu maxOccurs, element nie może wystąpić więcej niż jeden raz. Upewnij się, że jeśli podasz wartość tylko dla atrybutu minOccurs, jest ona mniejsza lub równa wartości domyślnej maxOccurs, tj. Wynosi 0 lub 1. Podobnie, jeśli podasz wartość tylko dla atrybutu maxOccurs, musi ona wynosić większa lub równa wartości domyślnej minOccurs, tj. 1 lub więcej.

  • W3C XML Schema Part 1: Structures Second Edition

    <element
      maxOccurs = (nonNegativeInteger | unbounded)  : 1
      minOccurs = nonNegativeInteger : 1
      >
    
    </element>
kjhughes
źródło
0

Krótka odpowiedź:

Jak napisano w xsd:

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

Jeśli podasz atrybut z liczbą, wówczas liczba jest granicą. W przeciwnym razie atrybut powinien pojawić się dokładnie raz .

Daniel Perník
źródło
-2

przykład:

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>

Wynik:

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
źródło
1
Twoja odpowiedź nie ma nic wspólnego z zadanym pytaniem. Być może wysłałeś to na niewłaściwe pytanie? W każdym razie należy go usunąć. Dziękuję Ci.
kjhughes