XML- 初识
XML的全称是Extensible Markup Language,意思是可扩展展标记语言。XML要实际应用中有两个主要的功能,一是用来保存数据的,二是用来作配置文挡使用。在XML语言中,允许用户自定义标签,一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其他标签描述数据。
XML常见应用
一个XML文件包含如下几部份
- 文挡声明
- 元素
- 属性
- 注释
- CDATA区、特殊字符
- 处理指令
1.文挡声明
最简单的声明语法:<?xml version=”1.0” ?>。用Encoding属性说明文挡的字符编码: <?xml version=”1.0” encoding=”GB2312” ?>。用standalone属性说明文挡是否独立 <?xml version encoding=”GB2312” standalone=”yes” ?>,虽然标注了该XML是独立的,但在IE游览器并没有严格按照XML规格去办事。不管有没有标注,IE都认为文挡是非独立的。
注:另外你保存的时候,encoding是什么,文本另存为的时候就得是什么。
2.元素
- XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签。
- 一个标签可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套。
- 有且仅有一个根标签,其它标签都是这个根标签的子孙标签。
对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的。
第一段:<URL>www.hstc.cn</URL>
第二段
<URL>
www.hstc.cn
</URL>
一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范。
- 区分大小写
- 不能以数字或_开头
- 不能含空格
- 名称中间不能包含冒号(:)
3.属性
一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如:<input name=”text”>。 属性值一定要用双引号(“)或单引号(’)引起来。定义属性必须遵循与标签相同的命名规范。另外,标签属性所代表的信息,也可以被改成用子元素的形式来描述
例如:
<input>
<name>text</name>
</input>
4.CDATA区
术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。在XML 元素中,"<" 和 "&" 是非法的。"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如 JavaScript 代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。CDATA 部分中的所有内容都会被解析器忽略。CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:
<![CDATA[
<URL>www.hstc.cn</URL>
]]>
5.处理指令
处理指令,简称PI(PROCESSING INSTRUCTION)。处理指令用来指挥解析引擎如何解析XML文挡内容。例如在XML文挡中可以使用XML-stylesheet指令,通知XML解析引擎,应用CSS文件显示XML文挡内容。
<?xml-stylesheet type=”text/css” href=”1.css” ?>
处理批令必须以 <? 作为开头,以 ?> 作为结尾,XML声明语句就是最常见的一种处理指令。
例如下面这个例子:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/css" href="test.css"?> <网站> <站点> <name>新浪网</name> <URL>http://www.sina.com.cn</URL> </站点> <站点> <name>腾讯网</name> <URL>http://www.qq.com</URL> </站点> <站点> <name>百度网</name> <URL>http://www.baidu.com</URL> </站点> </网站> /*test.css文件*/ @CHARSET "UTF-8"; name{ font-size:16px;color:blue;} URL{ font-size:14px; color:red;}
显示结果如下:
==========================================================
XML约束
什么是XML约束:在XML技术里,可以编写一个文挡来约束一个XML文挡的书写规范,这称之为XML约束。常见的约束技术有:XML DTD和XML Schema
DTD是全称Document Type Definition 全称是文挡类型定义
DTD的两种校验方式,第一种使用外部引用
新建一个BOOK.DTD文件
<!ELEMENT 我的书 (书+)>
<!ELEMENT 书 (书名,作者,价格)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 价格 (#PCDATA)>
在BOOK.XML引入BOOK.DTD文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 我的书 SYSTEM "book.dtd"> <我的书> <书> <书名></书名> <作者></作者> <价格></价格> </书> </我的书>
第二种方式 在XML文件中内部嵌入DTD
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 我的书[ <!ELEMENT 我的书 (书+)> <!ELEMENT 书 (书名,作者,价格)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 价格 (#PCDATA)> ]> <我的书> <书> <书名></书名> <作者></作者> <价格></价格> </书> <书> <书名></书名> <作者></作者> <价格></价格> </书> </我的书>
DTD的语法细节
用 | 分隔,任选其一。
用+ * ? 等符号表示
+:一次或多次
?:0次或一次
*:0次或多次
结果圆括号表示批量设置,例如(TITLE | AUTHOR)*
属性定义
Xml文挡中标签属性需引过ATTLIST为其设置属性。
语法格式如下:
<!ATTLIST 元素名
属性名1 属性值类型 设置说明
属性名2 属性值类型 设置说明
…
>
属性声明举例
<!ATTLIST 商品
类别 CDATA #REQUIRED
颜色 CDATA #IMPLIED
>
设置说明:
#REQUIRED 必须设置该属性
#IMPLIED 可以设置也可以不设置
#FIXED 说明该属性的取值固定为一个值,在XML文件中不能为该属性设置其他值
举例
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 我的书[ <!ELEMENT 我的书 (书+)> <!ELEMENT 书 (书名,作者,价格)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 价格 (#PCDATA)> <!ATTLIST 我的书 日期 CDATA #IMPLIED 电话 CDATA #REQUIRED > ]> <我的书 电话="89891231"> <书> <书名></书名> <作者></作者> <价格></价格> </书> <书> <书名></书名> <作者></作者> <价格></价格> </书> </我的书>
常见的属性值类型
<!ATTLIST 元素名
属性名1 属性值类型 设置说明
…
>
1.CDATA:表示属性值为普通文本字符串
2.枚举
3.ID值
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 我的书[ <!ELEMENT 我的书 (书+)> <!ELEMENT 书 (书名,作者,价格)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 价格 (#PCDATA)> <!ATTLIST 书 编号 ID #REQUIRED > ]> <我的书> <书 编号="1"> <书名></书名> <作者></作者> <价格></价格> </书> <书 编号="2"> <书名></书名> <作者></作者> <价格></价格> </书> </我的书>
4.实体
实体ENTITY用于为一段内容创建一个别名,以后在XML文挡中就可以使用别名引用这段内容了。
语法格式:<!ENTITY 实体名称 “实体内容” > 直接转变成实体内容
引用方式:&实体名称
举例
<!ENTITY copyright “I am a programmer”>
…
©right
看来这里我对HTML的&nbps;有了认识,他也是实体引用。
=================================================================
DTD中文参加手册:http://wenku.baidu.com/view/9b38a1c38bd63186bdebbc01.html