XML之Schema

schema与dtd一样,用于验证xml的有效性。

schema的文档结构:

定义book.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.example.org/book" 
elementFormDefault="qualified">

</xs:schema>
根元素都是schema
xmlns:xs:用于构造schema的元素和数据类型来自http://www.w3.org/2001/XMLSchema命名空间
targetNamespace:用于定义我们自己的schema的元素和数据类型来自http://www.example.org/book命名空间

xml的结构

<?xml version="1.0" encoding="gbk"?>
<
根元素 xmlns="uri" xmlns:xi="http://www.w3.org/2001/XMLSchema-instance" xi:schemaLocation="uri xsd文件.xsd"> <子元素></子元素> </根元素>

xmlns声明来源的名称空间,uri找xsd中targetNamespace取值

schemaLocation从哪里来的,声明一个标准的名称空间

 

 xsd语法:

1.简单元素 xs:element

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

默认值使用default,固定值:fixed

<color>red</color>

2.定义属性  xs:attribute

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

默认值使用default="",固定值:fixed="",可选与必须使用use="required"

<color lang="hong">red</color>

其中元素与属性常用类型:

  • xs:string
  • xs:decimal
  • xs:integer
  • xs:boolean
  • xs:date
  • xs:time 

3.限定 xs:restriction

对值的限定。xs:minInclusive ,xs:maxInclusive限定age的值在0-120

<xs:element name="age">
<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="120"/>
  </xs:restriction>
</xs:simpleType>
</xs:element> 

对一组值的限定。xs:enumeration限定car的名只能为audi,golf.bmw

<xs:element name="car">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>
</xs:element> 

对一些列的值的限定。xs:pattern。限定letter的值只能是a-z的其中一个i

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element> 

对空白字符的限定。xs:whiteSpace 。限定address的值如果有空白不会移除preserve。replace移除。collapse移除

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="preserve"/>
  </xs:restriction>
</xs:simpleType>
</xs:element> 

对长度的限定。xs:length 。限定密码长度必须是8位

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:length value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element> 

xs:minLength最小值,xs:maxLength最大值

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:minLength value="5"/>
    <xs:maxLength value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element> 

4.复合元素  xs:complexType

就是包含元素和属性的元素

  • 空元素  xs:complexContent 元素给出的信号是,我们打算限定或者拓展某个复合类型的内容模型
<product prodid="1345" />
<xs:element name="product">
  <xs:complexType>
    <xs:complexContent>
      <xs:restriction base="xs:integer">
        <xs:attribute name="prodid" type="xs:positiveInteger"/>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>
</xs:element>

也可以用

<xs:element name="product">
  <xs:complexType>
    <xs:attribute name="prodid" type="xs:positiveInteger"/>
  </xs:complexType>
</xs:element>

或者使用,type 属性表示,这个属性的作用是引用要使用的复合类型的名称

<xs:element name="product" type="prodtype"/>

<xs:complexType name="prodtype">
  <xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>
  • 包含其他元素的元素  xs:sequence表示元素必须按次序出现
<person>
<firstname>John</firstname>
<lastname>Smith</lastname>
</person>

可以使用:

<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>

可以使用:

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

<xs:complexType name="persontype">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
</xs:complexType>
  • 仅包含文本的元素  xs:simpleContent
<shoesize country="france">35</shoesize>

使用extension 或 restriction 元素来扩展或限制元素的基本简易类型

<xs:element name="shoesize">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:integer">
        <xs:attribute name="country" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>

也可以使用:

<xs:element name="shoesize" type="shoetype"/>

<xs:complexType name="shoetype">
  <xs:simpleContent>
    <xs:extension base="xs:integer">
      <xs:attribute name="country" type="xs:string" />
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>
  • 包含元素和文本的元素
<letter>
Dear Mr.<name>John Smith</name>.
Your order <orderid>1032</orderid>
will be shipped on <shipdate>2001-07-13</shipdate>.
</letter>

使用: mixed="true"

<xs:element name="letter">
  <xs:complexType mixed="true">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="orderid" type="xs:positiveInteger"/>
      <xs:element name="shipdate" type="xs:date"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

也可以使用:

<xs:element name="letter" type="lettertype"/>

<xs:complexType name="lettertype" mixed="true">
  <xs:sequence>
    <xs:element name="name" type="xs:string"/>
    <xs:element name="orderid" type="xs:positiveInteger"/>
    <xs:element name="shipdate" type="xs:date"/>
  </xs:sequence>
</xs:complexType>

 

xsd指示器:

all指示器,<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>

choice指示器,<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指示器,<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>

maxOccurs指示器,<maxOccurs> 指示器可规定某个元素可出现的最大次数:子元素 "child_name" 可在 "person" 元素中最少出现一次(其中 minOccurs 的默认值是 1),最多出现 10 次。

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>

minOccurs指示器,<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"
      maxOccurs="10" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

子元素 "child_name" 可在 "person" 元素中出现最少 0 次,最多出现 10 次。

 

group指示器,、Group 指示器用于定义相关的数批元素。

<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>

<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>

在 group 声明内部定义一个 all、choice 或者 sequence 元素。

 

attributeGroup指示器,

<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>

<xs:element name="person">
  <xs:complexType>
    <xs:attributeGroup ref="personattrgroup"/>
  </xs:complexType>
</xs:element>

 

 

参考资料:

1.http://blog.csdn.net/csh624366188/article/details/7431852

2.http://blog.sina.com.cn/s/blog_73c5cfbe0101cfbs.html

posted @ 2016-05-12 21:37  倔强的鸭子  阅读(214)  评论(0编辑  收藏  举报