简体   繁体   English

XML Schema minOccurs / maxOccurs默认值

[英]XML Schema minOccurs / maxOccurs default values

I'm wondering how the XML Schema specification handles these cases: 我想知道XML Schema规范如何处理这些情况:

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

No maxOccurs given -> Is this the cardinality [1..1]? 没有给出maxOccurs - >这是基数[1..1]吗?

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

I suppose this is simply invalid? 我想这简直无效了?

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

Is this the cardinality [0..2] or [1..2]? 这是基数[0..2]还是[1..2]?

Is there an "official" definition on how the XML Schema spec handles these cases? 是否有关于XML Schema规范如何处理这些情况的“官方”定义?

The default values for minOccurs and maxOccurs are 1. Thus: minOccursmaxOccurs的默认值为1.因此:

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

cardinality is [1-1] Note: if you specify only minOccurs attribute, it can't be greater than 1, because the default value for maxOccurs is 1. 基数为[1-1]注意:如果指定minOccurs属性,则不能大于1,因为maxOccurs的默认值为1。

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

invalid 无效

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

cardinality is [1-2] Note: if you specify only maxOccurs attribute, it can't be smaller than 1, because the default value for minOccurs is 1. 基数为[1-2]注意:如果指定maxOccurs属性,则不能小于1,因为minOccurs的默认值为1。

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

is a valid combination which makes the element prohibited. 是一个有效的组合,使元素被禁止。

For more info see http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints 有关详细信息,请参阅http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

New, expanded answer to an old, commonly asked question... 一个旧的,常见问题的新的,扩展的答案......

Default Values 默认值

  • Occurrence constraints minOccurs and maxOccurs default to 1 . 出现约束minOccursmaxOccurs 默认为1

Common Cases Explained 常见案例解释

<xsd:element name="A"/>

means A is required and must appear exactly once . 意味着A必需的 ,必须恰好出现一次


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

means A is optional and may appear at most once . 意味着A可选的 ,最多可出现一次


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

means A is required and may repeat an unlimited number of times . 意味着A必需的 ,可以重复无限次


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

means A is optional and may repeat an unlimited number of times . 意味着A可选的 ,可以重复无限次


See Also 也可以看看

  • W3C XML Schema Part 0: Primer W3C XML Schema第0部分:入门

    In general, an element is required to appear when the value of minOccurs is 1 or more. 通常,当minOccurs的值为1或更大时,需要出现一个元素。 The maximum number of times an element may appear is determined by the value of a maxOccurs attribute in its declaration. 元素可能出现的最大次数由其声明中maxOccurs属性的值确定。 This value may be a positive integer such as 41, or the term unbounded to indicate there is no maximum number of occurrences. 该值可以是正整数,例如41,或者术语无界,表示没有最大出现次数。 The default value for both the minOccurs and the maxOccurs attributes is 1. Thus, when an element such as comment is declared without a maxOccurs attribute, the element may not occur more than once. minOccurs和maxOccurs属性的默认值为1.因此,当声明没有maxOccurs属性的注释等元素时,该元素可能不会出现多次。 Be sure that if you specify a value for only the minOccurs attribute, it is less than or equal to the default value of maxOccurs, ie it is 0 or 1. Similarly, if you specify a value for only the maxOccurs attribute, it must be greater than or equal to the default value of minOccurs, ie 1 or more. 请确保如果仅为minOccurs属性指定值,则它小于或等于默认值maxOccurs,即它是0或1.同样,如果仅为maxOccurs属性指定值,则必须为大于或等于minOccurs的默认值,即1或更多。 If both attributes are omitted, the element must appear exactly once. 如果省略这两个属性,则元素必须只出现一次。

  • W3C XML Schema Part 1: Structures Second Edition W3C XML Schema第1部分:结构第二版

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

Short answer: 简短回答:

As written in xsd: 正如xsd中所写:

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

If you provide an attribute with number, then the number is boundary. 如果提供带数字的属性,则数字为边界。 Otherwise attribute should appear exactly once . 否则属性应该只出现一次

example: 例:

XML 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: 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: 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>

Result: 结果:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM