XML语法
<?xml version="1.0" encoding = "UTF-8"?>
<中国>
<河北>
<城市>张家口</城市>
<城市>石家庄</城市>
</河北>
<山西>
<城市>太原</城市>
<城市>石家庄</城市>
</山西>
</中国>
1.文档声明
在一个完整的XML文档中,必须包含一个XML文档的声明,并且该声明必须位于文档的第一行,
XML文档声明格式如下
<?xml 版本信息[编码信息][文档独立信息]?>
中括号[]括起来的部分是可选部分。
<?xml version="1.0" encoding = "UTF-8" standalone="yes"?>
version版本,encoding编码方式,默认utf-8,standalone属性用来声明这个文档是否独立的文档默认情况下是no,即依赖于外部文档。
2.元素定义
在XML文档中,主体内容都是由元素组成的,元素一般是由开始标记,属性,元素内容和结束标志构成,
<城市>石家庄</城市>
3.属性定义
在XML文档中,可以为元素定义属性。
<售价 单位="元">68</售价>
在上面的示例中,售价中定义了一个属性单位,属性值必须用双引号或单引号包含
4.注释
如果想在XML文档中插入一些附加信息,比如作者姓名,地址,或电话等信息,这时可以注释实现
<!--注释信息-->
XML与HTML区别
1.HTML是用来显示数据的,XML是传输和存储数据的
2.HTML是不区分大小写的,而XML是严格区分大小写
3.HTML可以有多个根元素,而格式良好的XML有且只能有一个根元素。
4.HTML中,空格是可以自动过滤的,而XML则不会自动删除空格
5.HTML中的标记是预定义的,而XML中的标记可以根据自己的需要去定义,并且可扩展
DTD约束
什么是约束,在现实生活中,一篇文章的语法正常,但内容包含违法言论或逻辑错误,这样的文章是不允许发表的。
同样,在书写XML文档时,其内容必须满足某些条件的限制,
<?xml version="1.0" encoding = "UTF-8" >
<书架>
<书>
<书名>Java就业培训教程</书名>
<作者 姓名="张孝祥" />
<售价 单位="元">38</售价>
<售价 单位="元">28</售价>
</书>
</书架>
尽管这个XML文档结构是正确的,但是一本书应该只有一个售价
由于XML文档的标记是可以随意定义的,一本书,出现了两种售价,如果仅根据标记名称区分哪个是原价,哪个是会员价,这是很难实现的
在XML文档中,定义了一套规则来对文档中的内容进行约束,这套约束称为XML约束
对XML文档进行约束时,同样需要遵守一定的语法规则,最常用的约束语言是DTD约束,Schema约束。
DTD约束
DTD约束时早期出现的一种XML约束模式语言,根据它的语法创建的文件称为DTD文件。
在一个DTD文件中,可以包含元素的定义、元素之间关系的定义、元素属性的定义以及实体和符号的定义。
eg:book.xml
<?xml version="1.0" encoding = "UTF-8" >
<书架>
<书>
<书名>Java就业培训课程</书名>
<作者>张孝祥</作者>
<售价>58.00</售价>
</书>
<书>
<书名>EJB3.0入门经典</书名>
<作者>黎浩明</作者>
<售价>39.00</售价>
</书>
</书架>
book.dtd
<!ELEMENT 书架 (书+)>
<!ELEMENT 书(书名,作者,售价)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
<!ELEMENT 书架 (书+)> 书架是元素的名称,(书+)表示书架元素中有一个或者多个书元素,字符“+”表示用来表示它所修饰的成分必须出现一次或多次
<!ELEMENT 书(书名,作者,售价)> “书”是元素名称,“(书名,作者,售价)”表示元素书包含书名,作者,售价,三个子元素,并且这些子元素要按照顺序依次出现。
第3·5行中,“书名”,作者,售价都是元素名称,“(#PCDATA)”表示元素中嵌套的内容是普通的文本字符串
DTD的引入
如果想使用DTD文件,约束XML文档,必须在XML文档中引入DTD文件。两种方式
<!DOCTYPE 根元素名称 SYSTEM "外部DTD文件的URI">这种方式引入本地的DTD文件
<!DOCTYPE 根元素名称 PUBLIC "DTD名称" "外部DTD文件的URI">这种方式用来引用公共的DTD文件
本地DTD文件引入,记得不能设置standalone属性为yes,因为yes代表独立。例如:
<?xml version="1.0" encoding = "UTF-8" >
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>Java就业培训课程</书名>
<作者>张孝祥</作者>
<售价>58.00</售价>
</书>
<书>
<书名>EJB3.0入门经典</书名>
<作者>黎浩明</作者>
<售价>39.00</售价>
</书>
</书架>
如果希望引入一个公共的DTD文件,则需要在DOCTYPE声明语句中使用PUBLIC属性
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN是DTD的名称,"http://java.sun.com/dtd/web-app_2_3.dtd"是它的URI
DTD对XML文档的约束还可以使用内嵌式,在XML中直接嵌入DTD语句的完整语法格式如下:
<?xml version="1.0" encoding = "UTF-8" standalone="yes">
<!DOCTYPE 书架[
<!ELEMENT 书架 (书+)>
<!ELEMENT 书(书名,作者,售价)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
]>
<书架>
<书>
<书名>Java就业培训课程</书名>
<作者>张孝祥</作者>
<售价>58.00</售价>
</书>
<书>
<书名>EJB3.0入门经典</书名>
<作者>黎浩明</作者>
<售价>39.00</售价>
</书>
</书架>