首页 文章

XML Schema minOccurs / maxOccurs默认值

提问于
浏览
188

我想知道XML Schema规范如何处理这些情况:

<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 Schema规范如何处理这些案例的“官方”定义?

4 回答

  • 0

    minOccursmaxOccurs 的默认值为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

  • 47

    一个旧的,常见问题的新的,扩展的答案......

    默认值

    • 发生限制 minOccursmaxOccurs default to 1 .

    常见案例解释

    <xsd:element name="A"/>
    

    表示 Arequired ,必须出现 exactly once .


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

    表示 Aoptional ,可能会出现 at most once .


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

    表示 Arequired 并且可能重复 unlimited number of times .


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

    表示 Aoptional 并且可能重复 unlimited number of times .


    另请参阅

    通常,当minOccurs的值为1或更大时,需要显示一个元素 . 元素可能出现的最大次数由其声明中maxOccurs属性的值确定 . 该值可以是正整数,例如41,或者术语无界,表示没有最大出现次数 . minOccurs和maxOccurs属性的默认值为1.因此,当声明没有maxOccurs属性的注释等元素时,该元素可能不会出现多次 . 请确保如果仅为minOccurs属性指定值,则它小于或等于maxOccurs的默认值,即它是0或1.同样,如果仅为maxOccurs属性指定值,则必须为大于或等于minOccurs的默认值,即1或更多 . 如果省略这两个属性,则元素必须只出现一次 .

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

    例:

    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"/>
    <xsl:value-of select="capital"/>
    <xsl:value-of select="nationalLanguage"/>
    <xsl:value-of select="population"/>
    <xsl:value-of select="currency"/>
    <xsl:for-each select="nationalIdentities"> <xsl:value-of select="nationalAnthem"/>
    <xsl:value-of select="nationalDay"/>
    <xsl:value-of select="nationalColour"/>
    <xsl:value-of select="nationalGemstone"/>
    <xsl:value-of select="nationalFlower"/>
    </xsl:for-each> <xsl:for-each select="publicHolidays"> <xsl:value-of select="newYearDay"/>
    <xsl:value-of select="australiaDay"/>
    <xsl:value-of select="anzacDay"/>
    <xsl:value-of select="christmasDay"/>
    <xsl:value-of select="boxingDay"/>
    <xsl:value-of select="laborDay"/>
    <xsl:value-of select="easter"/>
    <xsl:value-of select="queenBirthDay"/>
    </xsl:for-each> <xsl:for-each select="states/stateName"> <xsl:value-of select="Name"/>
    </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
    
  • 0

    Short answer:

    正如xsd中所写:

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

    如果提供带数字的属性,则数字为边界 . Otherwise attribute should appear exactly once .

相关问题