XML Schema

XML Schema

用于定义和描述XML文档结构

为了克服DTD的局限性

1.符合XML语法结构(自己就是一个XML文档)

2.DOM,SAX等XML API很容易解析出XML Schema文档中的内容

3.对名称空间支持的非常好

4.比XML DTD支持更多的数据类型,并支持用户自定义新的数据

5.定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制

6.不能像DTD一样定义实体,比DTD更复杂,是w3c组织标准,取代DTD

 

Schema快速入门

1.XML Schema文件自身就是一个XML文件,但它的扩展名通常为xsd

2.XML Schema文档通常称之为模式文档(约束文档),遵循这个文档写的xml文件称为实例文档

3.一个XML Schema文档也必须有一个根节点,名称为Schema

4.编写了一个XML Schema约束文档后,通常需要把这个文件中声明的元素绑定到一个URI地址上,在XML Schema技术中有一个专业术语来描述这个过程,即把XML Schema文档声明的元素绑定到一个名称空间上,以后XML文件就可以通过这个URI(名称空间)来告诉解析引擎,xml文档中编写的元素来自哪里,被谁约束

 

在XMLSchema中,每个约束模式文档都可以被赋以一个唯一的名称空间,名称空间用一个唯一的URI(Uniform Resource Identifier统一资源标识符)表示,在xml文件中书写标签时可以通过名称空间声明(xmlns),来声明当前编写的标签来自哪个Schema约束文档

<itcast:书架 xmlns:itcast=”http://www.itcast.cn”></itcast>

此处使用itcast来指向声明的名称,以便于后面对名称空间的引用

http://www.itcast.cn实际上没有指向任何文件,只是一个分配的名字

 

为了在XML文档中声明它所遵循的Schema文件的具体位置,通常需要在xml文档中的根节点中使用schemaLocation属性来指定

<itcast:书架 xmlns:itcast=http://www.xxxxx.cn

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

xsi:schemaLocation=”http://www.itcast.cnbook.xsd”>

schemaLocation属性有2个值http://www.xxxxx.cn是需要使用的命名空间   book.xsd是供命名空间使用的XML schema的位置,两者用空格分隔

使用schemaLocation属性时,来自哪里:xmlns=http://www.w3.org/2001/XMLSchema-instance

简单说 就是 book.xsd里能写的元素放在xmlns=http://www.w3.org/2001/XMLSchema-instance这个最大的名称空间里

XML能写的元素放在http://www.xxxxx.cn的名称空间里 约束在book.xsd


可以引入多个XMLschema空间或不使用名称空间

 

Schema语法详解和案例

XSD简单元素

只包含文本的元素,不会包含任何其他元素或属性

文本可以是XML Schema定义中包括的类型中的一种(布尔,字符串,数据...)

可以添加限定(facets)

<xs:element name=”xxx”type=”xs:yyy”>

简易元素的默认值default=”xxx“(缺省值为xxx)和固定值fixed=”yyy”


XSD属性

       所有属性均被作为简易类型来声明

       简易元素无法拥有属性 元素拥有属性就是符合类型(原因上一行)

       <xs:attribute name=”xxx” type=”xs:yyy”>嵌套在标签里

       属性的默认值(缺省值default)固定值(fixed)

       必需(use=”required”)一般为可选的

      

XSD限定(Facets)

       限定(restriction)用于为XML元素或属性定义可接受的值

       <xs:restriction base=”xs:integer”/>

       <xs:minInclusivevalue=”0”/>

       <xs:maxInclusivevalue=”120”/>

</restriction>

限定类型为integer,0-120之间

XML元素限制为一组可接收的值,用枚举约束(enumeration constraint)

<xs:enumeration value=”xxx”/>*n个枚举值

限制定义为一系列可被使用的数字或字母,用模式约束(pattern constraint)

<xs:pattern value=”[a-z]”/>a-z之中一个

<xs:pattern value=”[a-z][a-z][a-z]”/>3个a-z中的值

[a-z]* 0到多个a-z          [a-z]+ 1到多个a-z

male | female 二选一         [a-zA-Z0-9]{8} 8位a-zA-Z或0-9

其他看w3c的XML Schema文档

 

XSD复杂(复合)元素

包含了其他的元素及/或属性XML元素

四种类型:空元素

包含其他元素的元素  

仅包含文本的元素    

包含元素和文本的元素

上述元素均可包含属性

XML Schema有两种方式定义复合元素

1.通过命名此元素直接声明

2.声明属性再给元素赋给属性

可以给复合元素属性为复合元素添加另一复合元素的内容

 

XSD空元素

空的复合元素不能包含内容 只能包含属性

 

XSD类型指示器

通过指示器,我们可以指定元素在文档中被使用的方式

七种指示器

        Order指示器定义元素的顺序

        All   Choice(非此即彼) Sequence(必须按特定顺序出现)

        Occurrence指示器定义某个元素出现的频率

maxOccurs    minOccurs     (默认值均为1)

       Group指示器:Group name        attributeGroupname

一个实例

<?xmlversion="1.0" encoding="ISO-8859-1" ?>

<xs:schemaxmlns:xs="http://www.w3.org/2001/XMLSchema">

 

<xs:elementname="shiporder">

 <xs:complexType>

  <xs:sequence>

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

  <xs:element name="shipto">

    <xs:complexType>

     <xs:sequence>

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

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

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

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

     </xs:sequence>

    </xs:complexType>

   </xs:element>

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

    <xs:complexType>

     <xs:sequence>

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

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

      <xs:element name="quantity"type="xs:positiveInteger"/>

      <xs:element name="price"type="xs:decimal"/>

     </xs:sequence>

    </xs:complexType>

   </xs:element>

  </xs:sequence>

  <xs:attribute name="orderid"type="xs:string" use="required"/>

 </xs:complexType>

</xs:element>

 

</xs:schema>

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值