一. XML概述
可扩展标记语言(英语:eXtensible Markup Language,简称: XML),是一种标记语言。
XML是一种通用的数据交换格式。
XML适合少量的数据在网络上进行传输。
XML的缺点:不能存储大量数据,读取解析数据速度慢。
二. XML基础语法
1. 文档声明
声明语法如下:<?xml version=”1.0” encoding=”GB2312” standalone=”yes” ?>
说明:
在一个完整的XML文档中,必须包含XML的文档声明语句,应当是整个XML文档的第一行。
encoding属性说明文档的字符编码。如果没有指定encoding属性,XML将默认字符编码为UTF-8/UTF-16。
standalone属性说明文档是否独立。如果encoding属性和standalone属性同出现,则standalone必须出现在encoding之后。
当XML需要和dtd,xsl,css的文件配合使用的话,我们则需要将standalone属性设置为no。
2. 元素定义
2.1元素定义格式
一个XML元素由一个标记来定义。包括开始标记和结束标记以及其中的内容。
如:
<name>heimar</name>
一个元素中可以嵌套多个子元素。
格式良好的XML文档必须有且仅有一个根元素,其他元素都是这个根元素的子孙元素。
开始标记和结束标记没有内容称为空元素,空元素可以写为<img src=”log.gif” />。
所有元素都必须合理嵌套,不允许标签交叉。
2.2元素标记名称规范
元素区分大小写。
不能以数字和下划线“_”开头。
不能以字符组合xml(其中包括各种大小写写法的xml)开头。
不能包含空格。
名称中间不能包含冒号。
2.3元素标记名称建议
不要使用“.”。(在很多程序语音中,“.”用于引用对象的属性)
最好不要使用减号“-”,而以下划线“_”代替。(避免与表达式的减号运算符发生冲突)
名称尽量简短。(以减少XML文档的大小)
名称的大小写尽量统一。
名称可以使用非英文字符,但要考虑某些软件不支持非英文的字符。3. 属性定义
一个标签可以有多个属性,每个属性都有自己的名称和取值。
属性值一定要用双引号或者单引号引起来。
属性遵循与标签相同的命名规范。
属性可以被改成用子元素来描述同样的信息。
如:
<person name = “heimar”>China</person>
<person>
<name>huiyi8zai</name>
<nationality>China</notionality>
</person>
4. XML文档注释
注释语法如下:
<!--注释内容-->
说明:
XML声明之前不能有注释。
一对注释符号之中不能包含另一对注释符号。
文件中加入中文注释的问题。(设置xml文档的编码格式为GB2312即可)5. 空格和换行的处理
下面两段内容的意义是不一样的。第一段:
<name>heimar</name>
第二段:
<name>
huiyi8zai
</name>
对于XML中的标签以外的所有空格和换行,XML解析程序都要一个个如实的交给下游程序去处理。
6. CDATA区
CDATA区语法如下:
<![CDATA[不行被解析程解析的原始数据]]>
说明:
以“<![CDATA[”开始,以“]]>”结束。
CDATA区中的起始和结束处有没有空格和换行字符是有区别的。
CDATA区不能出现字符串“]]>”。7. 特殊字符
特殊字符 替代符号& &
< <
> >
“ "
‘ '
8. 处理指令(PI)
处理指令以“<?”作为开头,以“?>”作为结尾,XML声明语句就是最常见的一种处理指令。
如在某个XML文档中可以包含下面的语句来告诉浏览器使用book.css控制其显示效果。
<?xml-stylesheet type=”text/css” herf=”book.css”?>
三. XML约束模式
符合XML基本语法的称为格式良好的XML文档。格式良好且符合某种约束的称为有效的XML文档。
约束模式定义了XML文档中允许出现的元素名、元素中的属性、元素中的内容类型以及元素之间的嵌套关系和出现顺序。
如果把一个XML文件看作数据库中的一个表,那么XML约束就相当于数据库表结构的定义。
模式文档和实例文档四. DTD(Document Type Definition)
1. 在XML文档中引入外部DTD
声明格式:<1>
<!DOCTYPE 文档类型名称SYSTEM "DTD文件的URL">
<2>
<!DOCTYPE 文档类型名称PUBLIC "DTD名称" "DTD文件的URL">
说明:
DTD文件应该使用UTF-8或者Unicode编码。
DOCTYPE声明语句紧跟在XML文档声明语句后面。
DTD标识名称应符合一些标准的规定,对于ISO标准的DTD以ISO三个字母开头;被改进的非ISO标准的DTD以加号“+”开头;未被改进的非ISO标准的DTD以减号“-”开头。2. XML文档直接嵌入DTD
<?xml version=”1.0” encoding=”UTF-8” standalone=”yes”?>
<!DOCTYPE 根元素名 [
DTD定义语句
………………
]>
说明:
当DTD定义语句嵌入到XML文档中时,DTD的字符可以不采用UTF-8编码。
3. 元素定义
3.1语法格式:
<!ELEMENT 元素名称 使用规则>
举例:
<!ELEMENT 书架 (书名,作者,售价)>
3.2使用规则
(#PCDATA):parsed character dada的缩写。
(书名,作者,售价):规定子元素及其出现的顺序。
(#PCDATA,书名):#PCDATA关键字在这种情况下必须是圆括号中的第一项。
EMPTY:如,<!ELEMENT HR EMPTY> 定义的元素形式为<HR />。
ANY:可以包含任意内容。
3.3元素定义细节
①一个元素的各个组成成份之间可以有各种关系:
<!ELEMENT MYFILE (TITLE,AUTHOR,EMAIL)>三个子元素必须与此顺序一致
<!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)>只能包含三个子元素的其中一个
<!ELEMENT MYFILE (TITLE AUTHOR EMAIL)>:错,无序
②在元素的使用规则中可以定义子元素出现的次数:
(书+)出现一次或多次
(书*)出现0次或者多次
(书?)出现0次或者一次
(书) 出现一次
③可以使用一对圆括号用于将在其中的内容组合成一个可以统一操作的分组。
④dtd文件和xml文件的文档注释一样。4. 属性定义
4.1语法格式
<!ATTLIST 元素名
属性名1 属性类型 设置说明
属性名2 属性类型 设置说明
......
>
举例:
<!ATTLIST 元素名
类别 CDATA #REQUIRED
颜色 CDATA #IMPLIED
名称 CDATA "deat"
>
4.2设置说明
#REQUIRED:表示这个属性必须存在
#IMPLIED:表示这个属性可以有,可以没有
#FIXED:表示这个属性的值是固定的
直接使用默认值:
4.3常用类型
CDATA:表示属性值的内容为普通的文本字符串。遇到特殊字符需转义。
ENUMERATED:枚举类型。在DTD定义中,并不会出现该关键字。每个值用短竖线“|”分开。
ID:用于标识唯一的属性。5. 实体定义
5.1实体分类
引用实体(xml文件使用)和参数实体(dtd文件使用)。
5.2说明
实体的根本作用是为一段文本内容创建一个别名,以后在XML文档中就可以多次引用这个别名。
5.3引用实体的语法格式
<!ENTITY 实体名称 “实体内容”>
<!ENTITY 实体名称 SYSTEM “外部XML文档的URL”>
引用方式:
&实体名称;
<4>参数实体的语法格式:
<!ENTITY % 实体名称 "实体内容" >
引用方式:
&实体名称;
6. DTD缺陷
DTD本身不是一个xml,不能被直接校验
不能表示数据类型
无法有效处理重名的元素
无法定义更多的元素规则五. XML Schema
1. 概述
XML Schema的文件是以.xsd结尾。
XML Schema符合xml语法结构。2. 名称空间
2.1名称空间的声明
xmlns:前缀名称=”URI”
2.2QName(Qualified Name限定名)
3. 引入多个XML Schema文件举例
<?xml version="1.0" encoding="UTF-8"?>
<h:dota xmlns:h="http://cd.itcast.xml/dota"
xmlns:h2="http://www.example.org/herosSchema2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://cd.itcast.xml/dota herosSchema.xsd
http://www.example.org/herosSchema2 herosSchema2.xsd">
<hero name="hero1">
<strength>1</strength>
<agility>1</agility>
<intelligence>1</intelligence>
</hero>
<h2:hero>123</h2:hero>
</h:dota>