一、概述
- XML是一种通用的数据交换格式
- 许多系统配置文件(记录应用程序的配置信息)
- JSP文档逐步向XML语法格式过渡
- 与HTML
- ** 与数据库**
-
XML文档的组成单元
XML声明(declaration)
DOCTYPE声明语句
处理指令(processing instruction)
元素(element)
注释(comment)
CDATA区
二、基本语法
2.1 文档声明
必须的,第一行
前后'?xml'与'<'间不能有空格,目前只有版本1.0,但必须写
<?xml version="1.0" ?>
encoding属性说明文档的字符编码,如果没有则默认UTF-8(UTF-16),GB2312是国标的,实际保存和此处要统一,不然会报错
<?xml version="1.0" encoding="GB2312" ?>
standalone属性说明文档是否独立
<?xml version="1.0" encoding="GB2312" standalone="yes" ?>
2.2 元素定义
使用'<>'和'</>'定义,一个元素可以嵌套多个元素,第一个元素为根元素,只能有一个,
空元素如<img />,标签之间不允许交叉
规范,区分大小写,不能以数字下划线开头,不能含有xml组合字符,不能包含‘:’
建议,不要用点、下划线,尽量简短,大小写统一,使用中文需谨慎
2.3 属性定义
属性值必须用双引号或单引号,可以改写成子元素描述,遵循元素相同的命名规范
2.4 注释
和HTML完全一样
xml声明之前不能有注释
注释符号不能相互包含
注释同样要注意编码
2.5 空格和换行处理
标签以外的所有空格和换行,都要交给下游程序处理
2.6 CDATA区
“<![CDATA[” 开始,“ ]]>”结束
<script type="text/javascript">
<![CDATA[ for(var x=0;x<3;x++)
{
alert(x);
}
]]>
</script>
2.7 特殊字符
特殊字符 | 替代符号 |
---|---|
& | & |
< | < |
> | > |
" | " |
' | ' |
2.8 处理指令
简称PI,用来为处理XML文档的应用程序提供指示信息
处理指令以“<?”开头,以"?>"结尾,XMl声明语句就是常见的处理指令
XML分析器会把处理指令原封不动的传给应用程序,由应用程序来解释这个指令
例如:book.xml
<?xml version="1.0" encoding="GB2312" ?>
<?xml-stylesheet type="text/css" href="book.css" ?>
<bookstore>
<book>
<bookname>Java教程</bookname>
<author>李华</author>
<price>99元</price>
</book>
</bookstore>
book.css
bookname{display:block; color:red}
author{display:block; font-style:italic}
price{display:block; color:olive}
三、XML约束模式
3.1 格式良好的XML
解析器Parser
3.2 XML的约束模式
虽然解析不会出错,但不符合真实的逻辑,所以要有约束模式
定义文档中允许出现的元素名、属性、内容以及嵌套关系和出现顺序
定义Xml文档的词汇表,尊徐的结构
xml文档看做数据库中的表,则约束模式相当于表结构的定义
3.3 XML的约束语言
定义另一种语言的语言为元语言,单独的文件,模式文档,xml文档实例文档
约束模式语言,XML DTD、XML Schema、XDR、SOX等,前两种最广泛
3.4 有效的XML
遵守XML基本的语法规则,而且符合指定的约束模式,称为Valid XML
解析器程序检查是否符合约束模式称为校验,因此非校验类解析器和校验类解析器,IE是非校验类解析器
3.5 DTD
Document Type Definition,早期的约束模式语言
- DTD初步认识
包含元素,元素之间关系,属性、实体以及符号的定义
book.dtd,可以使用正则表达式,使用UTF-8,unicod编码
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
PCDATA代表普通的字符串,(书名,作者,售价)按这个顺序, (书+)出现多次
-
在xml文档中引入外部的DTD
DOCTYPE文档类型定义语句,紧跟xml文档声明语句后面,两种格式
自定义:SYSTEM组织内部,或自定义
<!DOCTYPE 文档类型名称 SYSTEM "DTD文件的的URL">
公共的:PUBLIC权威机构公开的文件
<!DOCTYPE 文档类型名称 PUBLIC “DTD名称” "DTD文件的的URL">
例如:
<!DOCTYPE 书架 SYSTEM "book.dtd">
<!DOCTYPE web-app PUBLIC “-//Sun Miorosystems, Inc.//DTD Web Application 2.3//EN” "http://java.sun.com/dtd/web-app_2.3.dtd">
“-”表示未被改进的非ISO标准的DTD,“+”表示被改进的非ISO标准的DTD
例如book.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
.....
</书架>
standalone即使为no,只要DOCTYPE声明,也会去校验
- xml文档中直接嵌入DTD
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 根元素名 [
DTD定义语句
...
]>
四、相关定义
4.1 元素定义
-
语法格式:
<!ELEMENT 元素名称 使用规则> -
举例:
<!ELEMENT 书架 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)> -
使用规则:
(#PCDATA) 是parsed character data简写,表示可以是普通字符串
(书名,作者,售价)
(书名,#PCDATA)
EMPTY 内容为空,如<HR />
ANY 元素内容任何形式
PS:
a、DTD注释和XML文档一样
b、每条元素定义语句顺序随意
c、具有不同用途的元素不能使用相同的元素名
d、一个元素的各个组成成分之间可以有各种关系
<!ELEMENT MYFILE (TITLE AUTHOR EMAIL)> 三个子元素顺序任意
<!ELEMENT MYFILE (TITLE, AUTHOR ,EMAIL)> 三个有序的子元素
<!ELEMENT MYFILE (TITLE |AUTHOR| EMAIL)> 三个中的任意一个
e、在元素的使用规则中可以定义子元素出现的次数
(书+)一次或者多次,(书?)一次或者不出现,(书)不出现或者一次多次,(书)只能一次
f、一对圆括号可用于将括在其中的内容组合成一个可统一操作的分组,分组中可以嵌套更小的分组
<!ELEMENT MYFILE ((TITLE, AUTHOR?,EMAIL)*|COMMENT)>
4.2 属性定义
-
语法格式
<!ATTLIST 元素名
属性名1 属性类型 设置说明
属性名2 属性类型 设置说明
...
-
举例
<!ATTLIST 商品
类别 CDATA #REQUIRED
颜色 CDATA #IMPLIED
-
设置说明
REQUIRED 必须设置
IMPLIED 可有可无
FIXED 设为固定值,如:CDATA #FIXED “页面作者”
直接使用默认值 如:CDATA “上网” -
属性类型
CDATA 普通文本字符串,特殊字符用转义字符串
ENUMERATED 枚举类型
ID用于标示唯一的,相当于KEY
IDREF、IDERFS、NMTOKEN、NMTOKENS、NOTATION、ENTITY、ENTITYS
4.3 实体定义
- 作用 为一段文本内容创建一个别名,,在XML中多次引用这个别名,解析器会自动把别名转为对应的文本
- 定义 DTD中用<!ENTITY...>定义,两种类型:引用实体和参数实体
引用实体:DTD中定义,xml中引用
<!ENTITY 实体名称 “实体内容”>
<!ENTITY 实体名称 SYSTEM "外部XML文档的URL">
引用方式:&实体名称;
参数实体:DTD中定义,DTD中引用
<!ENTITY % 实体名称 “实体内容”>
引用方式:&实体名称;
五、XML Schema
5.1 XML Schema与DTD的比较
和DTD一样,定义xml文档结构,比DTD更有发展前途。
- 自身符合xml语法结构
- DOM 、SAX等XML API更容易解析
- 采用和xml文档同样的合法性验证机制
- 对名称空间更好的支持
5.比DTD支持更多的数据类型,并支持用户自定义数据类型 - 定义约束的能力更强大
- 基本上满足了关系模式在数据描述上的需要
缺点:不能像DTD定义实体,很多细节比DTD更复杂