Các giá trị mặc định của Lược đồ XML minOccurs / maxOccurs


214

Tôi đang tự hỏi làm thế nào đặc tả Lược đồ XML xử lý các trường hợp này:

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

Không có maxOccurs nào được đưa ra -> Đây có phải là cardinality [1..1] không?

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

Tôi cho rằng điều này chỉ đơn giản là không hợp lệ?

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

Đây có phải là cardinality [0..2] hay [1..2]?

Có một định nghĩa "chính thức" về cách đặc tả Lược đồ XML xử lý các trường hợp này không?

Câu trả lời:


327

Các giá trị mặc định cho minOccursmaxOccurslà 1. Do đó:

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

cardinality là [1-1] Lưu ý: nếu bạn chỉ định chỉ minOccurs thuộc tính, nó không thể lớn hơn 1, vì giá trị mặc định cho maxOccurs là 1.

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

không hợp lệ

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

cardinality là [1-2] Lưu ý: nếu bạn chỉ định chỉ maxOccurs thuộc tính, nó không thể nhỏ hơn 1, vì giá trị mặc định cho minOccurs là 1.

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

là một sự kết hợp hợp lệ làm cho các yếu tố bị cấm.

Để biết thêm thông tin, hãy xem http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraint


<xsd: phần tử minOccurs = "0" maxOccurs = "0" /> không hoạt động trong trường hợp của tôi.
tro bụi

4
Trong trường hợp đó, đừng xác định thành phần đó trong xsd
tapasvi

66

Câu trả lời mới, mở rộng cho một câu hỏi cũ, thường được hỏi ...

Giá trị mặc định

  • Hạn chế xuất hiện minOccursmaxOccurs mặc định1 .

Các trường hợp thường gặp

<xsd:element name="A"/>

có nghĩa Abắt buộc và phải xuất hiện chính xác một lần .


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

có nghĩa Atùy chọn và có thể xuất hiện nhiều nhất một lần .


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

có nghĩa Acần thiết và có thể lặp lại một số lần không giới hạn .


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

có nghĩa Atùy chọn và có thể lặp lại không giới hạn số lần .


Xem thêm

  • Lược đồ XML của W3C Phần 0: Primer

    Nói chung, một yếu tố được yêu cầu xuất hiện khi giá trị của minOccurs là 1 hoặc nhiều hơn. Số lần tối đa một phần tử có thể xuất hiện được xác định bởi giá trị của thuộc tính maxOccurs trong khai báo. Giá trị này có thể là một số nguyên dương như 41 hoặc thuật ngữ không giới hạn để chỉ ra rằng không có số lần xuất hiện tối đa. Giá trị mặc định cho cả thuộc tính minOccurs và maxOccurs là 1. Do đó, khi một phần tử như nhận xét được khai báo mà không có thuộc tính maxOccurs, phần tử có thể không xảy ra nhiều hơn một lần. Hãy chắc chắn rằng nếu bạn chỉ định một giá trị cho chỉ thuộc tính minOccurs, thì nó nhỏ hơn hoặc bằng giá trị mặc định của maxOccurs, tức là bằng 0 hoặc 1. Tương tự, nếu bạn chỉ định một giá trị cho chỉ thuộc tính maxOccurs, thì nó phải lớn hơn hoặc bằng giá trị mặc định của minOccurs, tức là 1 hoặc nhiều hơn.

  • Lược đồ XML của W3C Phần 1: Cấu trúc Ấn bản thứ hai

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

0

Câu trả lời ngắn:

Như được viết bằng xsd:

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

Nếu bạn cung cấp một thuộc tính với số, thì số đó là ranh giới. Nếu không thì thuộc tính sẽ xuất hiện chính xác một lần .


-2

thí dụ:

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>

Kết quả:

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
Câu trả lời của bạn không có gì để làm với câu hỏi được hỏi. Có lẽ bạn đã đăng nó vào câu hỏi sai? Trong mọi trường hợp, nó nên được xóa. Cảm ơn bạn.
kjhughes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.