XML-схема minOccurs / maxOccurs значения по умолчанию - PullRequest
201 голосов
/ 27 января 2011

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

Ответы [ 4 ]

314 голосов
/ 28 января 2011

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

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

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

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

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

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

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

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

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

Подробнее см. http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

60 голосов
/ 13 ноября 2015

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

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

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


См. также

  • XML-схема W3C, часть 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>
    
0 голосов
/ 10 декабря 2018

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

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

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

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

0 голосов
/ 24 ноября 2018

пример:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...