XML-схема minOccurs / maxOccurs значения по умолчанию

Мне интересно, как спецификация схемы 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 обрабатывает эти случаи?

3 ответа

Решение

Значения по умолчанию для minOccurs а также maxOccurs равны 1. Таким образом:

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

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

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

недействительным

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

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

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

является допустимой комбинацией, которая делает элемент запрещенным.

Для получения дополнительной информации см. http://www.w3.org/TR/xmlschema-0/

Новый расширенный ответ на старый, часто задаваемый вопрос...

Значения по умолчанию

  • Ограничения вхождения 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 Schema Часть 0: Учебник для начинающих

    Как правило, элемент должен появляться, когда значение minOccurs равно 1 или более. Максимальное количество раз, которое элемент может появляться, определяется значением атрибута maxOccurs в его объявлении. Это значение может быть положительным целым числом, таким как 41, или неограниченным термином, чтобы указать, что не существует максимального числа вхождений. Значение по умолчанию для атрибутов minOccurs и maxOccurs равно 1. Таким образом, когда такой элемент, как комментарий, объявляется без атрибута maxOccurs, элемент может появляться не более одного раза. Убедитесь, что если вы указываете значение только для атрибута minOccurs, оно меньше или равно значению по умолчанию для maxOccurs, т. Е. Оно равно 0 или 1. Аналогично, если вы указываете значение только для атрибута maxOccurs, оно должно быть больше или равно значению по умолчанию minOccurs, то есть 1 или больше. Если оба атрибута опущены, элемент должен появиться ровно один раз.

  • XML-схема W3C, часть 1: структура, второе издание

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

Короткий ответ:

Как написано в xsd:

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

Если вы предоставляете атрибут с номером, то номер является границей. В противном случае атрибут должен появиться ровно один раз.

Пример:

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
Другие вопросы по тегам