187
1 扩扩扩扩扩扩 扩扩扩扩扩扩 XML XML (Extensible (Extensible Markup L Markup L anguage) anguage) XML 个个 个个个个个个 个个1. 个个个 XML? 2. XML 个个个个个个个3. 个个个个 XML 个个个个个个个个个个4. 个个个个 个个个 XML 个个个5. 个个个 XML 个个个 HTML?

扩展标记语言 XML (Extensible Markup Language)

  • Upload
    soo

  • View
    100

  • Download
    10

Embed Size (px)

DESCRIPTION

扩展标记语言 XML (Extensible Markup Language). 一个 XML 文档 浏览器中显示 问题: 什么是 XML? XML 为什么如此重要? 如何使用 XML 来定义自己的数据结构? 如何建立一个使用 XML 的应用? 如何把 XML 转化为 HTML?. 扩展标记语言 XML (Extensible Markup Language). XML 简介 XML 语法 XML 文档的定义 文档类型定义 (Document Type Definition) XML 模式 (XML Schema) XML 文档的解析 - PowerPoint PPT Presentation

Citation preview

Page 1: 扩展标记语言 XML  (Extensible Markup Language)

1

扩展标记语言扩展标记语言 XML XML (Extensible(Extensible Markup Markup Language)Language)

一个XML文档 浏览器中显示问题:1. 什么是 XML?2. XML 为什么如此重要?3. 如何使用 XML 来定义自己的数据结构?4. 如何建立一个使用 XML 的应用?5. 如何把 XML 转化为 HTML?

Page 2: 扩展标记语言 XML  (Extensible Markup Language)

2

扩展标记语言扩展标记语言 XML XML (Extensible(Extensible Markup Markup Language)Language)

XML 简介 XML 语法 XML 文档的定义

文档类型定义 (Document Type Definition) XML 模式 (XML Schema)

XML 文档的解析 简单应用程序接口 (Simple API for XML) 文档对象模型 (Document Object Model)

XML 文档的显示 层叠样式单 (Cascading Style Sheets) 扩展样式单语言 (eXtensible Style sheet Language)

Page 3: 扩展标记语言 XML  (Extensible Markup Language)

3

XMLXML主要术语主要术语 文档类型定义 (DTD) :它规定了文档的逻辑结构,可以定义文档的语法以及使用 XML 解析器验证文档的合法性,它也可以定义文档的元素、元素的属性以及元素和属性的关系。其不足之处是:采用了非 XML 的语法规则、缺乏种类丰富的数据类型以及扩展性较差等。 XML 模式 (Schema) :针对 DTD 的上述缺点,微软公司等推出了 XML 模式,其特点是保留并扩充了 DTD 原有的功能并弥补了它的不足。

Page 4: 扩展标记语言 XML  (Extensible Markup Language)

4

XMLXML主要术语主要术语 文档对象模型 (DOM) :一个结构化文档编程接口,它定义了文档的逻辑结构以及访问和操作文档的方法, XML 文档中的元素就是 DOM 树中的节点对象,使用 DOM 模型,可以方便地创建文档,导航其结构或增加、删除、修改和移动文档中的任何成分。 简单应用程序接口 (SAX) :一种基于事件的模型,可用于避免构造复杂的文档结构,尤其是当文档规模特别庞大或只对其中某一点感兴趣时, SAX 就会更显出其优越性。 SAX 事件由解析器在进入或离开文档、元素、子树、属性时产生。

Page 5: 扩展标记语言 XML  (Extensible Markup Language)

5

XMLXML主要术语主要术语 XML 文档分类: XML 文档可以分为两大类,即以数据为中心和以文档为中心。以数据为中心的文档具有非常规则的结果,比如关于销售订单 XML 文档等,它通常是为机器设计的,即主要是方便机器进行处理;而以文档为中心的文档主要是为人类而设计的,它的文档具有不规则的结构,而且数据的粒度也比较大,比如书本、电子邮件、广告等等。

Page 6: 扩展标记语言 XML  (Extensible Markup Language)

6

XMLXML简介简介XML 起源XML 特征XML 应用举例XML 下的 Web 体系结构XML 词汇表

Page 7: 扩展标记语言 XML  (Extensible Markup Language)

7

XMLXML起源起源 60 年代末, IBM 公司为了解决不同专用格式创建的法律文件无法在公司的各部门间相互移植的问题,提出了通用标记语言,后建立了标准通用标记语言

(Standard Generalized Markup Language , SGML) 。 1986 年,国际标准化组织 ISO 采用了 SGML 。

HTML 是 SGML 的一个子集,仅仅用来格式化数据,是一个不可扩充的标记集合,用户不能够增加有意义的可以让其他人使用的标记。

Page 8: 扩展标记语言 XML  (Extensible Markup Language)

8

XMLXML起源起源 1996 年,万维网协会 (W3C) 开始设计一种可扩展的标记语言,使其能够将 SGML 的灵活性和强大功能与已经被广泛采用的 HTML 结合起来。后来称这种语言为 XML ,它继承了 SGML 的规范,是后者的一个子集。 1998 年 2月, XML1.0 成为了 W3C 的推荐标准。 XML 是一种界定文本数据的简便而标准的方法。它曾经被人称作 "Web 上的 ASCII码 " 。就好像用户可以使用自己喜爱的编程语言来创建任何一种数据结构,然后同其他人在其他计算平台上使用的其他语言来共享一样。 XML 的标记用来说明用户所描述的概念,而属性则用来控制它们的结构。所以,用户可以定义自己所设计出的语法并同其他人共享。

Page 9: 扩展标记语言 XML  (Extensible Markup Language)

9

XMLXML特征特征 XML 是一种使用标记标记内容以传输信息的简单方法。标记用于界定内容,允许自行定义任意复杂度的结构。这一切都是使用普通的文本。 自描述数据。界定 XML内容的标记会给所界定的数据中的每一个元素命名。在标记中,可以定义特定的属性,它们会为所描述的元素提供某些附加信息。 XML 中的“扩展”一词指的是定义新的标记及其用途的标准机制。由于这一切均是标准化的,所以新的标记可以采用固定不变的途径来描述,并可以同其他 XM

L 用户交流。对于在标记中使用的属性来说,情况也是如此。

Page 10: 扩展标记语言 XML  (Extensible Markup Language)

10

XMLXML特征特征 XML 用来描述数据结构,而 HTML 只是用来描述数据的显示,并不能给出有关于数据的信息。 XML 并非 HTML 的替代品, XML 中没有与可视化表现形式有关的内容,与注重数据及其表达方式的 HTML 不同,

XML 只关心数据本身。 文档的数据库化和数据的文档化是 XML走向成功的主要推动力之一。在 XML 之前,即使对于不太复杂的数据, Web 也没有标准的数据交换格式。 XML 文档在很多方面与传统的关系和对象数据库数据相似,掌握了 XML ,就能够像处理其他类型的数据一样来处理文档了。

Page 11: 扩展标记语言 XML  (Extensible Markup Language)

11

XMLXML特征特征 W3C 为 XML 标准化了一套应用程序编程接口 (Applic

ation Programming Interface, API) ,用户可以轻松地编制读写 XML 的程序。 XML 的数据描述机制意味着它将成为一种在 Internet上共享信息的强大途径,因为:

①它是开放的: XML 能够在不同的用户和程序之间交换数据,而不论其平台如何。②它的自描述的特性使其对于 B2B 和企业内部网解决方案来说是一种有效的选择。③无需事先协调,我们就可以在程序之间共享数据。

Page 12: 扩展标记语言 XML  (Extensible Markup Language)

12

XMLXML特征特征 数据发布和交换

XML 是数据库信息交换方面的一个重要工具。典型情况下,数据库用来进行信息交换的文件格式是很简单的,比如每行一个记录,记录的域之间用分号隔开。但这种方法对于数据库产生的面向对象的新信息是不够的,因为对象可能有其内部结构,对象之间还可能有链接。 XML 可以用元素和属性来表示这种信息,它为在数据库之间传送记录提供了一种公共格式。 电子商务

XML将使电子商务更加易于标准化、具有更高的可扩展性、并能够与 Internet 的其他主要技术更好地结合起来。这种软件和标准的易用性使更多小组织可以使用电子商务。

Page 13: 扩展标记语言 XML  (Extensible Markup Language)

13

XMLXML特征特征 元数据 (metadata) 元数据就是关于信息的信息,定义了一套创建标记语言的语法,开发者可以使用它们来定义自己的标记语言。元数据在 Web 上的下一个发展趋势是在 XML之上形成一个标准化层,称为资源描述框架结构 (Res

ource Description Frame) 。 Web 上的科学研究 万维网协会制定了一种新的基于 XML 的语言,称为

MathML ,主要用于在 Web 上进行数学研究,描述数学公式等。

Page 14: 扩展标记语言 XML  (Extensible Markup Language)

14

数据库和数据库和 XMLXMLXML 文档具有“可自描述”、“无限嵌套”、“树形结构”等特点,因此在某种意义上,一个 XML 文档就是一个数据库或其中的一张表。

<student><id>03040010</id><name>Mike</name><sex>male</sex><birth>19800101</birth></student><student>…</student>

id name sex birth03040010 Mike male 19800101

… … … …

student:

Page 15: 扩展标记语言 XML  (Extensible Markup Language)

15

数据库和数据库和 XMLXML数据库和 XML 有很多相同的地方,但是 XML 作为数据交换的标准,更着重于统一数据结构,而不是提供数据库的特性,不要设法让其中的任何一个做所有的事情。XML 数据本身的树形结构不同于关系模型中的二维表结构。数据库产品处理 XML 数据一般有两种方式:

扩展 RDBMS ,加入 XML支持模块,完成 XML 数据和数据库之间的格式转换和传输,如把整个 XML文档作为表中一行,或把 XML 文档进行解析后,存储到相应的表格中。同时支持W3C 的一些 XML 操作标准,提供优化的 XML 处理模块。 采用层次数据存储模型,保持 XML 文档的树形结构,省掉了 XML 文档和传统数据库的数据转换过程,形成了 Native XML 数据库。

Page 16: 扩展标记语言 XML  (Extensible Markup Language)

16

数据库和数据库和 XMLXML

Page 17: 扩展标记语言 XML  (Extensible Markup Language)

17

数据库和数据库和 XMLXMLselect CustomerID,ContactName from dbo.customer

s where city='London';

CustomerID ContactName ---------- ------------------------------ AROUT Thomas HardyBSBEV Victoria AshworthCONSH Elizabeth BrownEASTC Ann DevonNORTS Simon CrowtherSEVES Hari Kumar

Page 18: 扩展标记语言 XML  (Extensible Markup Language)

18

数据库和数据库和 XMLXMLselect CustomerID,ContactName from dbo.customer

s where city='London' for xml auto;

<dbo.customers CustomerID="AROUT" ContactName="Thomas Hardy"/><dbo.customers CustomerID="BSBEV" ContactName="Victoria Ashworth"/><dbo.customers CustomerID="CONSH" ContactName="Elizabeth Brown"/><dbo.customers CustomerID="EASTC" ContactName="Ann Devon"/><db

Page 19: 扩展标记语言 XML  (Extensible Markup Language)

19

XMLXML下的下的 WebWeb 体系结构体系结构客户端浏览器

程序或代理 XML文档

XML 或HTML文档

有脚本的HTTP服务器

HTTP服务器

应用程序服务器

关系型数据

层次型数据

Page 20: 扩展标记语言 XML  (Extensible Markup Language)

20

词汇表词汇表 XML 一向致力于简便而快速地根据企业、科学规范或者其他方面的需要来构造定制的标记集。同时,每一个企业(甚至每一个人)都可以选择定义自己的 XML 标记集, XML 的一个好处就在于能够共享这类 " 词汇表 " ,它们都使用同样的基本语法、分析程序以及其他工具。可共享的 XML 词汇表不仅提供了更易于查询的文档和数据库,而且为在不同的组织和计算机应用程序之间交换信息提供了一条途径。

科学词汇表商业词汇表 法律词汇表医学词汇表 计算机词汇表

Page 21: 扩展标记语言 XML  (Extensible Markup Language)

21

词汇表词汇表 所有 XML命名都必需以字母、下划线( _)或冒号开头,后面跟着的是有效命名字符。有效命名字符除了前面的内容,还包括数字、连字符( -)、句点

(.) 。在实际应用当中不应该使用冒号,除非是用作命名空间的分隔符。记住字母并非局限于 ASCII码是非常重要的,因为人们可以把自己的语言用在标记当中。

Page 22: 扩展标记语言 XML  (Extensible Markup Language)

22

XMLXML语法语法标记语法文档结构元素属性实体

Page 23: 扩展标记语言 XML  (Extensible Markup Language)

23

标记语法标记语法XML 标记负责提供和描述一个 XML 文件或 XML实体的内容结构。它们由界定内容的不同部分的标记( tag)组成,负责提供到特殊符号和文本宏的引用,或者将特殊指令传递给应用软件,以及把注释传递给文档编辑器。XML 元素组成结构如下图:

元素

<B1 ALIGN="CENTER" > A Heading </B1>

标记 属性

内容 标记

Page 24: 扩展标记语言 XML  (Extensible Markup Language)

24

标记语法标记语法XML 元素的结构与 HTML 基本相同, XML 也同样使用 <> 来界定标记,但二者的相同点也就仅此而已。与 HTML 不同,所有的 XML 标记都是大小写敏感的,其中包括元素的标记名和属性值。大小写敏感,主要是满足 X

ML 国际化的设计目标和简化处理过程的需要。XML指定的字符均在 16位的 Unicode2.1字符集中定义。合法的 XML字符包括三个 ASCII控制符,所有普通的 ASCII可显示字符,以及所有其他统一代码字符值(用十六进制表示)。统一代码中包含一个数量超过 137000 的字符集合用于应用程序特定字符,它被称为 " 保留区域 " 。使用这些私有字符进行任何 XML 数据的交换都需要就这些字符的解释单独达成一致,所以统一代码的这个部分不应该在 XML 数据对象中使用。

Page 25: 扩展标记语言 XML  (Extensible Markup Language)

25

标记语法标记语法字符值(十六进制) 描 述09 水平制表符( HT)0A 换行( LF)0D 回车( CR)20••7E ASCII 显示字符80••D7FF 统一代码字符E000••F8FF "私有区域 "

F900••FFFD CJK(中日韩)兼容的象形文字10000••10FFFF 待用集和 "高度私有区域 "

Page 26: 扩展标记语言 XML  (Extensible Markup Language)

26

文档结构文档结构元素

标记 属性

控制信息注释 处理指令 文档类型声明

实体

Page 27: 扩展标记语言 XML  (Extensible Markup Language)

27

元素元素 元素被标记包围 有一个根元素 标记嵌套 错误的嵌套:

<serves> <instructions> </serves> </instructions>

大小写敏感 标记成对使用 空标记

<ingredient/> (<ingredient> </ingredient>)

Page 28: 扩展标记语言 XML  (Extensible Markup Language)

28

属性属性属性用来描述元素的性质,其特点如下:

属性值使用单引号或双引号加以标注,两者等价 一个元素可以有多个属性,排列不区分次序 使用子元素也可以达到相同的效果,只不过子元素是有次序的

<img src="./photos/myfriend.jpg" height="120" width="34" alt="Mr. Wang"/>

<img> <src> ./photos/myfriend.jpg </src> <height>120</height> <width>34</width> <alt>Mr. Wang</alt> </img>

Page 29: 扩展标记语言 XML  (Extensible Markup Language)

29

控制信息控制信息 注释

<!-- comments text here --> 处理指令

XML 处理指令有助于 XML 文档的使用者和自动处理软件确定该文档为 XML 文档,同时也规定了 XML 的版本和字符编码,有助于优化 XML 文档的解析。处理指令 <?xml …?> 一般可以包含 3 个属性:1. version : XML 的版本,必需属性2. encoding : XML 文档采用的字符集,可选属性3. standalone : XML 文档是否使用外部 DTD 子集,可选属性<?xml version="1.0"?><?xml version="1.0" encoding="GB2312"?> <?xml version="1.0" standalone="yes"?>

Page 30: 扩展标记语言 XML  (Extensible Markup Language)

30

控制信息控制信息 文档类型声明声明 DTD 文件,用来保存 XML 文档的语法规则①DTD保存在 XML文档外部

<!DOCTYPE cookbook SYSTEM "./recipe.dtd">XML 文档类型 : cookbook属于: SYSTEM ( 自定义 ) , PUBLIC (W3C)文件: recipe.dtd(URL)

②DTD保存在XML文档内部

Page 31: 扩展标记语言 XML  (Extensible Markup Language)

31

实体实体实体可以视为一个容器,它是 XML 文档的一部分,而不仅仅是一个简单的元素。它类似于 C/C++ 语言中的 d

efine宏定义指令。实体可以是网络服务器或其他应用系统返回的一个文件、一个数据库记录、一个对象或一个字节流,也可以包含一个完整的 XML 文档或者只是一些元素或声明。通常使用的实体一般分为如下几类: 预定义实体: &lt; &gt; &amp; &apos; &quot; 通用实体:

内部实体:实体内容定义在使用该实体的 XML 文档中 外部实体:实体内容定义在使用该实体的 XML 文档外

Page 32: 扩展标记语言 XML  (Extensible Markup Language)

32

文档类型定义文档类型定义元素声明的基本格式为:<!ELEMENT 元素名 元素内容模式 >

元素内部模式:1.星号: item* 2.括号: (item1, item2)3.逗号: (item1, item2, item3)4.管道: (item1 | item2)5.加号: item+6.问号: item?

Page 33: 扩展标记语言 XML  (Extensible Markup Language)

33

文档类型定义文档类型定义元素定义举例:

<!ELEMENT cookbook (category+)>

<!ELEMENT recipe (name, ingredient+, cooking+, serves?, instruction*)>

<!ELEMENT name (#PCDATA)>

Page 34: 扩展标记语言 XML  (Extensible Markup Language)

34

文档类型定义文档类型定义属性的声明包含:

元素的名字属性的名字属性的数据类型属性的值

属性声明的基本格式为:<!ATTLIST 元素名 属性名 1 类型 缺省值 属性名 2 类型 缺省值 …>

Page 35: 扩展标记语言 XML  (Extensible Markup Language)

35

文档类型定义文档类型定义常用的属性数据类型:

PCDATA : 可解析字符串 CDATA : 字符串

属性的值: #REQUIRED : 属性必须有具体的取值 #IMPLIED : 属性可有具体的值,也可以为空 #FIXED "value" : 属性的取值是常量 "value" : 缺省值

属性声明举例:<!ATTLIST qty amount CDATA #REQUIRED unit CDATA "g">

Page 36: 扩展标记语言 XML  (Extensible Markup Language)

36

文档类型定义文档类型定义实体的声明与引用 预定义实体

&lt; &gt; &amp; &apos; &quot; 内部实体:包含在 XML 文档中

语法格式为: <!ENTITY 实体名 "实体内容 "><!ENTITY POS "pinch of salt"><item>Finally add the &POS;</item>

外部实体:包含 XML 文档外<!ENTITY myimage SYSTEM "photo.png" NDATA PNG><IMG PIC="myimage"/>

Page 37: 扩展标记语言 XML  (Extensible Markup Language)

37

一个完整的一个完整的 XMLXML文档文档食谱的定义:

XML文档DTD 浏览器中显示XMLSPY:正规与有效

Page 38: 扩展标记语言 XML  (Extensible Markup Language)

38

命名空间命名空间一个例子:

<staff> <name> Chris Bates </name> <dept> <name> School of CMS </name> </dept></staff>两个名字相同的元素代表不同的对象,如何处理?

XML命名空间:名称的集合,是把多个词汇混合为一个单一文档的标准工具。一般情况下,为了方便使用者集成词汇,所有的 XML 应用都应该为元素定义一个命名空间。

Page 39: 扩展标记语言 XML  (Extensible Markup Language)

39

命名空间命名空间命名空间与元素的关系,就如同元素和属性的关系一样。通常情况,如果需要把一个命名空间应用到整个文档,可以在根元素中对命名空间进行声明。声明形式: xmlns : Prefix = "URI"URI 是统一资源标识符。命名空间的 URI 可以使用 http URL和 URN(统一资源命名 ) 。 URN 规范 RFC2141 中指出, U

RN 是永久且不依赖位置的资源标识符。所有命名空间的 URI必须是绝对值,而不应该是相对值。URL: http://namespace.cafeconleche.org/chessURL: /chess (error)URN:uuid:BDC6E3F0-6DA3-11D1-A2A3-00AA00C14882URN:schemas-microsoft-com:xml-dataURN:ISBN:059600292

Page 40: 扩展标记语言 XML  (Extensible Markup Language)

40

命名空间命名空间根据是否含有 Prefix ,命名空间声明分为缺省命名空间和显式命名空间。

<movies xmlns="http://www.michaelmorrison.com/ns/movies">

<mov:movies xmlns:mov="http://www.michaelmorrison.com/ns/movies">

根据是否含有有 Prefix ,元素名字分为非受限名 (unqualified name) 和受限名 (qualified name) 。<mov : title>Raising Arizona</mov : title><title>Raising Arizona</title>

Page 41: 扩展标记语言 XML  (Extensible Markup Language)

41

命名空间命名空间 缺省命名空间<movies xmlns="http://www.michaelmorrison.com/

ns/movies"> <movie type="comedy" rating="R" review="5" year="1988"> <title>Midnight Run</title> <comments>The quintessential road comedy.</comments> </movie></movies>

Page 42: 扩展标记语言 XML  (Extensible Markup Language)

42

命名空间命名空间<movies xmlns="http://www.michaelmorrison.com/ns/movie

s"> <movie type="comedy" rating="R" review="5" year="1988"> <title xmlns="http://www.michaelmorrison.com/ns/title"> Midnight Run </title> <comments>The quintessential road comedy. </comments> </movie></movies>

Page 43: 扩展标记语言 XML  (Extensible Markup Language)

43

命名空间命名空间 显式命名空间<mov:movies xmlns:mov="http://www.michaelmorri

son.com/ns/movies"> <mov:movie type="comedy" rating="R" review="5" year="1988"> <mov:title>Midnight Run</mov:title> <mov:comments>The quintessential road comedy.</mov:comments> </mov:movie></mov:movies>

Page 44: 扩展标记语言 XML  (Extensible Markup Language)

44

命名空间命名空间多个命名空间的混合使用:

显式命名空间缺省和显式命名空间

Page 45: 扩展标记语言 XML  (Extensible Markup Language)

45

命名空间命名空间在 XML 文档中,标记中的属性也可以使用命名空间。对属性使用命名空间应该避免出现下面两种情况:

1. 属性具有相同的名字;2. 属性是受限名,本地名相同,而且前缀指向的命名空间是相同的。

错误的例子:<?xml version="1.0"?><x xmlns:n1="http://www.w3.org"

xmlns:n2="http://www.w3.org"><bad a="1" a="2"/><bad n1:a="1" n2:a="2"/></x>

Page 46: 扩展标记语言 XML  (Extensible Markup Language)

46

命名空间命名空间对属性正确使用命名空间的例子:

<?xml version="1.0"?><x xmlns:n1="http://www.n1.org"

xmlns:n2="http://www.n2.org"><good n1:a="1" n2:b="2"/></x>

<?xml version="1.0"?><x xmlns="http://www.w3.org"

xmlns:n2="http://www.n2.org"><good a="1" n2:a="2"/></x>

Page 47: 扩展标记语言 XML  (Extensible Markup Language)

47

命名空间与命名空间与 DTDDTD 利用 DTD 可以验证 XML 文档的有效性,一个 XML文档可以没有 DTD ,但可以是格式正规的。同样一个使用了命名空间的 XML 文档也可以没有 DTD 。 命名空间引入了一个新的命名系统,但是没有涉及有效性验证,也没有涉及其在 DTD 中的声明。命名空间声明对 DTD 无作用。 受限名( bread:name)在 XML 文档中分为两部分,前缀+本地名,前缀( bread)被映射到一个 URI 。 在 DTD 中的受限名 bread:name没有特殊的含义,不能被转化为两部分,而是一个整体。

Page 48: 扩展标记语言 XML  (Extensible Markup Language)

48

命名空间与命名空间与 DTDDTD创建使用命名空间的 XML 文档应遵循的规则:

1. 在 DTD 中声明所有的 xmlns 属性2. 在 DTD 和 XML 文档中使用相同的受限名3. 每个命名空间使用一个前缀4. 不同的命名空间不要使用相同的前缀5. 最多使用一个缺省命名空间

一个没有使用命名空间的 XML 文档<?xml version="1.0"?><!DOCTYPE A [<!ELEMENT A (#PCDATA)>]><A>a simple xml document</A>

Page 49: 扩展标记语言 XML  (Extensible Markup Language)

49

命名空间与命名空间与 DTDDTD-单个命名空间-单个命名空间如何使用单个命名空间?错误的例子:<?xml version="1.0" ?>

<!DOCTYPE foo:A[    <!ELEMENT foo:A (#PCDATA)>]>① <foo:A>a simple xml document</foo:A>② <A>a simple xml document</A>

说明:① 有效,但是没有命名空间的声明,因此格式不正规② 格式正规,但是在 DTD 中没有对 A 的定义,因此无效

Page 50: 扩展标记语言 XML  (Extensible Markup Language)

50

命名空间与命名空间与 DTDDTD-单个命名空间-单个命名空间1. 使用了显示命名空间声明的 XML 文档

<?xml version="1.0"?><!DOCTYPE foo:A[ <!ELEMENT foo:A (#PCDATA)> <!ATTLIST foo:A xmlns:foo CDATA #FIXED "htt

p://www.foo.org/">]>

<foo:A xmlns:foo="http://www.foo.org/">a simple xml document</foo:A>

Page 51: 扩展标记语言 XML  (Extensible Markup Language)

51

命名空间与命名空间与 DTDDTD-单个命名空间-单个命名空间2. 使用了缺省命名空间的 XML 文档

<?xml version="1.0"?><!DOCTYPE A[ <!ELEMENT A (#PCDATA)> <!ATTLIST A xmlns CDATA #FIXED "http://ww

w.foo.org/">]>

<A xmlns = "http://www.foo.org/">a simple xml document</A>

Page 52: 扩展标记语言 XML  (Extensible Markup Language)

52

命名空间与命名空间与 DTDDTD-多个命名空间-多个命名空间<?xml version="1.0" ?><!DOCTYPE A [ <!ELEMENT A (#PCDATA)>]><A>another simple xml document</A>

存在一个没有使用命名空间的 XML 文档,如何把这个 XML 文档嵌入到自己的 XML 文档中?使用多个命名空间来避免名称冲突。

Page 53: 扩展标记语言 XML  (Extensible Markup Language)

53

命名空间与命名空间与 DTDDTD-多个命名空间-多个命名空间<?xml version="1.0"?> <!DOCTYPE foo:A[ <!ELEMENT foo:A (bar:A)> <!ATTLIST foo:A xmlns:foo CDATA #FIXED "http://www.foo.org/"> <!ELEMENT bar:A (#PCDATA)> <!ATTLIST bar:A xmlns:bar CDATA #FIXED "http://www.bar.org/">]>

<foo:A xmlns:foo = "http://www.foo.org/"><bar:A xmlns:bar = "http://www.bar.org/">

a complex xml document </bar:A></foo:A>

Page 54: 扩展标记语言 XML  (Extensible Markup Language)

54

XML SchemaXML Schema

DTD 的不足:1. 提供的数据类型有限。如不提供整型,浮点型、布尔型等数据类型2. 基于正则表达式,描述能力有限。如不能定义一个元素的子元素的具体出现次数。3. 约束能力不强,结构化不够4. 构建和访问没有标准的编程接口5. 对命名空间的支持不足

Page 55: 扩展标记语言 XML  (Extensible Markup Language)

55

XML SchemaXML SchemaXML Schema与 DTD 相比的优点:1. 本身是一个 XML 文档。可以使用 XML 编辑器编辑,利用 XML 解析器解析,也可以用标准的编程接口如

DOM 和 SAX 对其进行处理。2. 数据类型丰富。如 String , Boolean , Number , Da

te and time 。还可以定义型的数据类型。3. 与命名空间紧密联系。4. XML Schema Definition Language(XSD) 是基于

XML 的一种语言,用来 定义用户标记语言,验证 XML 文档的有效性,比 DTD 更为有效,能够更好的控制标记语言的设计。

Page 56: 扩展标记语言 XML  (Extensible Markup Language)

56

XML SchemaXML SchemaXSD Schema 文档的基本格式:

<?xml version="1.0"?><xsd:schema

xmlns:xsd="http://www.w3.org/2001/XMLSchema"><!-- here is the content of the xsd schema --></xsd:schema>注:① 为了引用 XSD 元素和属性,必须在根元素中声明

XSD命名空间② XSD Schema 文档中的所有元素和属性必须有前缀

xsd:

一个老例子: XML文档 XSD Schema文档

Page 57: 扩展标记语言 XML  (Extensible Markup Language)

57

XML SchemaXML Schema XSD一系列元素和属性定义了 XSD 语言,在 XSD Sc

hema 文档中可以使用这些元素和属性。 XSD 的核心是数据类型,决定了标记所代表的数据的类型。

XSD包含了两种基本的数据类型:1. 简单数据类型:数字,字符串,日期,时间和列表等2. 复杂数据类型:复合元素,元素的序列,建立在数据类型之上

Page 58: 扩展标记语言 XML  (Extensible Markup Language)

58

XML SchemaXML Schema简单类型元素使用 xsd:element 来创建,属性使用 xsd:

attribute 来创建。<xsd:element name="occupation" type="xsd:string"/><xsd:attribute name="birthdate" type="xsd:date"/>

简单数据类型不能反映元素和属性之间的关系。复杂数据类型可以解决此问题,它用来描述元素的内容模型。<person birthdate="1969-10-28" weight="160"> <name>Milton James</name> <title>Mr.</title> <occupation>mayor, chef</occupation></person>

Page 59: 扩展标记语言 XML  (Extensible Markup Language)

59

XML SchemaXML Schema<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:element name="person"> <xsd:complexType> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="title" type="xsd:string"/> <xsd:element name="occupation" type="xsd:string"/> </xsd:sequence>

<xsd:attribute name="birthdate" type="xsd:date"/> <xsd:attribute name="weight" type="xsd:integer"/> </xsd:complexType></xsd:element></xsd:schema>

Page 60: 扩展标记语言 XML  (Extensible Markup Language)

60

XML SchemaXML Schema XSD Schema 和 XML 文档XSD Schema 和 XML 文档的联系与 DTD 不同,不是通过文档类型声明来实现的,而是通过使用属性来进行。使用 XSD Schema 来验证 XML 文档,需要在 XML 文档中设置属性 noNamespaceSchemaLocation指向 schema 文档。

<?xml version="1.0"?><person xmlns:xsi="http://www.w3.org/2001/XMLSchema-inst

ance" xsi:noNamespaceSchemaLocation="person.xsd" birthdate="1969-10-28" weight="160">

<name>Milton James</name> <title>Mr.</title> <occupation>mayor, chef</occupation></person>

Page 61: 扩展标记语言 XML  (Extensible Markup Language)

61

Page 62: 扩展标记语言 XML  (Extensible Markup Language)

62

XML SchemaXML Schema 简单数据类型简单数据类型可以用来创建元素和属性,格式如下:

<xsd:element name=" 元素名 " type=" 类型 "/><!-- 类型除了简单数据类型外,也可以是复杂数据类型 --><xsd:attribute name=" 属性名 " type=" 类型 "/><!-- 类型只能是简单数据类型 -->

主要简单数据类型如下:1. 字符串类型: xsd:string2. 布尔类型: xsd:boolean3. 数字类型: xsd:integer , xsd:decimal , xsd:float , xsd:double4. 日期和时间型: xsd:duration , xsd:dateTime , xsd:time , xsd:da

te , xsd:gYearMonth , xsd:gYear , xsd:gMonthDay , xsd:gDay , xsd:gMonth

5. 自定义类型: xsd:simpleType

Page 63: 扩展标记语言 XML  (Extensible Markup Language)

63

XML SchemaXML Schema1.字符串类型<xsd:element name="name" type="xsd:string"/> <name>Milton James</name>

2.布尔类型<xsd:attribute name="retired" type="xsd:boolean"/> <person retired="false"> <name>Milton James</name> </person>注:布尔类型可以设置为 true/false ,或者 1/0 。

Page 64: 扩展标记语言 XML  (Extensible Markup Language)

64

XML SchemaXML Schema3. 数字类型

xsd:integer : 无小数的整数,如: 3xsd:decimal : 有小数的十进制数,如: 3.14xsd:float : 单精度 (32位 )浮点数,如: 6.022E23xsd:double : 双精度 (64位 )浮点数xsd:positiveInteger : 正整数 xsd:nonPositiveInteger : 非正整数xsd:negativeInteger : 负整数 xsd:nonNegativeInterger : 非负整数<xsd:attribute name="height" type="xsd:decimal"/><xsd:attribute name="weight" type="xsd:integer"/><person height="5.75" weight="160"> <name>Milton James</name></person>

Page 65: 扩展标记语言 XML  (Extensible Markup Language)

65

XML SchemaXML Schema4.日期和时间型

xsd:duration : 一段时间,格式 : P[ 年 Y][月M][日 D][T[ 时H][ 分 M][秒 S]] ,如 PT1Y2M3D

xsd:dateTime : 某天时刻,格式 : 年 -月 -日 T 时 : 分 :秒,如 2002-10-10T12:00:00 xsd:time : 某时刻,格式 : 时 : 分 :秒,如: 16:04:00xsd:date : 某天,格式 : 年 -月 -日,如: 2005-09-22xsd:gYearMonth : 某年某月,格式 : 年 -月,如: 2005-10xsd:gYear : 某年,格式 : 年,如: 2005xsd:gMonthDay : 某月某日,格式 : 月 -日,如: 09-22xsd:gDay : 某日,格式 : 日,如: 22xsd:gMonth : 某月,格式 : 月,如: 09

Page 66: 扩展标记语言 XML  (Extensible Markup Language)

66

XML SchemaXML SchemaExamples:xsd:duration <marathon worldrecord="P6DT4H30M56S"/>

xsd:dateTime <airship launch="2003-10-15T09:00:00"/>

xsd:gMonthDay <China NationalDay="10-1"/>

<!--error--><China NationalDay="10-01"/>

注:除 xsd:duration外,其他类型中年为 4 为,月、日、时、分、秒均为 2位。

Page 67: 扩展标记语言 XML  (Extensible Markup Language)

67

XML SchemaXML Schema5. 自定义类型不包含任何子元素,但包含数字、字符串、日期等简单数据内容的元素。用户可以自定义类型,通过改造简单数据类型来满足自己的需要,如限制一个数字类型的取值范围。自定义类型的通常格式:

<xsd:simpleType name="name"> <xsd:restriction base="simpletype"> <!-- usually here is the restriction elements--> </xsd:restriction></xsd:simpleType>

Page 68: 扩展标记语言 XML  (Extensible Markup Language)

68

XML SchemaXML Schema常用的限制元素:

xsd:minInclusive : 允许的最小值xsd:maxInclusive : 允许的最大值xsd:totalDigits : 十进制数的最大位数xsd:fractionDigits :十进制数小数部分的最大位数xsd:minlength : 数据的最小长度xsd:maxlength : 数据的最大长度

自定义类型分类:基本自定义类型高级自定义类型:枚举类型,列表类型,模式类型 (pattern ty

pe)

Page 69: 扩展标记语言 XML  (Extensible Markup Language)

69

XML SchemaXML Schema

基本自定义类型<xsd:simpleType name="onetotenType"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="1"/> <xsd:maxInclusive value="10"/> </xsd:restriction></xsd:simpleType>

Page 70: 扩展标记语言 XML  (Extensible Markup Language)

70

XML SchemaXML Schema自定义类型的两种使用方法:

<xsd:element name="rating" type="onetotenType"><!-- the following is the definition of onetotenType-->

<xsd:element name="rating"> <!-- here is the definition of onetotenType without na

me--></xsd:element>

Page 71: 扩展标记语言 XML  (Extensible Markup Language)

71

XML SchemaXML Schema例 :密码元素的自定义<xsd:element name="password"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:minLength value="8"/> <xsd:maxLength value="12"/> </xsd:restriction> </xsd:simpleType></xsd:element>

<password>,c.x/zmv</password>

Page 72: 扩展标记语言 XML  (Extensible Markup Language)

72

XML SchemaXML Schema例:资金元素的自定义<xsd:element name="balance"> <xsd:simpleType> <xsd:restriction base="xsd:decimal"> <xsd:totalDigits value="6"/> <xsd:fractionDigits value="2"/> </xsd:restriction> </xsd:simpleType></xsd:element>

<balance>6524.78</balance>

Page 73: 扩展标记语言 XML  (Extensible Markup Language)

73

XML SchemaXML Schema元素的属性如何限定?通过 <xsd:attribute> 元素的 use 和 value 属性对定义的属性进行约束。use 的取值: optional( 缺省值 ) , required , default , fi

xed , prohibited

<xsd:attribute name="balance" type="xsd:decimal" use="default" value="0.0"/>

<xsd:attribute name="expired" type="xsd:boolean" use="fixed" value="false"/>

Page 74: 扩展标记语言 XML  (Extensible Markup Language)

74

XML SchemaXML Schema 高级自定义类型1.枚举类型枚举类型用来限制一个简单类型的可能取值,简单类型可以是除了布尔类型的其他类型。枚举类型使用 xsd:enumer

ation 在 xsd:restriction 中进行定义。枚举类型的基本格式:

<xsd:simpleType name="name"> <xsd:restriction base="simpletype"> <xsd:enumeration value="enumerated value"/> <!-- the other enumerated values--> </xsd:restriction></xsd:simpleType>

Page 75: 扩展标记语言 XML  (Extensible Markup Language)

75

XML SchemaXML Schema例:枚举类型<xsd:element name="team"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Detroit Red Wings"/> <xsd:enumeration value="Chicago Blackhawks"/> <xsd:enumeration value="Columbus Blue Jackets"/> </xsd:restriction> </xsd:simpleType></xsd:element>

<team>Detroit Red Wings</team>

Page 76: 扩展标记语言 XML  (Extensible Markup Language)

76

XML SchemaXML Schema

2.列表类型枚举类型只允许使用一个枚举的数值,而列表类型允许针对一个元素提供多个数值。列表类型使用 xsd:list 元素来定义。列表类型的基本格式:

<xsd:simpleType name="name"> <xsd:list itemType="simpletype"/></xsd:simpleType>

Page 77: 扩展标记语言 XML  (Extensible Markup Language)

77

XML SchemaXML Schema例:列表类型<xsd:element name="rainfall">

<xsd:simpleType> <xsd:list itemType="xsd:decimal"/>

</xsd:simpleType></xsd:element>

<rainfall>1.25 2.0 3.0 4.25 3.75</rainfall>

如何限定列表中数据的个数?

Page 78: 扩展标记语言 XML  (Extensible Markup Language)

78

XML SchemaXML Schema<xsd:element name="rainfall">

<xsd:simpleType><xsd:restriction base="mylist">

<xsd:length value="7"/></xsd:restriction>

</xsd:simpleType></xsd:element><xsd:simpleType name="mylist">

<xsd:list itemType="xsd:decimal"/></xsd:simpleType>

<rainfall>1.25 2.0 3.0 4.25 3.75 1.5 0.25</rainfall>

Page 79: 扩展标记语言 XML  (Extensible Markup Language)

79

XML SchemaXML Schema3. 模式类型模式类型允许用户使用一个正规表达式来指定一个模式,这个模式用来控制简单类型的格式。模式类型使用 xsd:pat

tern 元素来定义。模式类型的基本格式: <xsd:simpleType name="name">

<xsd:restriction base="xsd:string"> <xsd:pattern value="regular expression"/> </xsd:restriction></xsd:simpleType>

Page 80: 扩展标记语言 XML  (Extensible Markup Language)

80

XML SchemaXML SchemaXSD 中使用的正规表达式的主要标记:

.-任意单个字符 \d-任意单个数字x?- 0 个或 1 个 xx+- 1 个或多个 xx*- 0 个或多个 x (xy)- x 和 y 是整体x|y- x 或 y [xyz]- x , y , z 中任意一个 [x-y]-在 x到 y 的范围内x{n}- n 个 xx{n , m}- n到m 个 x

Page 81: 扩展标记语言 XML  (Extensible Markup Language)

81

XML SchemaXML Schema例:模式类型<xsd:element name="phonenum"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d\d\d-8820\d\d\d\d"/>

<!--<xsd:pattern value="\d{3}-8820\d{4}"/>--> </xsd:restriction> </xsd:simpleType></xsd:element>

<phonenum>029-88201114</phonenum>

Page 82: 扩展标记语言 XML  (Extensible Markup Language)

82

XML SchemaXML Schema例:模式类型<xsd:element name="pizza"> <xsd:simpleType> <xsd:restriction base="xsd:string">

<xsd:pattern value="(small|medium|large)-(thin|deep)-(sausage\+)?(pepperoni\+)?(mushroom\+)?(peppers\+)?(onions\+)?(anchovies\+)?"/>

</xsd:restriction> </xsd:simpleType></xsd:element>

<pizza>medium-deep-sausage+mushroom+</pizza>

Page 83: 扩展标记语言 XML  (Extensible Markup Language)

83

XML SchemaXML Schema 复杂数据类型复杂数据类型是建立在简单数据类型之上的,用来定义元素的内容模型。复杂数据使用 xsd:compleType 创建。与简单类型相似,可以建立一个带名字属性的复杂类型,也可以把复杂类型建立在一个元素内,从而省略名字。复杂数据类型的元素可以含有属性,进一步依据是否含有文本内容和子元素,复杂数据类型分为三类:

1. 空元素( Empty elements):可含文本内容,不含子元素2. 仅含子元素的元素( Element-only elements):不含文本内容,含子元素3. 混合元素(Mixed elements):含文本内容和子元素

Page 84: 扩展标记语言 XML  (Extensible Markup Language)

84

XML SchemaXML Schema1. 空元素( Empty elements)空元素可以含有属性和文本内容,但是不包含子元素。空元素只能使用属性来描述元素的信息。空元素使用 xsd:complexType 和 xsd:simpleCo

ntent 来创建。创建空元素的格式:

<xsd:element name="name"> <xsd:complexType>

<xsd:simpleContent> <xsd:extension base="type">

<!– 属性的定义 --> </xsd:extension> </xsd:simpleContent> </xsd:complexType></xsd:element>注:使用 xsd:simpleContent 和 xsd:extension 可以加入文本内容

Page 85: 扩展标记语言 XML  (Extensible Markup Language)

85

XML SchemaXML Schema例 1 :不带文本内容的空元素

<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="automobile"> <xsd:complexType> <xsd:attribute name="vin" type="xsd:string"/> <xsd:attribute name="year" type="xsd:string"/> <xsd:attribute name="make" type="xsd:string"/> <xsd:attribute name="model" type="xsd:string"/> </xsd:complexType> </xsd:element></xsd:schema>

<?xml version="1.0"?><automobile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:

noNamespaceSchemaLocation="automobile.xsd" vin="SALHV1245SA661555" year="1995" make="Land Rover" model="Range Rover"></automobile>

Page 86: 扩展标记语言 XML  (Extensible Markup Language)

86

XML SchemaXML Schema例 2 :带文本内容的空元素

<xsd:element name="automobile"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:positiveInteger"> <xsd:attribute name="vin" type="xsd:string"/> <xsd:attribute name="year" type="xsd:string"/> <xsd:attribute name="make" type="xsd:string"/> <xsd:attribute name="model" type="xsd:string"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType></xsd:element>

<automobile vin="SALHV1245SA661555" year="1995" make="Land Rover" model="Range Rover">2</automobile>

说明 automobile 的文本内容为 positiveInteger

Page 87: 扩展标记语言 XML  (Extensible Markup Language)

87

XML SchemaXML Schema2. 仅含子元素的元素( Element-only elements)Element-only 元素可以含有属性和子元素,但不含有文本内容。 Elemen

t-only 元素使用 xsd:complexType 来创建。使用 xsd:sequence , xsd:choice , xsd:all 定义一个子元素列表,对子元素的顺序和出现进行限定。 xsd:choice : 子元素列表中只能有一个子元素被使用 xsd:sequence : 子元素列表中的子元素按照定义的顺序出现 xsd:all : 子元素列表中的子元素的可以无序出现,它必须出现在元素内容模型定义的顶部,而且内容必须是独立的元素

Element-only 元素的创建格式:<xsd:element name="name"> <xsd:complexType> <!-- 子元素列表 --> </xsd:complexType></xsd:element>

Page 88: 扩展标记语言 XML  (Extensible Markup Language)

88

XML SchemaXML Schema例: xsd:sequence 的使用

<xsd:element name="quiz"> <xsd:complexType> <xsd:sequence minOccurs="1" maxOccurs="20"> <xsd:element name="question" type="xsd:string"/> <xsd:element name="answer" type="xsd:string"/> </xsd:sequence> </xsd:complexType></xsd:element>

<quiz> <question>What does XML stand for?</question> <answer>eXtensible Markup Language</answer> <question>Who is responsible for overseeing XML?</question> <answer>World Wide Web Consortium(W3C)</answer></quiz>

maxOccurs 为 unbounded 代表次数没有限制maxOccurs 可用在单个元素中,用来控制出现次数

Page 89: 扩展标记语言 XML  (Extensible Markup Language)

89

XML SchemaXML Schema例: xsd:choice 的使用

<xsd:element name="id"> <xsd:complexType> <xsd:choice> <xsd:element name="ssnum" type="xsd:string"/>

<xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="birthdate" type="xsd:date"/> </xsd:sequence>

<xsd:element name="licensenum" type="xsd:string"/> </xsd:choice> </xsd:complexType></xsd:element>

Page 90: 扩展标记语言 XML  (Extensible Markup Language)

90

XML SchemaXML Schema例: xsd:choice 的使用

<id> <ssnum>123-89-4567</ssnum></id><id> <name>Milton James</name> <birthdate>1969-10-28</birthdate></id><id> <licensenum>12348765</licensenum></id>

Page 91: 扩展标记语言 XML  (Extensible Markup Language)

91

XML SchemaXML Schema例: xsd:all 的使用

<xsd:complexType name="automobileType"><xsd:simpleContent> <xsd:extension base="xsd:anyType">

<xsd:attribute name="vin" type="xsd:string"/> <xsd:attribute name="year" type="xsd:string"/> <xsd:attribute name="make" type="xsd:string"/> <xsd:attribute name="model" type="xsd:string"/> </xsd:extension></xsd:simpleContent></xsd:complexType>

<xsd:complexType name="houseType"><xsd:attribute name="year" type="xsd:gYear"/><xsd:attribute name="area" type="xsd:positiveInteger"/></xsd:complexType>

Page 92: 扩展标记语言 XML  (Extensible Markup Language)

92

XML SchemaXML Schema例: xsd:all 的使用<xsd:element name="assets"> <xsd:complexType> <xsd:all>

<xsd:element name="automobile" type="automobileType"/> <xsd:element name="house" type="houseType"/>

</xsd:all> </xsd:complexType></xsd:element>

<assets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="assets.xsd"><house year="1995" area="400"/><automobile vin="SALHV1245SA661555" year="1995" make="Land Rover" model="Range Rover">2</automobile>

</assets>

Page 93: 扩展标记语言 XML  (Extensible Markup Language)

93

XML SchemaXML Schema错误 Schema :<xsd:complexType name="PurchaseOrderType"> <xsd:sequence> <xsd:all> <xsd:element name="shipTo" type="USAddress"/> <xsd:element name="billTo" type="USAddress"/> <xsd:element name="items" type="Items"/> <xsd:sequence> <xsd:element name="comment" type="Comment"/> </xsd:sequence> </xsd:all> </xsd:sequence> <xsd:attribute name="orderDate" type="xsd:date"/></xsd:complexType>

xsd:all 不在顶部

xsd:all包含了不独立的元素

Page 94: 扩展标记语言 XML  (Extensible Markup Language)

94

XML SchemaXML Schema3. 混合元素(Mixed elements)混合元素可以包含属性,文本内容和子元素,是最灵活的元素。混合元素的创建类似于其他复杂类型,不过需要使用 xsd:mixed 属性。混合元素的创建格式:<xsd:element name="name"> <xsd:complexType mixed="true"> <!-- 子元素,属性的定义 --> </xsd:complexType></xsd:element>

Page 95: 扩展标记语言 XML  (Extensible Markup Language)

95

XML SchemaXML Schema例:混合元素<xsd:element name="message"> <xsd:complexType mixed="true"> <xsd:sequence> <xsd:element name="emph" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="to" type="xsd:string" use="required"/> <xsd:attribute name="from" type="xsd:string" use="required"/> <xsd:attribute name="timestamp" type="xsd:dateTime" use="required"/> </xsd:complexType></xsd:element>

<message to="you" from="me" timestamp="2001-03-14T12:45:00">I hope you return soon. I’ve <emph>really</emph> missed you!</message>

Page 96: 扩展标记语言 XML  (Extensible Markup Language)

96

XML SchemaXML Schema引用新元素的三种方法:使用类型:

1. 直接定义(不能重复使用)2. 定义新的数据类型,使用类型 type 来插入新元素使用元素:3. 定义新的全局元素(直接定义在 xsd:schema 下的子元素),使用引用 ref插入新元素<login>

<userid>xbwang</userid><password>,c.x/zmv</password>

<!-- 如何定义 password ? --></login>

Page 97: 扩展标记语言 XML  (Extensible Markup Language)

97

XML SchemaXML Schema1.直接定义<xsd:element name="login"> <xsd:complexType> <xsd:sequence> <xsd:element name="userid" type="xsd:string"/> <xsd:element name="password"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:minLength value="8"/> <xsd:maxLength value="12"/> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:sequence> </xsd:complexType></xsd:element>

Page 98: 扩展标记语言 XML  (Extensible Markup Language)

98

XML SchemaXML Schema2. 定义新的数据类型<xsd:simpleType name="eighttotwelve"> <xsd:restriction base="xsd:string"> <xsd:minLength value="8"/> <xsd:maxLength value="12"/> </xsd:restriction></xsd:simpleType>

<xsd:element name="login"> <xsd:complexType> <xsd:sequence> <xsd:element name="userid" type="xsd:string"/> <xsd:element name="password" type="eighttotwelve"/> </xsd:sequence> </xsd:complexType></xsd:element>

Page 99: 扩展标记语言 XML  (Extensible Markup Language)

99

XML SchemaXML Schema3. 定义新的全局元素<xsd:element name="password"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:minLength value="8"/> <xsd:maxLength value="12"/> </xsd:restriction> </xsd:simpleType></xsd:element>

<xsd:element name="login"> <xsd:complexType> <xsd:sequence> <xsd:element name="userid" type="xsd:string"/> <xsd:element ref="password"/> </xsd:sequence> </xsd:complexType></xsd:element>

Page 100: 扩展标记语言 XML  (Extensible Markup Language)

100

XML SchemaXML Schema

一个完整的 XML Schema 的例子XML文档 XSD Schema文档

Page 101: 扩展标记语言 XML  (Extensible Markup Language)

101

XMLXML模式语言总结模式语言总结W3C XML Schema工作组制定了 XML Schema ,但是它并不是唯一的模式语言。模式语言除了 Schema 、 DTD外,还有 RELAX NG , Schematr

on 等。一般情况下根据需求,选择最适合自己的模式语言,有时还需要混合匹配多种模式语言,执行多层次的验证。W3C XML Schema 于 Document Type Definitions 是目前主流的模式语言。 DTD 是基于正则表达式的;而 XSD Schema 使用 X

SD 标记语言建立,是一种基于 XML 的标记语言,统一了 XSD Schema 文档和 XML 文档的创建方法。

XML Schema 是 DTD 的替代品?

Page 102: 扩展标记语言 XML  (Extensible Markup Language)

102

XMLXML模式语言总结模式语言总结W3C XML Schema主要特征: 使用复杂类型验证元素和属性结构的有效性 使用简单类型验证文本内容的有效性 可派生新类型 验证父 - 子关系的有效性 支持有序、无序结构 支持命名空间

Document Type Definitions主要特征:

具有更广泛的解析器和库支持 广泛支持父 - 子关系 能够定义实体和符号 支持属性默认值

Page 103: 扩展标记语言 XML  (Extensible Markup Language)

103

XMLXML模式语言总结模式语言总结W3C XML Schema适用情况: 文档包含数据库记录或对象,而不包含叙述性内容 数据需要确定类型 需要定义自定义数据类型 需要在模式中使用元信息注释元素

Document Type Definitions适用情况:

文档是叙述性的,并具有混合内容 绝大多数验证是关于元素和属性的结构,而不是元素和属性的内容 需要定义实体 编写模式不能花费过多精力

Page 104: 扩展标记语言 XML  (Extensible Markup Language)

104

XMLXML解析器模型解析器模型一个 XML 文档,可以是格式正规的、有效的。由于具有这样的特点, XML 文档常被用来存储数据,如何处理 XML文档?XML 解析器的任务就是处理 XML 文档。 XML 解析器能够从

XML 文档中读取字符串,把它们解析成为有意义的标记和相关联的数据。XML 解析器能确定 XML 文档是格式正规的,按照是否进行有效性验证,通常分为两类:

标准解析器( standard(nonvalidating) parser) 有效性解析器( validating parser)如 Internet Explorer 5.5 ,包含了一个 XML 标准解析器,能够处理 XML 文档,并使用样式单来显示它。

Page 105: 扩展标记语言 XML  (Extensible Markup Language)

105

XMLXML解析器模型解析器模型书写 XML 解析器有两种标准的接口规范: 简单应用程序接口 (SAX) :一种基于事件的模型,可用于避免构造复杂的文档结构,尤其是当文档规模特别庞大或只对其中某一点感兴趣时, SAX 就会更显出其优越性。 SAX 事件由解析器在进入或离开文档、元素、子树、属性时产生。 文档对象模型 (DOM) :一个结构化文档编程接口,它定义了文档的逻辑结构以及访问和操作文档的方法,

XML 文档中的元素就是 DOM 树中的节点对象,使用DOM 模型,可以方便地创建文档,导航其结构或增加、删除、修改和移动文档中的任何成分。

Page 106: 扩展标记语言 XML  (Extensible Markup Language)

106

XMLXML解析器模型解析器模型

XML Document

XMLParser

XMLApplication

Program

SAX Interfaces

DOM Interfaces

使用php+sax解析xml文档

Page 107: 扩展标记语言 XML  (Extensible Markup Language)

107

简单应用程序接口简单应用程序接口 SAXSAX

SAX : The Simple API for XMLSAX 是由 xml-dev 邮件列表中的成员开发的,为处理 XML 文档提供了一种简单而直接的方法。 SAX 解析器只是触发特定的事件。可以使用任何语言编写 SAX 解析器。

1998 年 5月, SAX 1.02000 年 5月, SAX 2.0

Page 108: 扩展标记语言 XML  (Extensible Markup Language)

108

简单应用程序接口简单应用程序接口 SAXSAXSAX 1.0一个使用 SAX1.0 解析器的 XML 应用程序必须支持的一些方法:

characters()-当返回元素内字符时触发endDocument()-当文档结束时触发endElement()-当遇到元素的结束标记时触发ignorableWhitespace()-当在元素间遇到空白符时触发processingInstruction()-当遇到处理指令时触发startElement()-当遇到元素的开始标记时触发注: SAX 1.0 不支持命名空间

Page 109: 扩展标记语言 XML  (Extensible Markup Language)

109

简单应用程序接口简单应用程序接口 SAXSAXSAX 2.0一个使用 SAX2.0 解析器的 XML 应用程序必须支持 SAX

1.0 ,另外还一些方法如下:startPrefixMapping()-当前缀映射开始时触发endPrefixMapping()-当前缀映射结束时触发skippedEntity()-当在一个实体被跳过时触发

Page 110: 扩展标记语言 XML  (Extensible Markup Language)

110

简单应用程序接口简单应用程序接口 SAXSAX

编写使用 SAX 解析器的 XML 应用程序首先要获得一个 SAX 解析器(当然可以自己编写)。常见的 SAX 解析器有:Xerces : 支持 SAX , 也支持 DOM Level 2 ,从 ht

tp://xml.apache.org/ 上下载Libxml : 基于 Perl 模块,从 http://www.cpan.or

g/ 下载Python : 方便 Python 编程者的使用,在 Python

2.0 以后版本中支持 SAX

Page 111: 扩展标记语言 XML  (Extensible Markup Language)

111

简单应用程序接口简单应用程序接口 SAXSAX

例:一个使用Xerces解析器的Java程序

Page 112: 扩展标记语言 XML  (Extensible Markup Language)

112

简单应用程序接口简单应用程序接口 SAXSAX<?xml-stylesheet href="mystyle.css" ty

pe="text/css"><dealership> <automobile make="Buick" model

="Century" color="blue"> <option>CD player</option> </automobile></dealership>

Start document.Received processing instruc

tion:Target: xml-stylesheetData: href="mystyle.css" typ

e="text/css"Start element: dealershipStart element: automobileStart element: optionReceived characters: CD pla

yerEnd of element: optionEnd of element: automobileEnd of element: dealershipEnd of document reached.

startDocumentprocessingInstructionstartElementstartElement startElement charactersendElementendElement endElement endDocument

Page 113: 扩展标记语言 XML  (Extensible Markup Language)

113

简单应用程序接口简单应用程序接口 SAXSAX

总结1. SAX 是一种基于事件的模型。 SAX 解析器只是产生特定的事件,不做其他的处理。2. 应用程序和 SAX 解析器通常组合在一起对

XML 文档进行处理。3. 应用程序通过捕获 SAX 解析器触发的事件,调用相应的事件处理函数来对 XML 文档进行访问。

Page 114: 扩展标记语言 XML  (Extensible Markup Language)

114

文档对象模型文档对象模型 DOMDOM

什么是 DOM ?DOM 接口种类如何使用 DOM 来访问 XML 文档中的数据?如何使用 DOM 修改一个 XML 文档?

Page 115: 扩展标记语言 XML  (Extensible Markup Language)

115

文档对象模型文档对象模型 DOMDOM DOM : Document Object ModelDOM 提供了一个标准对象集来描述 HTML 和 X

ML 文档,给出了这些对象组合的方法,并提供了访问和操纵它们的接口。DOM 提供了一种标准,让程序能够以数据结构的形式来访问一个结构化的文档。DOM 解析器是基于 DOM 的一个程序,它能够读取 XML 并将其转化为一个数据结构,并将其交给应用程序进行进一步的处理。

Page 116: 扩展标记语言 XML  (Extensible Markup Language)

116

文档对象模型文档对象模型 DOMDOM

DOM 是 W3C制定的一个标准。http://www.w3.org/DOM/DOM 的不同级别:

1. DOM level1 : 支持基本的 XML 、 HTML2. DOM level2 : 支持命名空间, CSS ,事件,新的访问方法3. DOM level3 : 支持用户事件,支持 XPath

Page 117: 扩展标记语言 XML  (Extensible Markup Language)

117

文档对象模型文档对象模型 DOMDOM<?xml-stylesheet href="mystyle.css" type="text/css"?><dealership> <automobile make="Buick" model="Century" color="blue"> <options> <option>Cruise control</option> <option>CD player</option> </options> </automobile> <automobile make="Ford" model="Thunderbird" color="red"> <options> <option>convertible</option> <option>leather interior</option> <option>heated seats</option> </options> </automobile><dealership>

Page 118: 扩展标记语言 XML  (Extensible Markup Language)

118

文档对象模型文档对象模型 DOMDOMThe DOM representation of an XML document

Document Dealership(Element)

automobile(Element) options

(Element)

option(Element)

option(Element)

(Text)

(Text)

make(Attribute)model(Attribute)color(Attribute)

automobile(Element) options

(Element)

option(Element)

option(Element)

(Text)

(Text)

make(Attribute)model(Attribute)color(Attribute)

option(Element)

(Text)

Page 119: 扩展标记语言 XML  (Extensible Markup Language)

119

文档对象模型文档对象模型 DOMDOM DOM 接口DOM 解析器为了遵循 DOM ,必须实现一些接口。每个接口对应于 DOM 树中的特定类型的结点。在应用程序中常用的接口有:

1. 结点接口 (Node Interface)2. 文档接口 (Document Interface)3. 元素接口 (Element Interface)4. 属性接口 (Attribute Interface)5. 结点列表接口 (NodeList Interface)

Page 120: 扩展标记语言 XML  (Extensible Markup Language)

120

文档对象模型文档对象模型 DOMDOM

1. 结点接口 (Node Interface)其他所有的接口都从结点接口继承而来。在 DOM 树中的任何一个实体都是一个结点,都具有一定的共同点。使用结点接口可以实现: 获得结点的属性:名字,数值,指向树根结点的指针; 访问结点的父亲,兄弟,子女;

Page 121: 扩展标记语言 XML  (Extensible Markup Language)

121

文档对象模型文档对象模型 DOMDOM

2. 文档接口 (Document Interface)文档结点是 DOM 树的根结点,文档接口是与之对应的接口,用来访问文档结点。XML 文档的根元素不是 DOM 树的根结点,它只是文档结点的子元素结点。使用文档接口可以实现:

访问子元素; 创建 DOM 树中的新元素; 创建 DOM 树中的新属性;

Page 122: 扩展标记语言 XML  (Extensible Markup Language)

122

文档对象模型文档对象模型 DOMDOM

3. 元素接口 (Element Interface)元素结点代表 XML 、 HTML 文档中的一个元素,使用元素接口来访问。使用元素接口可以实现:

获得元素的名字; 获得、增加、删除元素的属性; 访问子元素;

Page 123: 扩展标记语言 XML  (Extensible Markup Language)

123

文档对象模型文档对象模型 DOMDOM

4. 属性接口 (Attribute Interface)使用属性接口可以访问一个元素的属性。属性接口也是从结点接口继承而来,但是属性在 DOM 树中并不是一个结点,不是所属元素的子结点。因此访问属性结点的父亲、兄弟、子女返回都是空值。使用属性接口可以实现:

访问属性的名字,数值; 访问一个布尔型的标志,它用来反映属性是否显式出现在文档中;

Page 124: 扩展标记语言 XML  (Extensible Markup Language)

124

文档对象模型文档对象模型 DOMDOM

5. 结点列表接口 (NodeList Interface)结点列表是一个结点集合,是一个抽象的数据结构,使用结点列表接口来访问 DOM 树中的结点集合。如通过元素接口可以访问该元素的所有子元素,它们就构成了一个结点列表。使用结点列表接口可以实现: 获得结点列表的大小; 通过索引来访问结点列表中的结点;

Page 125: 扩展标记语言 XML  (Extensible Markup Language)

125

文档对象模型文档对象模型 DOMDOM

使用 DOM 来访问 XML 文档中的数据Internet Explorer(version5 及以上版本 )含有一个内置的 DOM 解析器,可以自动的把 XML文档数据转化为一个 DOM 树。

在 IE 中通过 DOM 访问 XML 文档的两个例子:例 1 :显示 DOM 树中结点的名字

源码 execute

例 2 :处理 DOM 树中不同类型的结点源码 execute

Page 126: 扩展标记语言 XML  (Extensible Markup Language)

126

文档对象模型文档对象模型 DOMDOM

使用 DOM 修改一个 XML 文档获得 DOM 树中的文档结点

var doc=document.all("cars").XMLDocument;获得 XML 文档的根元素var root=doc.childNodes.firstChild;var root=doc.childNodes(0);var root=doc.childNodes.item(0);

Page 127: 扩展标记语言 XML  (Extensible Markup Language)

127

文档对象模型文档对象模型 DOMDOM

元素的基本操作:1. 新建一个元素

var newElement=doc.createElement("automobile");root.appendChild(newElement);

2. 更新一个元素var replacementElem=doc.createElement("customer");var oldNode=root.replaceChild(replacementElem,root.chil

dNodes.lastChild);3. 删除一个元素

var anotherOldNode=root.removeChild(root.childNodes.lastChild);

Page 128: 扩展标记语言 XML  (Extensible Markup Language)

128

文档对象模型文档对象模型 DOMDOM属性的基本操作:1. 给元素添加一个属性

var attr=doc.createAttribute("make");attr.text="Suburu";root.childNodes.lastChild.setAttriuteNode(attr);

2. 修改元素的属性root.childNodes.lastChild.setAttribute("make","BMW");

3. 删除元素的一个属性root.childNodes.lastChild.removeAttribute("make");

Page 129: 扩展标记语言 XML  (Extensible Markup Language)

129

文档对象模型文档对象模型 DOMDOM

总结1. DOM 提供了一种标准,让程序能够以数据结构的形式来访问一个结构化的文档。2. DOM 不针对于任何一种特定的语言,但是访问 DOM 的途径是基本一致的。3. DOM 解析器把 XML 转化为 DOM 树,应用程序通过接口对 DOM 树中的结点进行访问,即是对 XML 文档进行访问。

Page 130: 扩展标记语言 XML  (Extensible Markup Language)

130

SAXSAX 与与 DOMDOM

SAX DOM

制订者 xml-dev 邮件列表成员 W3C

访问方式 顺序 随机处理方式 局部,事件驱动 全局, DOM 树

功能 访问 访问,更改实现 简单,效率高 复杂,内存要求高

Page 131: 扩展标记语言 XML  (Extensible Markup Language)

131

XMLXML文档的显示文档的显示XML 文档的显示需要使用样式单 (style sheet)技术。样式单是对 XML 文档进行格式化的一种机制。样式单是由一系列的样式规则 (style rule) 组成的。HTML 文档主要关注的是显示,不便于信息的查找。使用样式单则可以把 XML 文档的内容和显示分离开来,这样可以便于搜索引擎查找信息。有两种基于样式单、对 XML 文档进行格式化的方法:

层叠样式单: CSS , Cascading Style Sheets扩展样式单语言: XSL , eXtensible Stylesheet Lang

uage

Page 132: 扩展标记语言 XML  (Extensible Markup Language)

132

XMLXML文档的显示文档的显示 层叠样式单 (CSS)层叠样式单是一种样式单语言,最早是用来解决 HTML 文档的显示,也可用来显示 XML 文档。它简单易学,已经得到广泛的支持。层叠样式单中包含了样式规则,它们被应用到相应的元素,定义了显示的字体,颜色,位置等。 扩展样式单语言 (XSL)扩展样式单语言是一种基于 XML 的样式单语言,比 CSS 更加强大。 XSL 由 XSLT(XSL Transformation) 和 XSL-F

O(XSL Formatting Objects) 组成,它们都是基于 XML的语言。① XSLT : 将一个 XML 文档转化为另一个逻辑结构,如 XML 文档,

HTML 文档, XHTML 文档等;② XSL-FO : XSL 格式化对象,可认为是 CSS 的一个超集,完成 X

ML 文档的显示,但是没有得到广泛支持。

Page 133: 扩展标记语言 XML  (Extensible Markup Language)

133

XMLXML文档的显示文档的显示CSS 的缺点:

1. 不能重用 XML 文档的数据2. 不能对文档数据进行选择3. 不能对文档数据进行计算等处理4. 不能生成动态文本,如页数

XSLT克服了上述的缺点,能够对 XML 文档内容进行搜索和重新排列,但是却没有格式化的能力。另外由于浏览器对 XSL-FO支持的不足,通常把 CSS和 XSLT 结合起来使用:使用 XSLT 把 XML 文档转化为一个 HTML 文档,然后使用 CSS 来显示。

Page 134: 扩展标记语言 XML  (Extensible Markup Language)

134

XMLXML文档的显示文档的显示XML 文档显示的两个例子:没有显示的 XML 文档1. 使用 CSS 显示

XML文档 CSS 文档 显示结果 2. 使用 XSLT 显示

XML 文档 XSLT 文档 显示结果

Page 135: 扩展标记语言 XML  (Extensible Markup Language)

135

层叠样式单层叠样式单 (CSS)(CSS)层叠样式单 (CSS) : Cascading Style SheetsCSS 能够对 XML 文档内容进行格式化,使其显示在浏览器中。 CSS 起先是显示 HTML 文档内容的一种方法,也可以用来处理 XML 文档。 CSS 的样式规则不能保存在 XML 文档中,通常保存在扩展名为 css 的文件中。层叠 (cascading)说明了样式规则应用到 HTML/XM

L 文档中元素的方法。在层叠样式单中,特定的样式规则可以覆盖基本的样式规则,亦即,定义了一个元素的样式规则,如果定义它的子元素的样式规则,那么子元素使用自身的样式规则,否则自动继承使用父元素的样式规则。

Page 136: 扩展标记语言 XML  (Extensible Markup Language)

136

层叠样式单层叠样式单 (CSS)(CSS)问题: 什么是样式规则?– 样式规则如何对应到元素?– 样式规则可以定义显示内容的哪些属性?

样式单如何应用到 XML 文档?

Page 137: 扩展标记语言 XML  (Extensible Markup Language)

137

层叠样式单层叠样式单 (CSS)(CSS)样式规则的基本格式:Selector {

Property1 : Value1;Property2 : Value2;…

}说明: 1. 样式属性和属性值之间使用 : 分割; 2. 每一对样式属性和属性值之间用 ; 分割; 3. 使用 , 来定义作用于多个元素的样式规则;

message {display : block;margin-bottom : 5px;font-family : Courier;font-size : 14pt

}

ssnum, phonenum, email {display : none;

}

Page 138: 扩展标记语言 XML  (Extensible Markup Language)

138

层叠样式单层叠样式单 (CSS)(CSS)层叠样式单中的样式规则如何应用到 HTML/XM

L 文档的元素?使用选择器建立元素和样式规则之间的联系。在层叠样式单中有三种类型的选择器:

基于元素类型的:通过元素类型(即元素名字)来选择元素 基于 class 属性的:通过元素的 class 属性来选择元素 基于 ID 属性的:通过元素的 ID 属性来选择元素

Page 139: 扩展标记语言 XML  (Extensible Markup Language)

139

层叠样式单层叠样式单 (CSS)(CSS) 基于元素类型的选择器通过元素类型来建立元素和样式规则之间的联系。<message>

It’s very lonely here – I really miss you.</message>message {

display : block;margin-bottom : 5px;font-family : Courier;font-size : 14pt

}

Page 140: 扩展标记语言 XML  (Extensible Markup Language)

140

层叠样式单层叠样式单 (CSS)(CSS) 基于 class 属性的选择器-收缩通过元素的 class 属性来建立元素和样式规则之间的联系。<message class = "urgent">

The sky is falling!</message>message.urgent {

display : block;margin-bottom : 5px;font-family : Courier;font-size : 14pt;font-style : italic;color : red

}

Page 141: 扩展标记语言 XML  (Extensible Markup Language)

141

层叠样式单层叠样式单 (CSS)(CSS) 基于 ID 属性的选择器-扩张通过元素的 ID 属性来建立元素和样式规则之间的联系。<message id = "groovy">

I’m feeling pretty groovy!</message>#groovy {

color : green;font-family : Times;font-style : italic;font-weight : bold

}注:基于 class 属性的选择器只能选择一种元素,而基于 ID 属性的选择器则不同,可以选择多种元素,只要 ID 属性值满足要求即可。

<note id = "groovy">Pick up leisure suit from laundry.

</note>

Page 142: 扩展标记语言 XML  (Extensible Markup Language)

142

层叠样式单层叠样式单 (CSS)(CSS)

CSS 中的样式规则包含了许多样式属性,可以控制字体,颜色,对齐,空白等。样式属性可以分为两种主要类型:

布局属性:影响 XML内容的显示位置,如内容的显示位置,宽度,对齐等;格式属性:控制 XML内容的外观,如边界,字体等。

Page 143: 扩展标记语言 XML  (Extensible Markup Language)

143

层叠样式单层叠样式单 (CSS)(CSS) 布局属性XML 文档被显示在矩形区域中,一些重要的布局属性及其属性值如下:display : 描述矩形区域的显示方法

– block-元素作为新的一段,显示在新的一行上– list-item-元素显示在新的一行上,后加一个 list-item 标记– inline-在当前段内显示元素– none-不显示元素

width , height : 描述矩形区域的宽度和高度– in-英寸– cm-厘米– mm-毫米– pt-点 (points , 1/72 inch)– px-象素 (pixels)

display : block;width : 200px;

Page 144: 扩展标记语言 XML  (Extensible Markup Language)

144

层叠样式单层叠样式单 (CSS)(CSS)position : 位置模式

– relative-相对位置 ( 缺省值 )– absolute-绝对位置

left : 左偏移right : 右偏移top : 顶部偏移bottom : 底部偏移相对位置的例子:

XML 文档 CSS 文档 显示结果绝对位置的例子:XML 文档 CSS 文档 显示结果

Page 145: 扩展标记语言 XML  (Extensible Markup Language)

145

层叠样式单层叠样式单 (CSS)(CSS)如何对矩形区域进行空白的填充?margin-矩形区域外部的空白填充padding-矩形区域内部的空白填充

margin-top , margin-right , margin-bottom , margin-left margin : 一个数值代表所有空白;两个数值代表 top/bottom 、 left/r

ight ;四个数值分别代表 top 、 right 、 bottom 、 leftpadding-top , padding-right , padding-bottom , padding-leftpadding : 含义与margin 类似

空白填充的例子:margin XML 文档 CSS 文档 显示结果padding XML 文档 CSS 文档 显示结果

Page 146: 扩展标记语言 XML  (Extensible Markup Language)

146

层叠样式单层叠样式单 (CSS)(CSS)如何处理多个重叠的元素?z-index : 第三维坐标 ( 相对于 x 、 y) ,数值大的元素显示在数值小的元素之上重叠的例子:

XML 文档 CSS 文档 显示结果

Page 147: 扩展标记语言 XML  (Extensible Markup Language)

147

层叠样式单层叠样式单 (CSS)(CSS)text-indent : 开始文字缩进letter-spacing : 字符间距text-align : 水平对齐,如 left , right , centervertical-align : 垂直对齐

– top-元素顶部与当前行对齐– bottom-元素底部与当前行对齐– text-top-元素顶部与父元素顶部对齐– text-bottom-元素底部与与父元素底部对齐– middle-元素中部与父元素的中部对齐– sub-元素作为父元素的下标对齐– super-元素作为父元素的上标对齐

text-indent : 1.5in;letter-spacing : 5pt;

Page 148: 扩展标记语言 XML  (Extensible Markup Language)

148

层叠样式单层叠样式单 (CSS)(CSS) 格式属性一些重要的格式属性及其属性值如下:border-width : 所有边界的宽度border-color : 所有边界的颜色border-style : 所有边界的样式,取值有 solid , double , dashed , dotted , gro

ove , ridge , outset , none( 缺省值 )border : 设置所有边界为相同宽度,颜色,样式border-left : 设置左边界border-right : 设置右边界border-top : 设置上边界border-bottom : 设置下边界border-width : 10pxborder-style : dottedborder-color : blackborder-left : 10px double red

=border : 10px dotted black

Page 149: 扩展标记语言 XML  (Extensible Markup Language)

149

层叠样式单层叠样式单 (CSS)(CSS)color : 字体的颜色background-color : 字体的背景颜色background-image : 设置字体的背景图,格式 : url(图像文件名 )background-repeat : 背景图显示的方式,如 repeat( 缺省值 ) ,

repeat-x , repeat-y , no-repeatbackground : 设置文字的背景色,背景图,背景图显示的方式

color : black;background-color : orange;color : rgb(0 , 0 , 255);background-color : #99ff00;background : gray url(money.gif) no-repeat

Page 150: 扩展标记语言 XML  (Extensible Markup Language)

150

层叠样式单层叠样式单 (CSS)(CSS)font-family : 字体font-size : 字体大小font-style : 字体风格,如 normal( 缺省值 ) , italicfont-weight : 字体粗细,如 extra-light , light , demi-ligh

t , medium( 缺省值 ) , demi-bold , bold , extra-bold 等font : 设置文字的风格,粗细,大小,字体font-family : Times, serif;font-size : 36pt;font-style : italic;font-weight : medium; = font : italic medium 36pt

Times, serif;

Page 151: 扩展标记语言 XML  (Extensible Markup Language)

151

层叠样式单层叠样式单 (CSS)(CSS)如何将 CSS 应用到一个 XML 文档 ?在 XML 文档中使用 xml-stylesheet 处理指令来实现,它包含两个属性:

type : 样式单的类型,如 text/csshref : 样式单的位置

<?xml-stylesheet type="text/css" href="talltales.css"?>

Page 152: 扩展标记语言 XML  (Extensible Markup Language)

152

层叠样式单层叠样式单 (CSS)(CSS)一个应用 CSS 的 XML 文档XML 文档 CSS 文档 显示结果

Page 153: 扩展标记语言 XML  (Extensible Markup Language)

153

扩展样式单语言扩展样式单语言 (XSL)(XSL)

扩展样式单语言 (XSL) : eXtensible Stylesheet Language一种基于 XML 的样式单语言,比 CSS 更加强大。问题:1. XSL 的功能有哪几个部分? 2. XSL实现其功能的基本过程? 3. XSL 的功能具体是如何实现的?4. XSL 如何应用到 XML 文档?

Page 154: 扩展标记语言 XML  (Extensible Markup Language)

154

扩展样式单语言扩展样式单语言 (XSL)(XSL)

1. XSL 的功能XSL 处理器的两个基本任务:

1. 对原文档树进行转换,建造一棵结果树;2. 对结果树进行格式化处理在 XSL 分别由 XSLT(XSL Transformation) 和 XSL-FO(XSL Formatting Objects) 来完成这些功能。

XSLT 和 XSL-FO都是基于 XML 的语言。① XSLT : 将一个 XML 文档转化为另一个逻辑结构,如

XML 文档, HTML 文档, XHTML 文档等;② XSL-FO : XSL 格式化对象,可认为是 CSS 的一个超集,完成 XML 文档的显示,但是没有得到广泛支持。

Page 155: 扩展标记语言 XML  (Extensible Markup Language)

155

扩展样式单语言扩展样式单语言 (XSL)(XSL)XSLT 是 XSL 的转换部件,它使用样式单技术来对 XML文档进行转换。为了进行转换, XSLT 使用了模式匹配技术来在 XML 文档中选择内容。选择出的内容使用模板中的转换逻辑进行转换。XSLT 中的一种重要技术是 XPath ,它是一种非 XML 的语言。 XPath 用来对 XML 文档结点进行定位,它是使用 XSLT 进行文档转换的基础。 XPath 不仅在 XSL

T 中使用,在 XLink 和 XPointer 中也有应用。<xsl : for-each select ="contacts/contact">

Page 156: 扩展标记语言 XML  (Extensible Markup Language)

156

扩展样式单语言扩展样式单语言 (XSL)(XSL)XSL-FO 是 XSL 的格式化部件,是 CSS 的一个超集,能够完成

CSS 的所有功能,具有自己的 XML 语法。和 XSLT 一样, XSL-FO 对树型的 XML 数据进行处理。所处理的 XML 数据可以直接来源于 XML 文档,也可以来源于 XSLT 转换来的 XML 文档。

XSL-FO 把树中的每个结点视为一个格式化对象,对树中的结点加上属性,即相当于对 XML 文档中的元素应用了显示样式。与CSS 类似, XSL-FO 也可以设置矩形区域,并且建立它们之间的联系。<fo:block font-family="Arial" font-size="16pt">

This text has been styled with XSL-FO!</fo:block>

Page 157: 扩展标记语言 XML  (Extensible Markup Language)

157

扩展样式单语言扩展样式单语言 (XSL)(XSL)

2. XSL实现其功能的基本过程一个 XML 文档被处理为一棵树后,使用 XSL 处理器就可以把样式单中的规则应用到这棵树上。XSL 处理器从树的根结点开始进行模式匹配。模式包含在样式单模板中,模板中还包含有转换逻辑。对于树中匹配的结点,使用模板中的转换逻辑进行处理,从而形成新的一棵结果树。

Page 158: 扩展标记语言 XML  (Extensible Markup Language)

158

扩展样式单语言扩展样式单语言 (XSL)(XSL)

21 12Pattern Template

Root Node

Source Document Tree

XSL 处理器处理 XML 文档的基本过程

Result Tree

Page 159: 扩展标记语言 XML  (Extensible Markup Language)

159

扩展样式单语言扩展样式单语言 (XSL)(XSL)3. XSLTXSLT 的基本目标是使用模式匹配技术从 XML 文档中挑选结点,并对它们进行转换处理。在 XSLT 的样式单中包含了一个或若干个模板。模板中包含了模式、表达式、转换逻辑。XSLT 样式单文件的基本格式:

<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- the definitions of templates --></xsl:stylesheet>

Page 160: 扩展标记语言 XML  (Extensible Markup Language)

160

扩展样式单语言扩展样式单语言 (XSL)(XSL)定义模板的基本格式:<xsl:template match=" definition of pattern">

<!-- the definitions for transformation logic--></xsl:template>

Page 161: 扩展标记语言 XML  (Extensible Markup Language)

161

扩展样式单语言扩展样式单语言 (XSL)(XSL)模式匹配的例子:

<contact><name>Frank Rizzo</name><address>121 W 304th Street</address><city>New York</city><state>New York</state>

</contact>

<xsl:template match="/">…

</xsl:template><xsl:template match="state">

…</xsl:template>

Page 162: 扩展标记语言 XML  (Extensible Markup Language)

162

扩展样式单语言扩展样式单语言 (XSL)(XSL)使用下面的 xsl命名空间中的元素来定义转换逻辑:

xsl:value-of-插入元素或属性的值xsl:if-选择xsl:choose , xsl:when , xsl:otherwise-选择xsl:for-each-循环xsl:sort-排序xsl:apply-templates-应用某一个模板

Page 163: 扩展标记语言 XML  (Extensible Markup Language)

163

扩展样式单语言扩展样式单语言 (XSL)(XSL)xsl:value-of 的应用举例:

<books><book><title>All The King’s Men</title><author>Robert Penn Warren</author></book><book><title>Atlas Shrugged</title><author>Ayn Rand</author></book>

<books>

<xsl:template match="title"><xsl:value-of select="."/>

</xsl:template>

All The King’s MenAtlas Shrugged

Page 164: 扩展标记语言 XML  (Extensible Markup Language)

164

扩展样式单语言扩展样式单语言 (XSL)(XSL)xsl:if 的应用举例:<locations>

<location city="Washington" state="DC"><description>The United States Capital</description></location><location city="Chicago" state="IL"><description>The Windy City</description></location>

</locations>

<xsl:if test="@state='NY'"><xsl:apply-template select="location"/>

</xsl:if>

Page 165: 扩展标记语言 XML  (Extensible Markup Language)

165

扩展样式单语言扩展样式单语言 (XSL)(XSL)xsl:choose , xsl:when , xsl:otherwise 的使用<xsl:choose>

<xsl:when test=""></xsl:when>

<xsl:when test=""></xsl:when>

<xsl:otherwise></xsl:otherwise>

</xsl:choose>

Page 166: 扩展标记语言 XML  (Extensible Markup Language)

166

扩展样式单语言扩展样式单语言 (XSL)(XSL)

xsl:for-each 的应用举例:<xsl:for-each select="locations/location">

<h1><xsl:value-of select="@city"/>,<xsl:value-of select="@state"/></h1><h2><xsl:value-of select="description"/></h2>

</xsl:for-each>

<h1>Washing,DC</h1><h2>The United States Capital</h2><h1>Chicago,IL</h1><h2>The Windy City</h2>

Page 167: 扩展标记语言 XML  (Extensible Markup Language)

167

扩展样式单语言扩展样式单语言 (XSL)(XSL)xsl:sortXSLT 通过使用 xsl:sort 元素来实现排序,排序标准由下面三个属性决定:

select-排序的目标,元素或属性的值order-降序或升序 ( 缺省值 ) , descending/ascendingdata-type-排序数据的类型, text/number

<xsl:sort select="name" order="descending" data-type="text"/>

Page 168: 扩展标记语言 XML  (Extensible Markup Language)

168

扩展样式单语言扩展样式单语言 (XSL)(XSL)xsl:apply-templates定义一个模板后,必须显式的使用 xsl:apply-templates 来调用它,否则定义的模板不起作用。模板的定义<xsl:template match="location">

…</xsl:template>模板的调用<xsl:apply-templates select="location"/><xsl:apply-templates/>注:如果模板是对根元素起作用,则此模板被自动调用。

Page 169: 扩展标记语言 XML  (Extensible Markup Language)

169

扩展样式单语言扩展样式单语言 (XSL)(XSL)

21

Root Node<xsl:template match="/"></xsl:template><xsl:template match=" 模式 12">

…</xsl:template>

<xsl:template match="/">1)<xsl:apply-templates/>2)<xsl:apply-templates select=" 模式 12">

…</xsl:template>

Page 170: 扩展标记语言 XML  (Extensible Markup Language)

170

扩展样式单语言扩展样式单语言 (XSL)(XSL)

表达式表达式可以完成数学计算,条件测试等功能。表达式中可以使用的操作符和函数有:操作符: = , != , &lt; , &lt;= , &gt; , &gt;= , and , or函数 : ceiling() , floor() , round() , sum() , count()

Page 171: 扩展标记语言 XML  (Extensible Markup Language)

171

扩展样式单语言扩展样式单语言 (XSL)(XSL)Examples:数学计算

<div>Total amount=$<xsl:value-of select="round(sum(vehicles/vehicle/price)

div count(vehicles/vehicle))"/></div>条件测试<xsl:if test="countdown &lt;= 0">

Lift off!</xsl:if>

Page 172: 扩展标记语言 XML  (Extensible Markup Language)

172

扩展样式单语言扩展样式单语言 (XSL)(XSL)

4. 对 XML 文档应用 XSL在 XML 文档中使用 xml-stylesheet 处理指令来实现,它包含两个属性:type : 样式单的类型,如 text/xslhref : 样式单的位置

<?xml-stylesheet type="text/xsl" href="contacts.xsl"?>

Page 173: 扩展标记语言 XML  (Extensible Markup Language)

173

扩展样式单语言扩展样式单语言 (XSL)(XSL)

一个应用 XSL 的 XML 文档XML 文档 XSL 文档 显示结果

Page 174: 扩展标记语言 XML  (Extensible Markup Language)

174

XHTMLXHTML

1. 什么是 XHTML? 为什么会产生 XHTML?2. XHTML 和 HTML 之间的区别是什么?3. 如何创建和验证 XHTML 文档?4. 如何把 HTML 文档转化为 XHTML 文档?

Page 175: 扩展标记语言 XML  (Extensible Markup Language)

175

XHTMLXHTML

XHTML 是一种基于 XML 的标记语言,用来完成HTML 的功能。 XHTML 是 HTML 的继承者( XML 不是)。

XHTML 产生的原因:1. HTML 结构性差,不便于信息的获取;2. XML 结构性好,能够把内容和显示分开,但是比较复杂。

XHTML 解决了结构问题,同时能够象 XML 文档一样对其进行格式正规判定和有效性验证。

Page 176: 扩展标记语言 XML  (Extensible Markup Language)

176

XHTMLXHTML

XHTML 和 HTML 之间的主要区别:1. 元素和属性的名称必须小写;2. 对于非空元素,结束标记是必须的;3. 空元素使用开始标记 / 结束标记,或者 / 表示;4. 属性必须要有属性值;5. 属性值必须使用双引号;6. 命名空间必须在 html 元素中声明;7. head 和 body 元素不能省略;8. title必须是 head 元素的第一个子元素;

Page 177: 扩展标记语言 XML  (Extensible Markup Language)

177

XHTMLXHTMLXHTML最早版本是 1.0 ,主要用于把 HTML4.0 解释为基于 X

ML 的标记语言。现在 XHTML最新版本是 2.0 。XHTML1.0 有三种功能由弱到强的不同风格:

1. 严格式 (strict) :不支持显示元素,如 font , table<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "h

ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">2. 过渡式 (transitional) :包含显示元素可以对文档进行格式化<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//

EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

3. 框架式 (frameset) :支持 frame<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//E

N" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

Page 178: 扩展标记语言 XML  (Extensible Markup Language)

178

XHTMLXHTML创建一个可以使用工具验证的 XHTML 文档的步骤:

1) 在根元素前进行文档类型声明;2) 在根元素 html 中使用 xmlns 设定 XHTML命名空间;

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://w

ww.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <title>Skeletal XHTML Document</title> </head> <body>

This is a skeletal XHTML document. </body></html> executing

Page 179: 扩展标记语言 XML  (Extensible Markup Language)

179

XHTMLXHTML把 HTML 转化为 XHTML 的方法一般是使用工具初步处理,然后手工修改。自动转化工具: HTML Tidy根据 HTML 和 XHTML 的区别,需要修改的有:

1. 添加文档类型定义;2. 声明 XHTML命名空间;3. 所有元素和属性名称小写;4. 开始标记和结束标记必须配对,空元素也可使用 / ;5. 所有属性都有属性值;6. 属性值使用双引号包围;7. 确定所有使用的元素和属性在 XHTML DTD 中都有定义;

Page 180: 扩展标记语言 XML  (Extensible Markup Language)

180

XHTMLXHTML

HTML 文档到 XHTML 的转化:HTML 文档 显示结果XHTML 文档 显示结果

Page 181: 扩展标记语言 XML  (Extensible Markup Language)

181

XLink&XPointerXLink&XPointer

1. HTML 中的链接技术2. 什么是 XLink 和 XPointer?

Page 182: 扩展标记语言 XML  (Extensible Markup Language)

182

XLink&XPointerXLink&XPointer在 HTML 中,使用锚点来定义文档中的超文本引用。利用锚点可以将 HTML 文档中的某个热点链接到其他页面、同一页面的其他部分、电子邮件、 ftp站点等等。锚点还可以用来定义文档的位置,以供其他锚点引用它。锚点的标记是 <A> 和 </A> ,典型的锚点如下所示:

<A HREF=http://www.xidian.edu.cn/introduction.html>西安电子科技大学简介 </A><A> 和 </A> 之间的文本是该锚点所定义的热点, HREF指定了锚点热点所链接的对象, HREF 中使用的参数为 URL , UR

L 中的协议除了 http 以外,还可以有 ftp , mailto , gopher , telnet 等等。在主机域名后,还可以有 Web服务器的端口号, http默认的端口号是 80 ,如果不用默认端口号,则格式为 " 主机域名:端口号 " 。

Page 183: 扩展标记语言 XML  (Extensible Markup Language)

183

XLink&XPointerXLink&XPointer

链接到其他页面的例子HTML 文档 显示结果链接到页面不同位置的例子HTML 文档 显示结果

Page 184: 扩展标记语言 XML  (Extensible Markup Language)

184

XLink&XPointerXLink&XPointerXLink 是一种使 XML链接成为可能的基本技术,功能比 HT

ML强大的多。 XLink还需要 XPath 和 XPointer 的支持,三者组合在一起实现了 XML链接。XPath : 一种非 XML 语言,通过模式和表达式对 XML 文档中的内容进行定位;XPointer : 一种建立在 XPath 基础上的非 XML 语言,能够对 XML 文档的内部结构进行定位,换言之,它定义了创建片断标识符的语法;XLink : 一种 XML 语言,用来建构 XML 文档中的链接。XPointer 的一些例子:href="http://www.gashoundgames.com/factoids.xml#c

hild::factoid"

Page 185: 扩展标记语言 XML  (Extensible Markup Language)

185

XLink&XPointerXLink&XPointerXLink 的一些例子:<employees xmlns:xlink="http://www.w3.org/1999/xlink" xlink:hr

ef="employees.xml">Current Employees

</employees><employees xmlns:xlink=http://www.w3.org/1999/xlink"

xlink:type="simple" xlink:href="employees.xml"xlink:show="replace"xlink:actuate="user"xlink:role="employees"xlink:title="Employee List">Current Employees

</employees>

Page 186: 扩展标记语言 XML  (Extensible Markup Language)

186

XLink&XPointerXLink&XPointer

总结:没有链接,就没有 Web ; HTML 中使用 <A> 标记来实现链接; XML 提供了 XLink 和 XPointer ,是一种新的链接技术,比 HTML 中的链接更为复杂,功能也更为强大。

Page 187: 扩展标记语言 XML  (Extensible Markup Language)

187

XMLXML作业作业假定你要到一个公司应聘Web 程序设计员一职,公司需要你应用 XML技术尽量详细、美观的展现你的个人经历,要求提供下列文档:

① 个人简历的 XML 文档;② 用于验证文档有效性的 XSD 文件;③ 用于显示的 XSL 文件;④ 注释文件 readme.txt ,说明作者姓名,使用工具等信息提交格式:使用 winrar 或 winzip压缩,文件名为学号,如: 002222499.rar提交地址: [email protected]提交日期: 2005 年 11月 20日之前