XML Schema ค่าเริ่มต้น minOccurs / maxOccurs


214

ฉันสงสัยว่าข้อมูลจำเพาะ 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 จัดการกับกรณีเหล่านี้ได้อย่างไร

คำตอบ:


327

ค่าเริ่มต้นสำหรับminOccursและmaxOccursเป็น 1 ดังนั้น:

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

cardinality คือ [1-1] หมายเหตุ: หากคุณระบุเฉพาะแอตทริบิวต์ minOccurs จะต้องไม่มากกว่า 1 เนื่องจากค่าเริ่มต้นสำหรับ maxOccurs คือ 1

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

โมฆะ

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

cardinality คือ [1-2] หมายเหตุ: หากคุณระบุเฉพาะแอตทริบิวต์ maxOccurs จะต้องไม่เล็กกว่า 1 เนื่องจากค่าเริ่มต้นสำหรับ minOccurs คือ 1

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

เป็นการรวมกันที่ถูกต้องซึ่งทำให้องค์ประกอบต้องห้าม

สำหรับข้อมูลเพิ่มเติมโปรดดูhttp://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints


<xsd: element minOccurs = "0" maxOccurs = "0" /> ไม่ทำงานในกรณีของฉัน
เถ้าแก่

4
ในกรณีนั้นอย่ากำหนดองค์ประกอบนั้นใน xsd
tapasvi

66

ใหม่คำตอบแบบขยายสำหรับคำถามเก่าที่พบบ่อย ...

ค่าเริ่มต้น

  • ข้อ จำกัด ที่เกิดขึ้น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เป็นตัวเลือกและอาจทำซ้ำไม่ จำกัด จำนวนครั้ง


ดูสิ่งนี้ด้วย

  • W3C XML Schema ส่วนที่ 0: สีรองพื้น

    โดยทั่วไปองค์ประกอบจะต้องปรากฏขึ้นเมื่อค่า minOccurs เป็น 1 หรือมากกว่านั้น จำนวนครั้งสูงสุดที่องค์ประกอบอาจปรากฏขึ้นถูกกำหนดโดยค่าของแอตทริบิวต์ maxOccurs ในการประกาศ ค่านี้อาจเป็นจำนวนเต็มบวกเช่น 41 หรือคำที่ไม่ได้ จำกัด เพื่อระบุว่าไม่มีจำนวนครั้งสูงสุด ค่าเริ่มต้นสำหรับทั้ง minOccurs และแอตทริบิวต์ maxOccurs คือ 1 ดังนั้นเมื่อองค์ประกอบเช่นความคิดเห็นถูกประกาศโดยไม่มีแอตทริบิวต์ maxOccurs องค์ประกอบอาจไม่เกิดขึ้นมากกว่าหนึ่งครั้ง ตรวจสอบให้แน่ใจว่าหากคุณระบุค่าสำหรับแอตทริบิวต์ minOccurs เพียงน้อยกว่าหรือเท่ากับค่าเริ่มต้นของ maxOccurs นั่นคือ 0 หรือ 1 ในทำนองเดียวกันถ้าคุณระบุค่าสำหรับแอตทริบิวต์ maxOccurs เท่านั้นจะต้องเป็น มากกว่าหรือเท่ากับค่าเริ่มต้นของ minOccurs เช่น 1 หรือมากกว่านั้น

  • W3C XML Schema ส่วนที่ 1: โครงสร้าง Second Edition

    <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"/>

หากคุณระบุแอททริบิวที่มีหมายเลขแสดงว่าจำนวนนั้นเป็นขอบเขต มิฉะนั้นแอตทริบิวต์ควรปรากฏอยู่ครั้งหนึ่ง


-2

ตัวอย่าง:

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

1
คำตอบของคุณไม่มีส่วนเกี่ยวข้องกับคำถามที่ถาม คุณอาจโพสต์ไว้ในคำถามที่ผิดหรือเปล่า? ในกรณีใด ๆ ก็ควรจะลบ ขอบคุณ.
kjhughes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.