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

179

Мне интересно, как спецификация XML Schema обрабатывает эти случаи:

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

Нет maxOccurs given → Является ли это мощностью [1..1]?

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

Я полагаю, это просто неверно?

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

Является ли это мощностью [0..2] или [1..2]?

Есть ли "официальное" определение того, как спецификация XML Schema обрабатывает эти случаи?

Теги:
xsd

4 ответа

283
Лучший ответ

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

  • 0
    <xsd: element minOccurs = "0" maxOccurs = "0" /> не работает в моем случае.
  • 1
    В этом случае не определяйте этот элемент в xsd
45

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

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

  • Ограничения на вхождение 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 необязательный и может повторять неограниченное количество раз.


См. также

  • XML-схема W3C Часть 0: Primer

    В общем случае элемент должен появляться, когда значение 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>
    
0

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

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

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

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

0

пример:

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
  • 0
    Ваш ответ не имеет ничего общего с заданным вопросом. Возможно, вы отправили это не на тот вопрос? В любом случае его следует удалить. Спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню