XML基础 XML扩展 XML验证:DTD
Xml详细介绍
XML的设计目标是描述数据并集中与数据的内容。
XML标记可以自定义。
XML具有错误验证机制
XML区分大小写
XML标记的属性必须用“”或者‘’括起来
XML的强项
轻松表达多层结构的数据
可自由扩展
主要用途:
数据描述,数据交换
优点:平台无关,语言无关
软件系统之间通过标准的XML API读写XML格式的文档,从而完成数据交换的任务。
XML细节
标记
在< >中的称为开始标记
在</ >中的称为结束标记
不包含元素的标记称为空标 记如:<eric age=“80”/>
元素
开始标记与结束标记间的内容称为元素。
属性
下面的这个是属性:
<eric age=“80”>
……
</eric>
文本
<eric age=“80”>
Eric真是个好人啊!
</eric>
总体例子
XML声明
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
大多数XML文档以XML声明作为开始,它向解析器提供了关于文档的基本信息。
建议使用XML声明,但它不是必需的。如果有的话,那么它一定是文档的第一行内容。
为支持中文可以用utf-8,或者gb2312
XML声明
声明最多可以包含三个名称-值对(许多人称它们为属性,尽管在技术上它们并不是)。
1)version 是使用的XML 版本:1.0,1.1
2)encoding 是该文档所使用的字符集。
该声明中引用的ISO-8859-1 字符集包括大多数西欧语言用到的所有字符。
如没有指定encoding,XML 解析器会假定字符在UTF-8 字符集中,这是一个几乎支持世界上所有语言的字符和象形文字的Unicode 标准。
3)standalone(可以是yes 或no)定义了是否可以在不读取任何其它文件的情况下处理该文档。
如果XML文档没有引用任何其它文件,则可以指定standalone="yes"。
如果XML文档引用其它描述该文档可以包含什么的文件,
则可以指定standalone=“no”。缺省值为standalone="no"
注释
注释可以出现在文档的任何位置;它们甚至可以出现在根元素的前面或后面。
注释以<!--开始,以--> 结束。
注释不能在结束部分以外包含双连字符(--);除此之外,注释可以包含任何内容。
注释内的任何标记都被忽略
不要把注释放到某个节点的部分
实体
XML 规范预定义了五个实体。
< 代表小于符号 <
> 代表大于符号 >
" 代表一个双引号 ”
' 代表一个单引号(或撇号)‘
& 代表一个“与”符号。&
引用实体时一定是&开头,和;结尾
当然我们也可以进行自定义实体,
可以用浏览器或者eclips(需要插件)进行测试是否写对了
自定义实体(放在XML的声明后面和根结点前面,比如下例中为message)
CDATA
引用无格式内容(也就是说此时XML解释器对此段内容不做任何解释。因此也不要加任何实体符号)
语法规则
除空标记外,标签必须成对。
一份文档必须包含一个根元素。
所有的开始标签和结束标签必须匹配。
空标签必须以“/>”结束。
标签必须嵌套正确。
元素名称大小写敏感。
所有的属性值必须位于单引号或双引号中。
每一个元素的属性不允许出现超过一次。
XML工具
MyEclips的插件管理,不过有个bug,提示错误但是实际上没有错误,需要关闭再打开,看是否有错误。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 以下是一个自定义实体 -->
<!DOCTYPE user
[
<!ENTITY my "hello">
<!ENTITY you "you hello">
]>
<user>
<head>Dear mother &my;
</head>
<body> test 2 < 3
</body>
<te>
<!-- 这是一个测试程序 -->
testDemo is a textlist
</te>
<!-- 属性值必须用引用括起来 -->
<city name ="guangzhou"></city>
<!-- 引用无格式内容引用无格式内容 -->
<![CDATA[
public static void main(String [] args){
System.out.println("this is a demo");
}
]]>
<fi> &you;</fi>
</user>
对应的DTD
<!ELEMENT user (head,body,te,city,fi)>
<!ELEMENT head (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ELEMENT te (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT fi (#PCDATA)>
<!ATTLIST city name CDATA #REQUIRED>
XML验证
扩展:得到自己的专用语言
验证:通过对扩展语言规范的学习,对一个特定的xml文件按此规范进行解释识别,看此xml是否正确。
DTD验证
文档类型定义(Document Type Definition)
DTD定义了XML文档内容的结构,保证XML以一致的格式存储数据。
精确的定义词汇表,对XML的内容施加约束。
XML允许用户为应用程序创建自己的DTD。
可以依据DTD来检查XML文档。这种检查过程被称为验证。
与DTD相符合的XML文档被认为是有效的文档。
通过DTD定义的词汇表以及文档语法,XML解析器可以检查XML文档内容的有效性。
DTD四种标记声明
元素(ELEMENT)
XML元素类型声明
<!ELEMENT elementName(contentModel)>
元素的内容模式
元素的内容通过内容模式来描述。DTD 内容模式的种类有:
EMPTY
#PCDATA
ANY
Elements
Mixed
EMPTY
元素不能包含任何数据,但可以有属性(前提是必须声明其属性)。
不能有子元素。
不能有文本数据(包括空白)。
#PCDATA
PCDATA
Parsed Character Data.
The text that will be parsed bya parser .
规定元素只包含已析的字符数据,而不包含任何类型的子元素的内容类型
ANY
元素可以包含任何类型的数据。子元素(必须在DTD中有定义)文本数据(包括空白)
Elements
元素由内容模式部件指定。
Mixed
所谓混合模式是指子元素中既可有文本数据又可有下级子元素。
<!ELEMENT review (#PCDATA|name)*> 此时表示同时出现
Any表示只能出现一个,而mixed可以出现多种类型
属性(ATTLIST)
特定元素类型可设置的属性&属性的允许值声明
在DTD中,可用如下语法声明元素的属性列表:
<!ATTLIST elementName attributeName attributeType >
attributeType
attributeDefault
实体(ENTITY)
可重用的内容声明
符号(NOTATION)
不要解析的外部内容的格式声明。
XML解析 与JAVA
XML与Java
XML中内容的一般存放在属性和文本之间。我们可以根据DTD中信息进行定位,读取我们想用的信息。
XML处理模式
文档对象模式
DOM:比较吃内存,一般够用
基于事件处理模式
SAX:省内存
DOM特点
以树型结构访问XML文档。
一棵DOM树包含全部元素节点和文本节点。
可以前后遍历树中的每一个节点。
整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能。
将整个文档调入内存(包括无用的节点),浪费时间和空间。
一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)情况下使用。
Xml详细介绍
XML的设计目标是描述数据并集中与数据的内容。
XML标记可以自定义。
XML具有错误验证机制
XML区分大小写
XML标记的属性必须用“”或者‘’括起来
XML的强项
轻松表达多层结构的数据
可自由扩展
主要用途:
数据描述,数据交换
优点:平台无关,语言无关
软件系统之间通过标准的XML API读写XML格式的文档,从而完成数据交换的任务。
XML细节
标记
在< >中的称为开始标记
在</ >中的称为结束标记
不包含元素的标记称为空标 记如:<eric age=“80”/>
元素
开始标记与结束标记间的内容称为元素。
属性
下面的这个是属性:
<eric age=“80”>
……
</eric>
文本
<eric age=“80”>
Eric真是个好人啊!
</eric>
总体例子
XML声明
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
大多数XML文档以XML声明作为开始,它向解析器提供了关于文档的基本信息。
建议使用XML声明,但它不是必需的。如果有的话,那么它一定是文档的第一行内容。
为支持中文可以用utf-8,或者gb2312
XML声明
声明最多可以包含三个名称-值对(许多人称它们为属性,尽管在技术上它们并不是)。
1)version 是使用的XML 版本:1.0,1.1
2)encoding 是该文档所使用的字符集。
该声明中引用的ISO-8859-1 字符集包括大多数西欧语言用到的所有字符。
如没有指定encoding,XML 解析器会假定字符在UTF-8 字符集中,这是一个几乎支持世界上所有语言的字符和象形文字的Unicode 标准。
3)standalone(可以是yes 或no)定义了是否可以在不读取任何其它文件的情况下处理该文档。
如果XML文档没有引用任何其它文件,则可以指定standalone="yes"。
如果XML文档引用其它描述该文档可以包含什么的文件,
则可以指定standalone=“no”。缺省值为standalone="no"
注释
注释可以出现在文档的任何位置;它们甚至可以出现在根元素的前面或后面。
注释以<!--开始,以--> 结束。
注释不能在结束部分以外包含双连字符(--);除此之外,注释可以包含任何内容。
注释内的任何标记都被忽略
不要把注释放到某个节点的部分
实体
XML 规范预定义了五个实体。
< 代表小于符号 <
> 代表大于符号 >
" 代表一个双引号 ”
' 代表一个单引号(或撇号)‘
& 代表一个“与”符号。&
引用实体时一定是&开头,和;结尾
当然我们也可以进行自定义实体,
可以用浏览器或者eclips(需要插件)进行测试是否写对了
自定义实体(放在XML的声明后面和根结点前面,比如下例中为message)
CDATA
引用无格式内容(也就是说此时XML解释器对此段内容不做任何解释。因此也不要加任何实体符号)
语法规则
除空标记外,标签必须成对。
一份文档必须包含一个根元素。
所有的开始标签和结束标签必须匹配。
空标签必须以“/>”结束。
标签必须嵌套正确。
元素名称大小写敏感。
所有的属性值必须位于单引号或双引号中。
每一个元素的属性不允许出现超过一次。
XML工具
MyEclips的插件管理,不过有个bug,提示错误但是实际上没有错误,需要关闭再打开,看是否有错误。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 以下是一个自定义实体 -->
<!DOCTYPE user
[
<!ENTITY my "hello">
<!ENTITY you "you hello">
]>
<user>
<head>Dear mother &my;
</head>
<body> test 2 < 3
</body>
<te>
<!-- 这是一个测试程序 -->
testDemo is a textlist
</te>
<!-- 属性值必须用引用括起来 -->
<city name ="guangzhou"></city>
<!-- 引用无格式内容引用无格式内容 -->
<![CDATA[
public static void main(String [] args){
System.out.println("this is a demo");
}
]]>
<fi> &you;</fi>
</user>
对应的DTD
<!ELEMENT user (head,body,te,city,fi)>
<!ELEMENT head (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ELEMENT te (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT fi (#PCDATA)>
<!ATTLIST city name CDATA #REQUIRED>
XML验证
扩展:得到自己的专用语言
验证:通过对扩展语言规范的学习,对一个特定的xml文件按此规范进行解释识别,看此xml是否正确。
DTD验证
文档类型定义(Document Type Definition)
DTD定义了XML文档内容的结构,保证XML以一致的格式存储数据。
精确的定义词汇表,对XML的内容施加约束。
XML允许用户为应用程序创建自己的DTD。
可以依据DTD来检查XML文档。这种检查过程被称为验证。
与DTD相符合的XML文档被认为是有效的文档。
通过DTD定义的词汇表以及文档语法,XML解析器可以检查XML文档内容的有效性。
DTD四种标记声明
元素(ELEMENT)
XML元素类型声明
<!ELEMENT elementName(contentModel)>
元素的内容模式
元素的内容通过内容模式来描述。DTD 内容模式的种类有:
EMPTY
#PCDATA
ANY
Elements
Mixed
EMPTY
元素不能包含任何数据,但可以有属性(前提是必须声明其属性)。
不能有子元素。
不能有文本数据(包括空白)。
#PCDATA
PCDATA
Parsed Character Data.
The text that will be parsed bya parser .
规定元素只包含已析的字符数据,而不包含任何类型的子元素的内容类型
ANY
元素可以包含任何类型的数据。子元素(必须在DTD中有定义)文本数据(包括空白)
Elements
元素由内容模式部件指定。
Mixed
所谓混合模式是指子元素中既可有文本数据又可有下级子元素。
<!ELEMENT review (#PCDATA|name)*> 此时表示同时出现
Any表示只能出现一个,而mixed可以出现多种类型
属性(ATTLIST)
特定元素类型可设置的属性&属性的允许值声明
在DTD中,可用如下语法声明元素的属性列表:
<!ATTLIST elementName attributeName attributeType >
attributeType
attributeDefault
实体(ENTITY)
可重用的内容声明
符号(NOTATION)
不要解析的外部内容的格式声明。
XML解析 与JAVA
XML与Java
XML中内容的一般存放在属性和文本之间。我们可以根据DTD中信息进行定位,读取我们想用的信息。
XML处理模式
文档对象模式
DOM:比较吃内存,一般够用
基于事件处理模式
SAX:省内存
DOM特点
以树型结构访问XML文档。
一棵DOM树包含全部元素节点和文本节点。
可以前后遍历树中的每一个节点。
整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能。
将整个文档调入内存(包括无用的节点),浪费时间和空间。
一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)情况下使用。