XML Schema学习笔记(一)

XML Schema学习笔记(一)

XML规范包括DTD(Document Type Definition,文档类型定义)DTD可用于描述XML标记语言,并检验标记语言实例的有效性。虽然多年来已经证明DTD非常有用,但仍有一定的局限性。为了解决DTD的局限性,W 3C 创建了一种用于描述标记语言的新方法,即XML Schema

1.  XML Schema的优势

读取XML实例的解析器要通过将XML实例与DTD比较来确定实例是否有效。为使XML实例有效,该实例必须符合它的DTD,即必须按正确的顺序和多样性来使用由DTD的元素。同时DTD中只提供了四种的数据类型,即EMPTYANY、元素内容和元素与文本的混合内容。

XML Schema提供了很强的类型系统,包括简单的原始类型以及更为复杂的类型。XML Schema还允许通过扩展或限制简单或者复杂类型来创建新类型。此外,XML模式支持用XML命名空间创建由多种标记语言构成的复合文档。

2.  XML Schema文档

Schema以复杂类型和简单类型的方式描述XML文档的结构。复杂类型描述如何组织、嵌套元素;简单类型是由元素和特性包含的原始数据类型。

<?xml version="1.0" encoding="UTF-8"?>

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

      xmlns:cs="http://www.Cactus.org/cactus"

      targetNamespace="http://www.Cactus.org/cactus">

      <element name="address" type="cs:ChinaAddress"/>

      <complexType name="ChinaAddress">

             <sequence>

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

                    <element name="street" type="string"/>

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

                    <element name="state" type="string"/>

                    <element name="zip" type="string"/>

             </sequence>

      </complexType>

</schema>

Schema文档的根元素总是schema元素。元素声明和类型声明嵌套于schema元素中。上述例子中声明了一个名为ChinaAddress的复杂类型和该类型的一个名为address的元素。

2.1  简单类型

简单类型类似于Java原始类型,其中不能再包含其他元素,只能包含数据。

XML Schema内置简单类型

简单类型

定义

string

符合UCS的符号序列

normalizedString

没有结束符、开始符和制表位的字符串

token

没有空白、开始符合制表位的字符串

NMTKEN

特性中使用的令牌

integer

任何大小的十进制整数

float

符合IEEE单精度32位浮点类型的小数

boolean

布尔值

Time

以小时、分、秒、毫秒格式表示的时间

date

以世纪、年、月和日格式表示的日期

2.2 复杂类型

Schema可以声明复杂类型。复杂类型定义了如何组织包含有其他元素的元素,类似于有字段没有方法的Java类。

2.2.1 元素序列

各模式中的大多数complexType声明均会包含一个列有一个或者多个element元素定义的sequence元素。其中也定义了元素出现的顺序以及每个元素的数据类型。

<?xml version="1.0" encoding="UTF-8"?>

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

       xmlns:cs="http://www.Cactus.org/cactus"

       targetNamespace="http://www.Cactus.org/cactus">

       <element name="purchaseOrder" type="cs:PurchaseOrder"/>

       <element name="address" type="cs:ChinaAddress"/>

 

       <complexType name="PurchaseOrder">

              <sequence>

                     <element name="accountName" type="string"/>

                     <element name="accountNumber" type="unsignedShort"/>

                     <element name="shipAddress" type="cs:ChinaAddress"/>

                     <element name="billAddress" type="cs:ChinaAddress"/>

                     <element name="book" type="cs:Book"/>

                     <element name="total" type="float"/>

              </sequence>

       </complexType>

       <complexType name="ChinaAddress">

              <sequence>

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

                     <element name="street" type="string"/>

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

                     <element name="state" type="string"/>

                     <element name="zip" type="string"/>

              </sequence>

       </complexType>

<schema>

复杂类型可以建立在其他复杂类型之上,以创建能够方便描述非常复杂的XML结构的丰富类型。

2.2.2 限定元素和非限定元素

可以利用命名空间使元素限定或者非限定,即XML文档中的元素可以有限定名称前缀,也可以没有。但全局元素和全局特性必须总为限定。有个例外,属于默认命名空间的全局元素不需要用前缀来限定。

XML Schema定义了elementFormDefault特性和attributeFormDefault特性,这两个特性用于确定XML实例中的局部元素是否需要前缀来限定。

2.2.3 指定模式的位置

为根据一个或多个Schema检验XML文档,用户需要指定要使用的Schema。通过用schemaLocation特性指定Schema的位置就行。

<?xml version="1.0" encoding="UTF-8"?>

<purchaseOrder xmlns="http://www.Cactus.org/cactus"

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

       xsi:schemaLocation="http://www.Cactus.org/cactus

              http://www.Cactus.org/cactus/po.xsd">

如果需要的话,可以指定若干个Schema

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值