XML Şeması minOccurs / maxOccurs varsayılan değerleri


214

XML Şeması belirtiminin bu durumları nasıl işlediğini merak ediyorum:

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

Hayır maxOccurs verilmedi -> Bu önemli mi [1..1]?

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

Sanırım bu sadece geçersiz mi?

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

Bu kardinalite [0..2] veya [1..2] mi?

XML Şeması spesifikasyonunun bu durumları nasıl ele aldığına dair "resmi" bir tanım var mı?

Yanıtlar:


327

Varsayılan değerler minOccursve maxOccursBöylece 1. şunlardır:

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

kardinalite [1-1] 'dir. Not: yalnızca minOccurs özniteliğini belirtirseniz , maxOccurs için varsayılan değer 1 olduğundan, 1'den büyük olamaz.

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

geçersiz

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

cardinality [1-2] Not: yalnızca maxOccurs özniteliğini belirtirseniz , minOccurs için varsayılan değer 1 olduğundan, 1'den küçük olamaz.

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

öğeyi yasaklayan geçerli bir birleşimdir.

Daha fazla bilgi için bkz. Http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints


<xsd: eleman minOccurs = "0" maxOccurs = "0" /> benim durumumda çalışmıyor.
ashish

4
Bu durumda, bu öğeyi
xsd'de

66

Eski, sık sorulan bir soruya yeni, genişletilmiş cevap ...

Varsayılan değerler

  • Oluşum kısıtlamaları minOccursve maxOccurs varsayılanı1 .

Açıklanan Genel Durumlar

<xsd:element name="A"/>

aracı Aolduğu gereklidir ve görünmelidir tam olarak bir kez .


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

aracı Aolup isteğe bağlı ve görünebilir bir kez en .


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

aracı Aolan gerekli bir tekrarlayabilir kez sınırsız sayıda .


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

aracı Aolan isteğe bağlı bir tekrarlayabilir kez sınırsız sayıda .


Ayrıca bakınız

  • W3C XML Şeması Bölüm 0: Astar

    Genel olarak, minOccurs değeri 1 veya daha fazla olduğunda bir öğenin görünmesi gerekir. Bir öğenin maksimum görüntülenme sayısı, bildirimindeki bir maxOccurs özniteliğinin değeri ile belirlenir. Bu değer, 41 gibi pozitif bir tamsayı olabilir veya maksimum sayıda olay olmadığını belirtmek için sınırsız bir terim olabilir. Hem minOccurs hem de maxOccurs öznitelikleri için varsayılan değer 1'dir. Bu nedenle, açıklama gibi bir öğe maxOccurs özniteliği olmadan bildirildiğinde, öğe bir kereden fazla oluşmayabilir. Yalnızca minOccurs özniteliği için bir değer belirtirseniz, varsayılan değer olan maxOccurs değerinden küçük veya ona eşit olduğundan emin olun, yani 0 veya 1'dir. Benzer şekilde, yalnızca maxOccurs özniteliği için bir değer belirtirseniz, minOccurs varsayılan değerinden büyük veya ona eşit, yani 1 veya daha fazla.

  • W3C XML Şeması Bölüm 1: Yapılar İkinci Baskı

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

0

Kısa cevap:

Xsd'de yazıldığı gibi:

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

Sayı ile bir öznitelik sağlarsanız, sayı sınırdır. Aksi takdirde, özellik tam olarak bir kez görünmelidir .


-2

misal:

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>

Sonuç:

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
Cevabınızın sorulan soru ile hiçbir ilgisi yok. Belki de yanlış soruya gönderdin? Her durumda, silinmelidir. Teşekkür ederim.
kjhughes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.