XSD:元素和属性之间的差异

时间:2009-11-13 06:20:14

标签: xsd

我是XSD的新手,我对何时使用属性以及何时使用元素感到困惑?

为什么我们不能在属性中指定minOccurs和maxOccurs?

另外,为什么我们不能在元素中指定use =“required”?

4 个答案:

答案 0 :(得分:27)

元素是一个XML元素 - 一个开始标记,一些内容,一个结束标记 - 它们是XML文档的构建块:

<test>someValue</test>

在这里,“测试”将是一个元素。

属性是标签上的附加信息 - 它是元素上的“附加组件”或额外信息,但不能单独存在:

<test id="5">somevalue</test>

“id”是一个属性。

单个标记上不能有多个同名属性 - &gt; minOccurs / maxOccurs毫无意义。您可以为属性定义必需(或不定义) - 其他任何内容都没有意义。

元素的定义是它们在复杂类型中的出现 - 例如如果你有一个内部带有<xs:sequence>的复杂类型 - 你定义所有元素必须存在并且必须按照这个特定的顺序:

<xs:complexType name="SomeType">
   <xs:sequence>       
      <xs:element name="Element1" type="xs:string" />
      <xs:element name="Element2" type="xs:string" />
   </xs:sequence>
</xs:complexType>

在该类型的元素中,子元素“Element1”和“Element2”是必需的,并且必须按此顺序出现 - 不需要“必需”或不需要(与属性一样)。是否需要元素是通过使用minOccurs和maxOccurs来定义的;两者都是默认值= 1,例如元素必须出现,并且只能出现一次。通过调整这些设置,您可以将元素定义为可选(minOccurs = 0),或允许它多次显示(maxOccurs&gt; 1)。

我强烈建议您查看W3Schools Tutorial on XML Schema并了解有关XML架构的更多信息。

马克

答案 1 :(得分:5)

示例:XSD格式

<xs:complexType name="contactInformation">
    <xs:all>
        <xs:element name="firstName" type="xs:string" minOccurs="0"/>
        <xs:element name="workCountryId" type="xs:long" minOccurs="0"/>
    </xs:all>
    <xs:attribute name="id" type="xs:long"/>
</xs:complexType>

XML格式

<contactInformation id=100>
    <firstname>VELU</firstname>
    <workCountryId>120</workCountryId>
</contactInformation>


默认情况下,attribute是可选的。要指定该属性是必需的,请使用use属性:

e.g。 <xs:attribute name="id" type="xs:long" use="required"/>

有关attributeselements的更多信息。

complexType元素是包含其他元素和/或属性的XML元素。

all元素指定子元素可以按任何顺序出现,并且每个子元素可以出现零次或一次。

maxOccurs可选。指定元素可以发生的最大次数。值必须为1.

minOccurs可选。指定元素可以发生的最小次数。值可以是0或1.默认值为1

答案 2 :(得分:3)

<element myAttribute="value">
   <subElement />
   <subElement anotherAttribute="this is an attribute's value">Element value</subElement>
</element>

XML中不能有多个具有相同名称的属性,因此不能对属性使用minOccurs和maxOccurs。

元素不需要使用=“required”,因为你可以改为使用minOccurs =“1”。

您可以选择何时使用属性以及何时使用元素。以下是一些指南:http://www.ibm.com/developerworks/xml/library/x-eleatt.html

答案 3 :(得分:3)

元素是XML节点 - 它可以包含其他节点或属性。它可以是简单类型或复杂类型。它是一个XML实体。

属性是描述符。它不能包含任何内容,只能是一个简单的类型。

看看this。当然,你可以像谷歌一样“XML元素与属性”