Xml Schema 之 指示器

XSD 复合类型指示器

有七种指示器:

Order 指示器:用于定义元素的顺序。

l   All

l   Choice

l   Sequence

Occurrence 指示器:

l   maxOccurs

l   minOccurs

Group 指示器:

l   Group name

l   attributeGroup name

 

All 指示器:规定子元素可以按照任意顺序出现,且每个子元素必须只出现一次:

<xs:element name="person">

  <xs:complexType>

    <xs:all>

      <xs:element name="firstname" type="xs:string"/>

      <xs:element name="lastname" type="xs:string"/>

    </xs:all>

  </xs:complexType>

</xs:element>

注释:当使用 <all> 指示器时,你可以把 <minOccurs> 设置为 0 或者 1,并仅可把 <maxOccurs> 指示器设置为 1(稍后将讲解 <minOccurs> 以及 <maxOccurs>)。

 

Choice 指示器:规定可出现某个子元素或者可出现另外一个子元素(非此即彼):

<xs:element name="person">

  <xs:complexType>

    <xs:choice>

      <xs:element name="employee" type="employee"/>

      <xs:element name="member" type="member"/>

    </xs:choice>

  </xs:complexType>

</xs:element>

 

Sequence 指示器:规定子元素必须按照特定的顺序出现:

<xs:element name="person">

  <xs:complexType>

    <xs:sequence>

      <xs:element name="firstname" type="xs:string"/>

      <xs:element name="lastname" type="xs:string"/>

    </xs:sequence>

  </xs:complexType>

</xs:element>

 

Occurrence 指示器:用于定义某个元素出现的频率。

注释:对于所有的 "Order" "Group" 指示器(anyallchoicesequencegroup name 以及 group reference),其中的 maxOccurs 以及 minOccurs 的默认值均为 1

 

maxOccurs 指示器:指示器可规定某个元素可出现的最大次数:

<xs:element name="person">

  <xs:complexType>

    <xs:sequence>

      <xs:element name="full_name" type="xs:string"/>

      <xs:element name="child_name" type="xs:string" maxOccurs="10"/>

    </xs:sequence>

  </xs:complexType>

</xs:element>

提示:如需使某个元素的出现次数不受限制,请使用 maxOccurs="unbounded" 这个声明:

 

minOccurs 指示器:规定某个元素能够出现的最小次数:

<xs:element name="person">

  <xs:complexType>

    <xs:sequence>

      <xs:element name="full_name" type="xs:string"/>

      <xs:element name="child_name" type="xs:string" minOccurs="0"/>

    </xs:sequence>

  </xs:complexType>

</xs:element>

 

一个实际的例子:

名为 "Myfamily.xml" XML 文件:

<?xml version="1.0" encoding="ISO-8859-1"?>

<persons xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance

xsi:noNamespaceSchemaLocation="family.xsd">

<person>

<full_name>Tony Smith</full_name>

<child_name>Cecilie</child_name>

</person>

<person>

<full_name>David Smith</full_name>

<child_name>Jogn</child_name>

<child_name>mike</child_name>

<child_name>kyle</child_name>

<child_name>mary</child_name>

</person>

<person>

<full_name>Michael Smith</full_name>

</person>

</persons>上面这个 XML 文件含有一个名为 "persons" 的根元素。在这个根元素内部,我们定义了三个 "person" 元素。每个 "person" 元素必须含有一个 "full_name" 元素,同时它可以包含多至 5 "child_name" 元素。

这是schema文件"family.xsd"

<?xml version="1.0" encoding="ISO-8859-1"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

elementFormDefault="qualified">

<xs:element name="persons">

  <xs:complexType>

    <xs:sequence>

      <xs:element name="person" maxOccurs="unbounded">

        <xs:complexType>

          <xs:sequence>

            <xs:element name="full_name" type="xs:string"/>

            <xs:element name="child_name" type="xs:string" minOccurs="0" maxOccurs="5"/>

          </xs:sequence>

        </xs:complexType>

      </xs:element>

    </xs:sequence>

  </xs:complexType>

</xs:element>

</xs:schema>

 

Group 指示器:定义相关的数批元素。

 

元素组

元素组通过 group 声明进行定义:

<xs:group name="组名称">

  ...

</xs:group>

您必须在 group 声明内部定义一个 allchoice 或者 sequence 元素。

 

例如:

<xs:element name="person" type="personinfo"/>

<xs:complexType name="personinfo">

  <xs:sequence>

    <xs:group ref="persongroup"/>

    <xs:element name="country" type="xs:string"/>

  </xs:sequence>

</xs:complexType>

<xs:group name="persongroup">

  <xs:sequence>

    <xs:element name="firstname" type="xs:string"/>

    <xs:element name="lastname" type="xs:string"/>

    <xs:element name="birthday" type="xs:date"/>

  </xs:sequence>

</xs:group>

 

属性组:通过 attributeGroup 声明来进行定义:

<xs:attributeGroup name="组名称">

  ...

</xs:attributeGroup>

 

例如:

<xs:element name="person">

  <xs:complexType>

    <xs:attributeGroup ref="personattrgroup"/>

  </xs:complexType>

</xs:element>

<xs:attributeGroup name="personattrgroup">

  <xs:attribute name="firstname" type="xs:string"/>

  <xs:attribute name="lastname" type="xs:string"/>

  <xs:attribute name="birthday" type="xs:date"/>

</xs:attributeGroup>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值