Значення за замовчуванням схеми XML-схеми minOccurs / maxOccurs


214

Мені цікаво, як специфікація схеми XML обробляє ці випадки:

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

Не задано maxOccurs -> Це кардинальність [1..1]?

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

Я гадаю, це просто недійсно?

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

Це кардинальність [0..2] чи [1..2]?

Чи існує "офіційне" визначення того, як специфікація XML Schema обробляє ці випадки?

Відповіді:


327

Значення за замовчуванням для minOccursта maxOccursє 1. Таким чином:

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

cardinality - [1-1] Примітка: якщо ви вказали лише атрибут minOccurs, він не може бути більшим за 1, оскільки значення maxOccurs за замовчуванням дорівнює 1.

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

недійсний

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

cardinality - [1-2] Примітка: якщо ви вказали лише атрибут maxOccurs, він не може бути меншим за 1, оскільки значення minOccurs за замовчуванням дорівнює 1.

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

є дійсною комбінацією, яка робить елемент забороненим.

Для отримання додаткової інформації див. Http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints


<xsd: елемент minOccurs = "0" maxOccurs = "0" /> не працює в моєму випадку.
ашиш

4
У цьому випадку не визначайте цей елемент у xsd
tapasvi

66

Нова розширена відповідь на старе поширене запитання ...

Значення за замовчуванням

  • Обмеження виникнення minOccursта maxOccurs встановлення за замовчуванням1 .

Поширені випадки, пояснені

<xsd:element name="A"/>

кошти Aбуде необхідний і повинен з'явитися рівно один раз .


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

засіб Aє необов'язковим і може з'явитися в самий раз .


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

засіб Aє потрібна і може повторювати необмежену кількість разів .


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

засіб Aє необов'язковим і може повторювати необмежену кількість разів .


Дивитися також

  • Схема W3C XML Частина 0: Буквар

    Взагалі елемент повинен з'являтися, коли значення minOccurs дорівнює 1 або більше. Максимальна кількість разів, коли елемент може з’являтися, визначається значенням атрибута maxOccurs у його декларації. Це значення може бути позитивним цілим числом, таким як 41, або терміном без обмежень, що вказує на відсутність максимальної кількості подій. Значення за замовчуванням як для атрибутів minOccurs, так і для maxOccurs дорівнює 1. Таким чином, коли такий елемент, як коментар, оголошується без атрибута maxOccurs, елемент може виникати не один раз. Будьте впевнені, що якщо ви задаєте значення лише для атрибута minOccurs, воно менше або рівне значення за замовчуванням maxOccurs, тобто воно дорівнює 0 або 1. Так само, якщо ви задаєте значення лише для атрибута maxOccurs, воно повинно бути більше або рівне значення за замовчуванням minOccurs, тобто 1 або більше.

  • X3-схема X3 W3C, частина 1: Структури, друге видання

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

0

Коротка відповідь:

Як написано у xsd:

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

Якщо ви надаєте атрибут з числом, то число є граничним. В іншому випадку атрибут повинен з’явитися рівно один раз .


-2

приклад:

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>

Результат:

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
Ваша відповідь не має нічого спільного з поставленим запитанням. Можливо, ви поставили це на неправильне запитання? У будь-якому випадку його слід видалити. Дякую.
kjhughes
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.