xml:可扩展标记语言,w3c组织发布的,用于保存有关系的数据,作为配置文件,描述程序模块之间的关系
<?xml version="1.0" encoding="gb2312" standalone="yes" ?>
encoding 指定文档的字符编码; standalone 说明文档是否独立,如果 yes 则表示XML文件既不需要DTD文件来验证标记是否有效,也不需要XSL、CSS控制外观显示
元素:由一个标记来定义,包括开始和结束标记以及其中的内容, <book>深入体验java web开发内幕</book> (标记可以嵌套;格式良好的xml文档有且仅有一个根标签,其他标签都是根标签的子孙标签;在xml中空行和空格都会被作为原始内容解析)
命名规范:区分大小写,<A></A>和<a></a>是两种不同的标签;不能以数字、下划线或者xml开头;不能包含空格、冒号:
属性:XML解析属性的速度比解析子标记快,属性值必须用双引或单引引起来,属性也可被改为子标签的形式存储
<input name="txt1" /> <input> <name>txt1</name> </input>
CDATA区:其中的内容不会被xml解析引擎解析,而是作为原始内容显示, <![CDATA[这是是CDATA区的内容]]>
处理指令:简称PI,用来指挥xml解析引擎如何解析xml,以“<?”开头,以“?>”结尾,例如:文档声明 <?xml version="1.0" ?> ; <?xml-stylesheet type="text/css" href="1.css" ?> ,它用来通知xml解析引擎使用css文件控制xml显示外观
XML约束模式:定义了XML文档的标记和结构,类似于数据表结构。XML约束模式的内容也要遵循一定的语法规则,其中主流有2种:XML DTD 和 XML Schema
DTD约束即可以作为一个单独的文件(以.dtd为后缀)编写,也可以在XML文件内编写。其中包括元素之间的关系定义、元素属性定义、实体和符号的定义。
案例1:bookshelf.dtd
<!ELEMENT 书架 (书+)> <!ELEMENT 书 (名称,作者,售价)> <!ELEMENT 名称 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)>
在book.xml中
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 书架 SYSTEM "bookshelf.dtd" > <书架> <书> <名称>深入体验java web开发内幕</名称> <作者>张孝祥</作者> <售价>59元</售价> </书> </书架>
在chrome浏览器中的显示如下
注意:
1. XML只可有一个根节点
2. “书”和括号“()”之间有空格,“名称”和“(#PCDATA)”之间同样也有
3. 若没有“书架”,把“书”作为节点,也会报错
XML文档引用外部DTD约束
引用本地dtd文件 <!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">
引用公用dtd文件 <!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
案例2: 在xml文件中编写dtd约束
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 书架[ <!ELEMENT 书架 (书+)> <!ELEMENT 书 (名称,作者,售价)> <!ELEMENT 名称 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)> ]> <书架> <书> <名称>深入体验java web开发内幕</名称> <作者>张孝祥</作者> <售价>59元</售价> </书> </书架>
DTD约束模式
dtd文件中声明xml元素的格式: <!ELEMENT 元素名称 元素类型> , 元素类型 可以是元素内容或类型,如果是元素内容,要用括号包起来,如果是类型,直接书写
<!ELEMENT 书 (名称,作者,售价)>
<!ELEMENT 书 (书名|作者|价格)>
<!ELEMENT 名称 (#PCDATA)>
<!ELEMENT 书 EMPTY>
<!ELEMENT 书 ANY>
元素内容中用加号“+”表示元素出现>=1次,“?”表示出现1或者0次,“*”表示多少次都行。
- 第1行,元素“书”有三个子元素“名称”“作者”“售价”,且排列顺序必须与声明时一致
- 第2行,元素“书”只能有“名称”“作者”“售价”三者中的一个作为子元素
- 第3行,元素类型为 #PCDATA
- 第4行,元素类型为空,如 <br/>
- 第5行,元素类型任意
dtd文件中元素属性定义的格式(元素必须已经声明了,才能为其声明属性):
<!ATTLIST 元素名称 属性名1 属性值类型 设置说明 属性名2 属性值类型 设置说明 ...
属性类型有 CDATA 、 ENUMERATED 、 ID ,第一个表示属性值为普通文本字符串 ,第二个表示属性值只能是一组属性值中的一个,如 <!ATTLIST person sex (nan|nv) #IMPLIED> ,第三个表示元素的id,值唯一
设置说明有 #REQUIRED 必须设置该属性, #IMPLIED 可选 , #FIXED 该属性值固定为某个值,在 XML 文件中不能为该属性设置其它值。但需要为该属性提供这个值 ,直接使用默认值:在 XML 中可以设置该值也可以不设置该属性值。若没设置则使用默认值。
<!ATTLIST person id ID #REQUIRED name CDATA #REQUIRED sex (nan|nv) #IMPLIED nan age CDATA #IMPLIED 12 >
schema约束模式
schema比dtd好,已经成为w3c组织的标准,正逐步取代dtd
名称空间:使用名称空间来区分每个约束模式文档,每个名称空间都用一个唯一的URI表示。
名称空间声明:就是在XML中为一个约束模式文档的名称空间指定一个临时的简称,这个简称将作为元素和属性的前缀名。名称空间声明和元素的属性定义非常类似,可以位于任何一个元素的开始标记中,并且一个元素中可以声明多个名称空间;名称空间声明的基本格式为 xmlns:前缀名称="URI" ,其中的前缀名称就是临时的简称。 (xmlns是xml namespace的简写)。默认名称空间 xmlns="URI" ,即省略掉前缀名称。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
使用名称空间引入XML Schema文档
上面的标记只能知道"http://www.w3.org/2001/XMLSchema"是代表某个名称空间的URI,并不能知道名称空间XML Schema文档的访问地址,那就无法对XML文档进行校验。
使用 xs:schemaLocation 来指定名称空间的访问地址,采用 名称空间 地址 ,中间有空格隔开。 xmlns:xs="http://www.w3.org/2001/XMLSchema" 这个名称空间众所周知,所有不用指定它的访问地址。
<书架 xmlns="http://www.xxx.com/bookshelfSchema" xmlns:test="http://www.demo.com/testSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xs:schemaLocation=" http://www.xxx.com/bookshelfSchema http://www.xxx.com/xsd/bookshelf.xsd http://www.demo.com/testSchema http://www.xxx.com/xsd/test.xsd ">