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 обрабатывает эти случаи?

Крис
источник

Ответы:

327

Значения по умолчанию для 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/#OccurrenceConstraints

JASSO
источник
<xsd: element minOccurs = "0" maxOccurs = "0" /> не работает в моем случае.
Ashish
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 Schema Часть 0: Учебник для начинающих

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

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

    <element
      maxOccurs = (nonNegativeInteger | unbounded)  : 1
      minOccurs = nonNegativeInteger : 1
      >
    
    </element>
kjhughes
источник
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