XML简介:
- XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,很类似HTML。它被设计的宗旨是传输数据,而非显示数据。
- XML标签没有被预定义,需要用户自行定义标签。
- XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布XML1.0规范。
- XML被广泛认为是继Java之后在Internet上最激动人心的新技术。
XML是一种通用的数据交换格式。
在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在起始标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。
XML中的数据必须通过软件程序来解析执行或显示,如IE;这样的解析程序称之为Parser(解析器)。
在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在起始标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。
XML中的数据必须通过软件程序来解析执行或显示,如IE;这样的解析程序称之为Parser(解析器)。
XML的常见应用:
XML语法
(1)文档声明
- 在编写XML文档时,需要先使用文档声明来声明XML文档。且必须出现在文档的第一行。并且必须指定。
- 最简单的语法:<?xml version="1.0" ?>
- 用encoding属性说明文档所使用的字符编码。保存在硬盘上的文件编码要与声明的编码一致。
- 如:<?xml version="1.0" encoding="GB2312" ?>
- 用standalone属性说明文档是否独立,即是否依赖其他文档。如:<?xml version="1.0" standalone="yes" ?>yes表示不用引入外部文件,no需要引入。
- XML元素指XML文件中出现的标签。一个标签分为起始和结束标签(不能省略)。一个标签有如下几种书写形式;包含标签主体:<mytag>some content </mytag> 和 不含标签主体:<mytag/>
- 一个标签中可以嵌套若干个子标签,但所有的标签必须合理的嵌套,不允许有交叉嵌套。
- 一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签。
- 对于XML标签中出现的所有空格和换行,XML解析程序都会当做标签内容进行处理。
- 由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让源原文件中的内容清晰可读的习惯可能要被迫改变。
一个XML元素可以包括字母、数字以及其他一些可见字符,但必须遵守下面的一些规范:
- 一个元素可以有多个属性,每个属性都有它自己的名称和取值,例如:<mytag name="value" ......>
- 属性值一定要用引号(单引号或双引号)引起来。
- 属性名的命名规范与元素的命名规范相同。
- 元素中的属性是不允许重复的。
- 在XML技术中,标签属性所代表的信息也可以被改成用子元素的形式来进行描述。
XML中的注释语法为:<!-- 注释内容 -->。
注意事项:
- XML声明之前不能有注释。
- 注释不能嵌套。例如: <!-- 大段注释 ... <!-- 有一段注释-->... -->是错误的。
对于一些单个字符,若想显示其原始样式,也可以使用转义的形式给予处理。
特殊字符 | 替代符号 |
& | & |
< | < |
> | > |
" | " |
' | ' |
(7)CDATA区
<![CDATA[
<itcast>www.itcast.cn</itcast>
]]> 以上红色部分被当做普通文本而不是标签。
(8)处理指令
处理指令,简称PI(Processing Instruction)。
作用:用来指挥软件如何解析XML文档。
语法:必须以“<?” 作为开头,以"?" 作为结尾。
常用的处理指令如下:
XML声明:<?xml version="1.0" encoding="GB2312" ?>
xml-stylesheet指令:用于指示XML文档所使用的CSS样式XSL <?xml-stylesheet type="text/css" href="some.css"> (注意:对中文命名的标签元素不起作用)
XML语法总结:
- 所有 XML 元素都须有关闭标签
- XML 标签对大小写敏感
- XML 必须正确地嵌套顺序
- XML 文档必须有根元素(只有一个)
- XML 的属性值须加引号
- 特殊字符必须转义 --- CDATA
- XML 中的空格、回车换行会解析时被保留
XML约束之DTD的使用
(1)为什么要有约束?
- XML都是用户自定义的标签,若出现小小的错误,软件程序将不能正确地获取文件中的内容而报错。(如:Tomcat)
- XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称之为约束。
- 两个概念:格式良好的XML:遵循XML语法的XML。有效的XML:遵循约束文档的XML
XML约束概念:在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。
常用的约束技术:XML DTD 和XML Schema
(3)DTD约束快速入门
DTD(Document Type Definition),全称为文档类型定义。
book.xml
<span style="font-size:18px;"><?xml version="1.0" ?> <!DOCTYPE书架 SYSTEM "book.dtd"> <书架> <书> <书名>葵花宝典</书名> <作者>东方不败</作者> <售价>59.00元</售价> </书> <书> <书名>九阳神功</书名> <作者>张无忌</作者> <售价>57.00元</售价> </书> </书架> </span>book.dtd
<span style="font-size:18px;"><!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)> </span>复杂标签:<!ELEMENT 标签名 (子节点)>
引入DTD:<!DOCTYPE 根节点 SYSTEM "dtd的地址">
(4)将DTD与XML文档关联的三种形式
- 使用内部DTD 。<!DOCTYPE 根节点 [DTD的代码]>
- 使用外部DTD。<!DOCTYPE 根节点 "DTD的地址">
- 使用网络DTD。<!DOCTYPE 根节点 PUBLIC "DTD的名称" "DTD的地址">
在XML文件内编写DTD
<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE 书架 [ <!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)> ]> <书架> <书> <书名>Java就业培训教程</书名> <作者>张孝祥</作者> <售价>39.00元</售价> </书> ... </书架> </span>XML使用DOCTYPE声明语句来指明它所遵循的DTD文档,有两种形式:
当引用的DTD文档在本地时,采用如下方式:
<!DOCTYPE 根元素 SYSTEM “DTD文档路径”>
如:<!DOCTYPE 书架 SYSTEM “book.dtd”>
当引用的DTD文档在公共网络上时,采用如下方式:
<!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>
如:<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
DTD约束语法细节
(1)DTD-定义元素
在DTD文档中使用ELEMENT关键字来声明一个XML元素。
语法:<!ELEMENT 元素名称 使用规则>
使用规则:
定义子元素及描述它们的关系:
1) 如果子元素用逗号隔开,必须按照声明顺序去编写XML文档。
例如:<!ELEMENT FILE(TITLE,AUTHOR,EMAIL)>
2)如果子元素用"|" 分开,说明任选其一。
例如:<!ELEMENT FILE(TITLE|AUTHOR|EMAIL)>
3)用+、*、? 来表示元素出现的次数。
如果元素后面没有+*?表示必须且只能出现一次。
+:表示至少出现一次,一次或多次。
*:表示可有可无,零次、一次或多次。
?:表示可以有也可以无,有的话只能出现一次。零次或一次。
如:<!ELEMENT MYTITLE((TITLE*,AUTHOR?,EMAIL))*|COMMIT>
(2)元素内容的类型
(3)元素ELEMENT定义
DTD属性(ATTLIST)定义
<!ATTLIST 元素名称
......
>
属性声明举例:
<!ATTLIST 商品
类别 CDATA #required 必须的
颜色 CDATA #IMPLIED 可选的
>
对应的XML为:<商品 类别="服装" 颜色="黄色" />
属性值类型:
- CDATA:表示属性的取值为普通的文本字符串。
- ENUMERATED(DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)
- ID:表示属性的取值不能重复(不能只写数字)
约束的四种形式:
DTD 定义属性示例一:
<!ATTLIST 页面作者
姓名 CDATA #IMPLIED
年龄 CDATA #IMPLIED
联系信息 CDATA #required
网站职务 CDATA #FIXED "页面作者"
个人爱好 CDATA "上网"
>
DTD 定义属性示例二:
<?xml version = "1.0" encoding="GB2312" standalone="yes"?>
<!DOCTYPE 购物篮 [
<!ELEMENT 肉 EMPTY>
<!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">
]>
<购物篮>
<肉 品种="鱼肉"/>
<肉 品种="牛肉"/>
<肉/>
</购物篮>
<!DOCTYPE 购物篮 [
<!ELEMENT 肉 EMPTY>
<!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">
]>
<购物篮>
<肉 品种="鱼肉"/>
<肉 品种="牛肉"/>
<肉/>
</购物篮>
DTD 定义属性示例三:
<span style="font-size:18px;"><?xml version = "1.0" encoding="GB2312" ?> <!DOCTYPE 联系人列表[ <!ELEMENT 联系人列表 ANY> <!ELEMENT 联系人(姓名,EMAIL)> <!ELEMENT 姓名(#PCDATA)> <!ELEMENT EMAIL(#PCDATA)> <!ATTLIST 联系人 编号 ID #required> ]> <联系人列表> <联系人 编号=“p1"> <姓名>张三</姓名> <EMAIL>zhang@it315.org</EMAIL> </联系人> <联系人 编号=“p2"> <姓名>李四</姓名> <EMAIL>li@it315.org</EMAIL> </联系人> </联系人列表></span>
实体的引入
实体定义:
- 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
- 在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。
- <!ENTITY 别名 “值”>
- 在元素中引用 &别名;
定义引用实体:
DTD中定义:<!ENTITY copyright “版权所有”>
XML中引用:
©right;
综合实例如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE TVSCHEDULE [ <!ELEMENT TVSCHEDULE (CHANNEL+)> <!ELEMENT CHANNEL (BANNER,DAY+)> <!ELEMENT BANNER (#PCDATA)> <!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)> <!ELEMENT HOLIDAY (#PCDATA)> <!ELEMENT DATE (#PCDATA)> <!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)> <!ELEMENT TIME (#PCDATA)> <!ELEMENT TITLE (#PCDATA)> <!ELEMENT DESCRIPTION (#PCDATA)> <!ATTLIST TVSCHEDULE NAME CDATA #required> <!ATTLIST CHANNEL CHAN CDATA #required> <!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED> <!ATTLIST TITLE RATING CDATA #IMPLIED> <!ATTLIST TITLE LANGUAGE CDATA #IMPLIED> ]> <TVSCHEDULE NAME=""> <CHANNEL CHAN=""> <BANNER>CCAV</BANNER> <DAY> <DATE>2014-11-17</DATE> <PROGRAMSLOT> <TIME>19:00</TIME> <TITLE>新闻联播</TITLE> </PROGRAMSLOT> </DAY> </CHANNEL> </TVSCHEDULE>