我想知道XML Schema规范如何处理这些情况:
<xsd:element minOccurs="1" name="asdf"/>
没有给出maxOccurs - &gt;这是基数[1..1]吗?
<xsd:element minOccurs="5" maxOccurs="2" name="asdf"/>
我想这简直无效了?
<xsd:element maxOccurs="2" name="asdf"/>
这是基数[0..2]还是[1..2]?
对于XML Schema规范如何处理这些情况,是否存在“官方”定义?
答案 0 :(得分:311)
minOccurs
和maxOccurs
的默认值为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
答案 1 :(得分:56)
一个旧的,常见问题的新答案......
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
可选 ,可以重复 无限次 。
通常,元素需要在值的时候出现 minOccurs是1或更多。元素的最大次数 出现由其中的maxOccurs属性的值确定 宣言。该值可以是正整数,例如41,或者 术语无界限表示没有最大出现次数。 minOccurs和maxOccurs属性的默认值 因此,当没有a声明注释等元素时 maxOccurs属性,该元素可能不会出现多次。确定 如果你只为minOccurs属性指定一个值,那就是 小于或等于maxOccurs的默认值,即它是0或1。 同样,如果仅为maxOccurs属性指定值,则它必须大于或等于默认值minOccurs, 即1或更多。如果省略这两个属性,则元素必须 只出现一次。
W3C XML Schema Part 1: Structures Second Edition
<element
maxOccurs = (nonNegativeInteger | unbounded) : 1
minOccurs = nonNegativeInteger : 1
>
</element>
答案 2 :(得分:0)
简短答案:
用xsd编写:
<xs:attribute name="minOccurs" type="xs:nonNegativeInteger" use="optional" default="1"/>
<xs:attribute name="maxOccurs" type="xs:allNNI" use="optional" default="1"/>
如果为属性提供数字,则数字为边界。 否则,属性应只出现一次。
答案 3 :(得分:-1)
示例:
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