ACCP
第一章
XML 简介
ACCP
课程地位
C#SQL Server
Oracle
UML
Computer Base
HTML/avaScriptSQL Base OOP/Java C
STB
JSP/Servlet
EJB/WebService
WinForms
Struts/JSF
Testing/SQA
LinuxXML
2
ACCP
课程目标
了解 XML的体系结构及优势
学会如何使用 DTD 和Schema验证XML
掌握命名空间的使用
学会使用XSLT
学会使用XML数据岛
3
ACCP
目标
了解 XML的体系结构及优势
理解格式良好且有效的 XML 文档
学会如何使用 DTD 生成 XML 文档
理解命名空间
4
ACCP
简介 2-1
XML( eXtensible Markup Language,可扩展标记语
言)可以定义自己的一组标签
使人们或程序能够理解这些标签
标记语言的层次结构
SGML
XML
XML
是元语言
基于文本的格式,允许开发人
员描述结构化数据并在各种应
用之间发送和交换这些数据
有助于在服务器之间传输结构化数据
允许通过使用自定义格
式,标识、交换和处理
数据库可以理解的数据
HTML
5
ACCP
简介 2-2
演示:示例 1
<?xml version = "“ encoding=“GB2312”?>
<Details>
<CONTACT>
<RESTAURANT_NAME>中华园 </RESTAURANT_NAME>
<Phone> 3336767 </Phone>
<Street> 王府井大街 25 号 </Street>
<City> 北京 </City>
<Country>中国</Country>
<ZIP> 20056 </ZIP>
<Email> chinagarden@</Email>
</CONTACT>
<CONTACT>
. . .
</CONTACT>
</Details>
XML 声明- 定义 XML 版本
包含数据的 XML 标签
6
ACCP
XML 的优势
Web 服务器
DB 访问,集成
业务规则
数据库
HTML 视
图 #1
HTML
视图 #2 从基于 XML 的数
据创建的多个视图
通过 HTTP 交换 XMLDesktop桌面
中间层
存储
三层体系结构
XML 的优势
信息共享
单一应用使用
内容交付
数据重用
数据和表示分离
可扩展性
语义信息
其他优势
演示:XML 的优势
XML 技术优势商业优势
7
ACCP
XML 应用范围
对于 Internet 和大型企业 Intranet 环境十分有价值
通过灵活、开放和基于标准的格式,提供了协同工作能力
可以更快地构建应用
易于维护
可以通过不同的样式表提供多个结构化数据的视图
使用 XML 的示例:
SABRE
化学标记语言
8
ACCP
文档结构
由一组使用唯一名称标识的实体组成
以根或文档实体开始<?xml version ="“ encoding=“GB2312”?>
<! DOCTYPE letter SYSTEM ""
[
<! ENTITY myname “成龙">
]>
<letter pri = “重要">
<to>Tom</to>
<message> 您好</message>
</letter>
XML 声明
文档类型定义
实体定义
文档元素
9
ACCP
创建 XML 文档
构建 XML 文档的步骤:
陈述 XML 声明
创建根元素
创建 XML 代码
演示:创建 XML 文档
管
理
元
素
的
规
则
至少需要一个元素
XML 标签区分大小写
应正确使用结束标签
正确嵌套标签
应使用合法标签
标记名称的长度
应定义有效的属性
应验证文档
10
ACCP
数据和标记的比较
XML 文档由数据以及描述该数据的标记组成
<NAME> 成龙 </NAME>
标记字符
数据
11
ACCP
处理
注释的语法如下:
<! --在此处写注释-->
使用注释时要遵循的规则
注释的文本中不应包含“-”或“—”
注释不应放在标签里面
注释不能放在实体声明中,也不能放在 XML 声明之前
注释可用于注释标签集
注释不能嵌套
处理说明
<?xml:stylesheet type= "text/xsl"?>
应用程序的名称 说明信息
12
ACCP
标签间的字符数据的分类
开始标签和结束标签之间的文本被定义为“字符数据”
字符数据可以是“<”以外的任何合法 (Unicode) 字符
字符数据的分类
PCDATA CDATA
将由解析器
解析
不会由解析器
解析
<SAMPLE>
<![CDATA[<DOCUMENT>
<NAME>JACKIE CHAN成龙</NAME>
<EMAIL>jackie@</EMAIL>
</DOCUMENT>]]>
</SAMPLE> 不允许在 CDATA 块之内使用字符串
“]]>”,因为它表示 CDATA 块的结束
13
ACCP
实体 2-1
XML 的存储单元
在文档中使用,避免重复键入大段文本
部分预先定义实体表示字符
实体名称 字符
< <
> >
& &
" “
' ‘
实体分类
一般实体 参数实体
存在于声明它们的文档中
指文档以外
的存储单元
系统 公共
一般实体的示例:
<!ENTITY ADDRESS “要以实体表示的文本">
可以在 XML 文档中的任何
位置出现的实体
一般实体
内部 外部
标识符
14
ACCP
实体 2-2
当实体和实体引用都只需在 DTD 中出现时,则使
用参数实体
参数实体,无论是内部还是外部,都只在 DTD 中
使用
它包括“%”说明符
参数实体的示例:
<! ENTITY % ADDRESS “要以实体表示的文本">
15
ACCP
声明
<?xml version=""?>
<!DOCTYPE myDoc [
...declare the entities here在此处声明实体....
<myDoc>
...body of the document文档正文....
</myDoc>
DOCTYPE Declaration声明
演示:示例 2
<?xml version=""?>
<!DOCTYPE CUSTOMERS[
<!ENTITY FIRSTFLOOR “唐宁街 15 号 1 楼">
<!ENTITY SECONDFLOOR “唐宁街 15 号 2 楼">
]>
<CUSTOMERS>
<CUSTOMER>
<NAME> 成龙 </NAME>
<ADDRESS> &FIRSTFLOOR; </ADDRESS>
<PHONE>5715746</PHONE>
</CUSTOMER>
<CUSTOMER>
<NAME>阿诺德</NAME>
<ADDRESS>&SECONDFLOOR;</ADDRESS>
<PHONE>6865863</PHONE>
</CUSTOMER>
</CUSTOMERS>
声明
DOCTYPE 声明
一般实体根节点
节点的详细信息
16
ACCP
格式良好和有效的 XML 文档
被视为格式良好的 XML 文档的条件:
该文档满足最低要求集
如果文档不满足任何一个良好格式的要求,则将
发生致命错误
有效的 XML 文档是符合 Document Type
Definition(文档类型类型,DTD)的规则的格式
良好的 XML 文档
解析器
---------
-
---------
-
---------
-
---------
-
---------
-
由解析器解析的
XML 文档
在浏览器中查看已
解析的文档
<?xml
version=“”?>
<nxn> </nxn>
带有 XML 文档的
编辑器
解析器类型
非验证解析器 验证解析器
检查文档格式是否良好 使用 DTD 检查文档的有效性
17
ACCP
使用 DTD生成 XML 文档
DTD 以简单文本文件的形式出现,可以存储在独
立的文件中,也可以嵌入 XML 文件
引用 DTD 的 XML 文档将包含 <!DOCTYPE> 声
明
验证接收到的数据是否有效 用于验证自己的数据定义 XML 文档的合法构建块使用一系列合法元素来定义文档结构
18
ACCP
<!DOCTYPE dtd-name
[
<!ELEMENT element-name (element-content type)>
<!ATTLIST element-name attribute-name attribute-type
default-value>
]
>
声明一个元素
<!ELEMENT element-name (EMPTY)>
DTD 的结构 2-1
在 XML 中,元素是文档的一个逻辑组件
属性表示一个元素的特征
DTD 的一般结构:
声明 Empty 元素
<!ELEMENT element-name (#CDATA)>
带有数据的元素<!ELEMENT element-name (#PCDATA)><!ELEMENT element-name (Any)>
<!ELEMENT element-name (child-element-name)>
带有子元素的元素
<!ELEMENT element-name (child-name+)>
说明同一元素至少
出现一次
<!ELEMENT element-name (child-name*)>
声明同一元素出现
零次或多次
<!ELEMENT element-name (child-name?)>
声明同一元素出现
零次或一次19
ACCP
DTD 的结构 2-2
声明混合内容
<!ELEMENT note (to+, from, header, message*,#PCDATA)>
组可以是:
序列
<!ELEMENT A (B)>
<!ELEMENT A (B, C)>
<!ELEMENT A (B, (C | D), E>
选择子元素和/或子组
<!ELEMENT A (B | C)>
<!ELEMENT A (B | C | (D, E))>
演示:示例 3
<?xml version = "“ encoding=“GB2312”?>
<!DOCTYPE book SYSTEM "">
<book>
<details>
<name>xml 使用详解</name>
<author>成龙来自&country; </author>
<publication>Mac &rights;</publication>
<price>&pricenotation;50</price>
</details>
<details>
<name>xml 揭密</name>
<author>Raghu 来自&count;</author>
<publication>Mac &rights;</publication>
<price>&pricenotation;45</price>
</details>
</book>
DTD 声明<?xml version = “”? Encoding=“GB2312”>
<!ELEMENT book (details)>
<!ELEMENT details ( name, author, publication, price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT publication (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ENTITY country “中国">
<!ENTITY count “印度">
<!ENTITY rights “版权所有">
<!ENTITY pricenotation "$">
Book 元素带有子元素 details
details 元素带有子元素 name、
author、publication 和 price
在 XML 代码中声明的各种实体
20
ACCP
属性声明
使用 0 宽度和类型 CDATA 将 rectangle 元素定
义为空元素
<!ELEMENT rectangle EMPTY>
<!ATTLIST rectangle width CDATA "0">
默认属性值
<!ATTLIST element-name attribute-name CDATA "default-value"><!ATTLIST element-name attribute-name attribute-type #IMPLIED>
隐含的属性值
<!ATTLIST element-name attribute_name attribute-type #REQUIRED>
必需的属性值
<!ATTLIST element-name attribute-name attribute-type #FIXED "value">
固定属性值
<!ATTLIST element-name attribute-name (eval|eval|..) default-value>
枚举属性值
ID 和 IDREF 属性类型
<!ATTLIST Topic Topicid ID #REQUIRED>
. . .
<Topic Topicid= "Topic4">
此 Topic 为 XML
</Topic>
元素提供 Topic 元素的 ID
<!ATTLIST Topic Topicid ID #REQUIRED>
<!ATTLIST Topic Prev IDREF #IMPLIED>
<!ATTLIST Topic Next IDREF #IMPLIED>
...
Prev 和 Next 属性指向另一
个元素的 ID
IDREFS 属性类型
. . .
<!ATTLIST Topic Topicid ID #REQUIRED>
<!ATTLIST Topic Prev IDREF #IMPLIED>
<!ATTLIST Topic Next IDREF #IMPLIED>
<!ATTLIST Topic Xrefs IDREFS #IMPLIED>
. . .
该属性将多个元素 ID 作为它的值
ENTITY and ENTITIES
ENTITY 和 ENTITIES
<!ATTLIST A a ENTITY #IMPLIED>
<!ATTLIST A b ENTITIES #IMPLIED>
这些属性指向以未解析实体形
式存在的外部数据
NMTOKEN、NMTOKENS
<!ATTLIST Data Authorised_Users NMTOKENS #IMPLIED>
<Data SECURITY= “ON” Authorised_Users= "Tom">
. . .
</Data>
. . . 用于指定任何有效的一个或多
个 XML 名称
21
ACCP
DTD 示例 2-1
DTD
内部 外部
在 XML 文档的 XML
声明后直接写入
存在于文档
内容之外
演示:示例 4
<?xml version=""?>
<!DOCTYPE movies
[
<!ELEMENT movies (movie+)>
<!ELEMENT movie (title,actor+,rating)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT actor (#PCDATA)>
<!ELEMENT rating (#PCDATA)>
<!ATTLIST movie type CDATA #IMPLIED>
]>
….
内部文档类型定义
22
ACCP
DTD 示例 2-2
演示:示例 5
<?xml version="" encoding="gb2312" ?>
<!DOCTYPE movies SYSTEM "">
<movies>
<movie type="冒险片">
<title> 空中监狱 </title>
<actor> 尼古拉斯 凯奇</actor>
<rating>家长指引</rating>
</movie>
<movie type="恐怖片">
<title> 幽灵 </title>
<actor> 黛米 摩尔</actor>
<actor> 帕特里克 斯韦兹</actor>
<rating>家长指引</rating>
</movie>
</movies>
外部文档类型定义
外部 DTD 文件
<?xml version=""?>
<!ELEMENT movies (movie+)>
<!ELEMENT movie (title,actor+,rating)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT actor (#PCDATA)>
<!ELEMENT rating (#PCDATA)>
<!ATTLIST movie type CDATA #IMPLIED>
23
ACCP
DTD 中的实体声明
内部实体的内容在 XML 文档中出现
<!ENTITY entity-name "entity-value">
外部实体指内容在 XML 文档之外的实体
SYSTEM 关键字用于指定所有在文档之外的实体
<!ENTITY entity-name SYSTEM "URI/URL">
24
ACCP
DTD 中的参数实体2-1
<?xml version=""
encoding="gb2312" ?>
<!DOCTYPE roster SYSTEM
"" [
<!ENTITY % p "teacher">
]>
<roster>
<teacher ID="t101">
<name>张老师</name>
<sex>女</sex>
<birthday></birthday>
<skill>Java</skill>
</teacher>
</roster>
老师花名册xml文
件,在内部dtd中
赋值参数实体p为
teacher.
<?xml version=""
encoding="gb2312" ?>
<!DOCTYPE roster SYSTEM
"" [
<!ENTITY % p "student">
]>
<roster>
<student ID="s101">
<name>李华</name>
<sex>男</sex>
<birthday></birthday>
<score>98</score>
<skill>Java</skill>
</student>
</roster>
学生花名册xml
文件,在内部dtd
中赋值参数实体
p为student.
用一个dtd验证两个不同应用的xml文件
25
ACCP
<?xml version="" encoding="gb2312" ?>
<!ENTITY % p "a">
<!ELEMENT roster ((%p;)+)>
<!ELEMENT %p; (name,sex,birthday,score?,skill+)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT birthday (#PCDATA)>
<!ELEMENT score (#PCDATA)>
<!ELEMENT skill (#PCDATA)>
<!ATTLIST %p; ID ID #REQUIRED>
DTD 中的参数实体2-2
带实体参数的dtd文件
在验证时,用xml文件
内部的dtd参数实体
值来覆盖dtd文件本
身的参数实体值
26
ACCP
XML 命名空间 2-1
在 XML 文档中可以用作元素或属性名称的名称集
合
命名空间使浏览器可以执行以下操作:
组合来自不同源的文档,并有助于识别元素或属性的
源
访问 DTD 或用于验证文档的元素和属性的其他描述
Uniform Resource Identifier(统一资源标识符,
URI)识别 XML 的命名空间
Uniform Resource Name(统一资源名称,URN)是
标识 Internet 资源的全球唯一编号
Uniform Resource Locator (统一资源定位符,
URL)包含对 Web 上的某个文档或 HTML 页面的引用
命名空间
的必要性
有助于标准化元素和属性,
并为它们加上唯一的标志
确保元素名称中没有冲突,
并阐明了它们的来源
27
ACCP
XML 命名空间 2-2
演示:示例 6
命名空间声明
28
ACCP
属性和命名空间
除非带有前缀,否则属性属于它们的元素的命名
空间
. . .
<ins:batch ins:type= “thirdbatch”>第三批次</ins:batch>
<ins:batch type= “firstbatch”>第一批次</ins:batch>
<ins:batch>午班批次</ins:batch>
</ins:batch-list>
. . .
Aptech 的类元素使用了茶业领域的 tea:type 属性
可以包括两个名称相同但属于不同命名空间的属性。
<batch type= “firstbatch” tea:type= “firstbatch”> 第一批茶</batch>
29
ACCP
命名空间应用程序
演示:示例 7
命名空间的声明
允许验证和处理关于这两批茶的信息
30
ACCP
总结 2-1
XML 是可扩展的,即可以定义自己的一组标签,
并使其他的人或程序能够理解这些标签
DTD 指定了 XML 文档的语法结构,因此,使
XML 解析器能够理解和解释文档的内容
DOCTYPE标识加SYSTEM关键字用于在xml文件
中引用dtd文件
DTD 分为两类:外部 DTD和内部 DTD
31
ACCP
总结 2-2
实体使我们能够为大段文本创建一个别名,这样,
在文档中,我们只需引用此别名就可以引用相同
的一段文本
命名空间使我们能够组合来自不同源的文档,并
可以识别元素或属性的源
32