1 . XML 与 DTD —— XML 入门知识
1.1 为什么要学习xml
XML 发展的非常迅速,这实在令人感到惊奇,有很多的软件开发商都采用了 XML 标准。我们相信,在未来的 Web 开发中, XML 将和 HTML 一样受到重视,他们都是 Web 技术的基础。就连无线标记语言 (WML , The Wireless Markup Language ), [ 用于标识运行于手持设备上(比如:手机)的 Internet 程序 ] , WML 都采用了 XML 的标准。 XML 将成为最普遍的数据操纵和数据传输的工具。
1.2 什么是XML
XML 是 EXtensible Markup Language 的缩写。
XML 使用文档类型定义( DTD )或者模式( Schema )来描述数据 。
XML 使用 DTD 或者 Schema 后就是自描述的语言 。
1.3 XML 和HTML的主要区别
XML 是被设计用来描述数据的,重点是:什么是数据,如何存放数据。
HTML 是被设计用来显示数据的,重点是:显示数据以及如何显示数据更好上面。
他们在格式上也存在巨大区别,相对讲 xml 格式要求严格:
a. 所有的 XML 文档必须有一个结束标记
开始标签和结束标签必须配套,也就是必须写成 <p></p> 或者 <high></ high > 。
b. 空元素必须关闭
不允许出现单标签,但标签必须关闭,关闭使用 <p/> 或者 <high/> 。
c. 所有标签都区分大小写
d. 所有标签都必须合理嵌套
层次合理比如 <p><high></high></p> 这样就合理。
e. 所有标签的属性值必须使用双引号 (””) 或者但引号括起来
f. xml 只能有一个根元素
1.4 XML 文档组成
xml 文档在逻辑上主要有以下 5 个部分组成:
1.xml 声明
xml 文档总是以一个 xml 声明开始,其中指明所用的 xml 版本、文档的编码、文档的独立性信息。格式为:
<?xml version=”<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="1" unitname="”">1.0”</chmetcnv> encoding=”gb<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2312" unitname="”">2312”</chmetcnv> standalone=”yes”?>
其中需要注意的是在问号左右两边不能有空格。
还有其默认编码是 utf8
yes 表示文档是独立文档,即不依赖于外部文档。
2. 文档类型声明
我们可以用 DTD ( Document Type Definition 文档类型定义)来规范 xml 文档中元素和属性的规则及相互关系。
XML 从 SGML ( Standard Generalized Markup Language,SGML 标准通用标记语言)继承了用于定义语法规则的 DTD 机制。几乎所有的 xml 应用都是使用 DTD 来定义的。 DTD 文件也是一个文本文件,通常用 ”.dtd” 作为其扩展名。
通过文档类型声明,指出 xml 文档所用的 DTD 。文档类型声明有两种形式,一种是声明 DTD 在一个外部文件中,例如:
<!DOCTYPE greeting SYSTEM “hello.dtd”>
另 1 种是直接在 xml 给出 dtd ,例如:
<!DOCTYPE greeting [
<!ELEMENT greeting (#PCDATA)>
]>
3. 元素
XML 元素命名必须遵守下面的规则:
元素的名字可以包含子母,数字和其他字符。
元素的名字不能以数字或者标点符号开头。
元素的名字不能以 XML( 或者 xml , Xml,xMl...) 开头。
元素的名字不能包含空格。
尽量不用冒号,冒号在名称空间中用于分隔名称空间前缀和本地部分。
有 2 个细节:
1. CDATA 段
CDATA 段中包含的都是纯字符数据,在字符数据可以出现的任何地方都可以使用 CDATA 段。 CDATA 段主要用于需要将整个文本解释为字符数据而不是标记的情况下。
CDATA 段以字符串 ”<![CDATA[ ” 开始, ”]]>” 结束。
2. 字符引用和预定义实体引用
xml 有 5 个特殊字符,小于 < 、大于 > 、双引号 ” 、单引号 ’ 、和号 & 。在数据中需要使用这几个字符时候可以用通用字符引用和预定义引用:
请参考:表 1-1 特殊字符的字符引用和预定义实体引用
字符 | 字符引用 10 进制 | 字符引用 16 进制 | 预定义实体引用 |
<
| < | <chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="3" unitname="C">3c</chmetcnv>; | < |
>
| > | > | > |
“ | " | " | " |
‘ | ' | ' | ' |
& | & | & | & |
4. 注释
在 XML 中注释的语法基本上和 HTML 中的一样。 <!-- 这是一个注释 --> 。注释不要出现在标记中。
5. 处理指令
处理指令允许文档中包含由应用程序来处理的指令。处理指令的语法和 xml 声明类似,以 < ?开始,以 ?> 结束。一个常见的样式表单的处理指令如下所示:
<?xml–stylesheet href=”hello.css” type=”text/css”?>
1.5 关于DTD
符合语法的 XML 文档称为结构良好的 XML 文档。
通过 DTD 验证的 XML 文档称为有效的 XML 文档。
XML Schema(XML 模式 ) 是基于 XML 的 DTD 的替代品。
通过 DTD ,你的每一个 XML 文件都自身携带有关它自身格式的说明。
通过 DTD ,不同群体的人们可以对使用普通的 DTD 来交换数据的方法达成一致。
含有 DTD 的实例 XML 文件:
#PCDATA 指明必须是字符数据。
2 <! DOCTYPE note [
3 <!ELEMENT note (to,from,heading,body) >
4 <! ELEMENT to (#PCDATA) >
5 <! ELEMENT from (#PCDATA) >
6 <! ELEMENT heading (#PCDATA) >
7 <! ELEMENT body (#PCDATA) >
8 ]>
9 < note >
10 < to > Tove </ to >
11 < from > Jani </ from >
12 < heading > Reminder </ heading >
13 < body > Don't forget me this weekend </ body >
14 </ note >
15
如果 DTD 对于你的 XML 文件是外部而言,那么它会在含有以下句法构造的 DOCTYPE 声明中预先包装进去。如:
2 <! DOCTYPE note SYSTEM "note.dtd" >
3 < note >
4 < to > Tove </ to >
5 < from > Jani </ from >
6 < heading > Reminder </ heading >
7 < body > Don't forget me this weekend! </ body >
8 </ note >
下面是一份包含了 DTD 的 "note.dtd" 文件副本:
2 <! ELEMENT to (#PCDATA) >
3 <! ELEMENT from (#PCDATA) >
4 <! ELEMENT heading (#PCDATA) >
5 <! ELEMENT body (#PCDATA) >
1.6 XSL
XSL (全称是:可扩展的样式单语言,the eXtensible Stylesheet Language)比CSS样式单功能要强大的多。XSL的一个主要的用途就是将XML文档转换成HTML格式的文件,然后再交付给浏览器,由浏览器显示转换的结果。是XML的可扩展样式单语言。
1.7 XML 数据岛
在 HTML 页面中嵌入 XML 数据
使用非官方标准的 <xml> 标记可以将 XML 数据嵌入到 HTML 页面中。
XML 数据可以象下面的例子那样嵌入 HTML 页面 :
2 < note >
3 < to > Tove </ to >
4 < from > Jani </ from >
5 < heading > Reminder </ heading >
6 < body > Don't forget me this weekend! </ body >
7 </ note >
8 </ xml >
或者象下面这样嵌入外部单独的 XML 文件 :
<xml id="note" src="note.xml">
</xml>
注意那个 <xml> 标记是一个 HTML 元素,而不是一个 XML 元素。
数据绑定
XML 数据岛可以绑定到 HTML 元素上(比如表格)。
在下面的例子中,一个 XML 数据岛( ID=cdcat )被从外部 XML 文档载入。一个 HTML 的表格绑定到此数据岛上。 HTML 表格内部的 span 元素使用 datafld 属性和 XML 文档相应的 XML 元素相互绑定。
2 < body >
3 < xml id ="cdcat" src ="cd_catalog.xml" ></ xml >
4 < table border ="1" datasrc ="#cdcat" >
5 < tr >
6 < td >< span datafld ="ARTIST" ></ span ></ td >
7 < td >< span datafld ="TITLE" ></ span ></ td >
8 </ tr >
9 </ table >
10 </ body >
11 </ html >
12
写到这里想起原来看 js 的一个应用实例,以数据岛实现了无刷新分页程序。
代码如下:
2
3 < xml id = " users " >
4
5 < userGroup >
6
7 < user >
8
9 < userid > user hcm </ userid >
10
11 < name > name hechangmin </ name >
12
13 </ user >
14
15 < user >
16
17 < userid > user 2 </ userid >
18
19 < name > name 2 </ name >
20
21 </ user >
22
23 < user >
24
25 < userid > user 3 </ userid >
26
27 < name > name 3 </ name >
28
29 </ user >
30
31 < user >
32
33 < userid > user 4 </ userid >
34
35 < name > name 4 </ name >
36
37 </ user >
38
39 < user >
40
41 < userid > user 5 </ userid >
42
43 < name > name 5 </ name >
44
45 </ user >
46
47 < user >
48
49 < userid > user 6 </ userid >
50
51 < name > name 6 </ name >
52
53 </ user >
54
55 < user >
56
57 < userid > user 7 </ userid >
58
59 < name > name 7 </ name >
60
61 </ user >
62
63 < user >
64
65 < userid > user 8 </ userid >
66
67 < name > name 8 </ name >
68
69 </ user >
70
71 < user >
72
73 < userid > user 9 </ userid >
74
75 < name > name 9 </ name >
76
77 </ user >