在 XML Schema 中定义元素

本文介绍XML Schema中元素的定义方式,包括简单类型与复杂类型的使用,如何定义元素的内容模型及约束条件,例如通过minOccurs和maxOccurs属性指定元素出现次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    定义元素就是定义元素的 名字 和 内容模型 。

    在 XML Schema 中,元素的 内容模型 由其 类型 定义,因此 XML 文档中实例元素的值必须符合模式中定义的类型。

    类型包括简单类型和复杂类型。

    简单类型的值不能包含元素或属性。XML Schema 规范也包括预定义的简单类型。 派生的简单类型约束了基类型的值。

    复杂类型可以产生在其他元素中嵌套元素的效果,或者为元素增加属性。

 

1、简单的、非嵌套的元素是简单类型
    不含属性或其他元素的元素可以定义为简单类型,无论是预定义的简单类型还是用户定义的简单类型,如 预定义的简单类型:string 、 integer 、 decimal 、 time ; 用户定义的简单类型:ProductCode 等等。

    简单类型定义

<element name='age' type='integer'/>
<element name='price' type='ProductCode'/> 

 

2、使用基类型来定义新的简单类型,建立一个新的整数类型称为myInteger,它的值范围为10000到99999:

<xsd:simpleType name="myInteger">
  <xsd:restriction base="xsd:integer">
    <xsd:minInclusive value="10000"/>
    <xsd:maxInclusive value="99999"/>
  </xsd:restriction>
</xsd:simpleType>

 

3、带有属性的元素必须是复杂类型。一个复杂元素类型:

<element name='price'>
  <complexType base='decimal' derivedBy='extension'>
    <attribute name='currency' type='string'/>
  </complexType>
</element>
<!-- In XML instance document, we can write: <price currency='US'>45.50</price> --> 

    在例子中,我们定义了一个 匿名类型,没有明确地命名这个复杂类型。换句话说,没有定义复杂类型 complexType 的 name 属性。

 

4、嵌入其他元素的元素必须是复杂类型

<element name='Book' type='BookType'/>

<complexType name='BookType'>
  <element name='Title' type='string'/>
  <element name='Author' type='string'/>
</complexType>

 

5、用全局简单类型定义的复杂类型

<element name='Title' type='string'/>
<element name='Author' type='string'/>

<element name='Book' type='BookType'/>

<complexType name='BookType'>
  <element ref='Title'/>
  <element ref='Author'/>
</complexType>

    在例子中, BookType 是全局性的,可用于声明其他元素。元素 Title 、 Author 和 Book 也是全局范围的。
    元素 element 的 ref 属性使您能够引用前面声明的元素。

 

6、隐藏 BookType 作为本地类型

<element name='Title' type='string'/>
<element name='Author' type='string'/>

<element name='Book'>
  <complexType>
    <element ref='Title'/>
    <element ref='Author'/>
  </complexType>
</element>

 

7、表示元素类型的约束

<element name='Title' type='string'/>
<element name='Author' type='string'/>

<element name='Book'>
  <complexType>
    <element ref='Title' minOccurs='0'/>
    <element ref='Author' maxOccurs='2'/>
  </complexType>
</element> 

    对于表示元素内容模型的约束,XML Schema 比 DTD 提供了更大的灵活性。
    在最简单的层次上,像在 DTD 中那样,您可以把属性和元素声明关联起来,指明能够出现的给定元素集合序列:只能出现 1 次(1)、出现 0 次或多次(*)或者出现 1 次或多次(+)。
    您还可以表示 XML Schema 中的其他约束,比方说使用 element 元素的 minOccurs 和 maxOccurs 属性,以及 choice 、 group 和 all 元素。
    在例子中, Book 中 Title 的出现是可选的(类似 DTD 的 '?')。
    但是, 例子也说明 Book 元素中至少要有一个但不能超过两个 Author 。
    element 的 minOccurs 和 maxOccurs 属性的默认值是 1。
    元素 choice 只允许它的一个子女出现在实例中。
    另外一个元素 all ,表示这样的约束:组中的所有子元素可以同时出现一次,或者都不出现,它们可以按任意的顺序出现。

 

8、指出必须为元素定义所有的类型

<xsd:element name='Title' type='string'/>
  <xsd:element name='Author' type='string'/>

  <xsd:element name='Book'>
    <xsd:complexType>
      <xsd:all>
        <xsd:element ref='Tile'/>
        <xsd:element ref='Author'/>
      </xsd:all>
  </xsd:complexType>
</xsd:element> 

    例子表示 Title 和 Author 两者必须同时出现(顺序任意)在 Book 中,或者都不出现。这种约束很难在 DTD 中表示。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值