关闭

XML Schema学习笔记(一)

标签: schemaxmlencoding文档语言integer
739人阅读 评论(0) 收藏 举报
分类:

XML Schema学习笔记(一)

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:71389次
    • 积分:910
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:2篇
    • 译文:0篇
    • 评论:22条
    最新评论