XML基础
一、 XML简介
1. XML是用来传输和存储数据的,而HTML是用来显示数据的。
2. 什么是XML?
a. XML指可扩展标记语言(Extensible Markup Language)
b. XML的设计宗旨是传输数据,而非显示数据。
c. XML标签没有被预定义,需要自定义标签。而HTML的标签都是预定义的。
d. XML被设计为具有自我描述性。
3. XML和HTML的主要差异
a. XML是为传输和存储数据而设计的,其焦点是数据的内容。
b. HTML是为了显示数据而设计的,其焦点是数据的外观。
c. HTML旨在显示信息,而XML旨在传输信息。
4. XML是不作为的(XML没有任何行为)
<note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
上面这条便签具有自我描述性。这个XML文档仍然没有做任何事情,它仅仅是包装在XML标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接受和显示出这个文档。
5. XML没有预定义的标签,允许创作者定义自己的标签和自己的文档结构。
6. XML不是对HTML的替代,而是对HTML的补充。
XML不会替代HTML。在大多数Web应用程序中,XML用于传输数据,而HTML用于格式化并显示数据。
7. XML是独立于软件和硬件的信息传输工具。
二、XML的用途
XML应用于Web开发的许多方面,常用于简化数据的存储和共享。
1. XML把数据从HTML分离。
如果你需要在HTML文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑HTML。
通过XML,数据能够存储在独立的XML文件中。这样就可以专注于使用HTML进行布局和显示,并确保修改底层数据不需要对HTML进行任何的个改变。通过使用几行JS代码,你就可以读取一个外部的XML文件,然后更新HTML中的数据内容。
2. XML简化数据共享
在真实的世界中,计算机系统和数据使用不兼容的格式来存储数据。
XML数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。这让创建不同应用程序可以共享的数据变得更加容易。
3. XML简化数据传输
通过XML,可以在不兼容的系统之间轻松地交换数据。
4. XML简化平台的变更
升级到新的系统(硬件或软件平台),总是非常费时的。必须转换大量的数据,不兼容的数据经常会丢失。
XML 数据以文本格式存储。这使得 XML 在不损失数据的情况下,更容易扩展或升级到新的操作系统、新应用程序或新的浏览器。
5. XML用于创建新的Internet语言
很多新的Internet语言是通过XML创建的:
例如:
a. XHTML—最新的HTML版本
b. WSDL—用于描述可用的web service
c. WAP和WML—用于手持设备的标记语言
三、XML树结构
XML文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶"。
1. 一个XML文档实例
<?xml version="1.0" encoding="ISO-8859-1"?> --第一行是XML声明,它定义XML的版本和所使用的编码。 <note> --文档的根元素 <to>George</to> --根的子元素 <from>John</from> --根的子元素 <heading>Reminder</heading> --根的子元素 <body>Don't forget the meeting!</body> --根的子元素 </note> --定义根元素的结尾
2. XML文档形成一种树结构
a. XML文档必须包含根元素,该元素是所有其他元素的父元素。
b. XML文档中元素形成了一颗文档树。这棵树从根部开始,并扩展到树的最底端。
c. 所有元素均可拥有子元素。
d. 所有元素均可由文本内容和属性。
3. 实例
<bookstore> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>
四、XML语法规则
1. 所有XML元素都必须有关闭标签。
2. XML标签对大小写敏感。
3. XML必须正确地嵌套。
4. XML文档必须有根元素。
XML文档必须有一个元素是其他元素的父元素,该元素成为根元素。
5. XML的属性值必须加引号。
6. 实体引用
在XML中,一些字符拥有特殊的意义。如果你把字符"<"放在XML元素中,会发生错误,这是因为解析器会把它当做新元素的开始。
这样会产生XML错误:<message>if salary < 1000 then</message>
为了避免这中错误,需要用实体引用来替代特殊字符。
在XML中,有5个预定义的实体引用:
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
' | ' | 单引号 |
" | " | 双引号 |
注:在XML中,只有字符"<"和"&"确实是非法的。大于号是合法的,但是用实体引用来替代它是一个好习惯。
7. 注释写法
<!-- This is a comment -->
8. 在XML中,空格会被保留。
HTML中会把多个连续的空格字符裁剪为一个;
XML中,文档中的恐不会被删减。
四、 XML元素
XML文档包含XML元素。
1. 什么是XML元素?
XML元素是指从开始标签直到结束标签的部分。
元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。
2. XML命名规则
XML元素必须遵循以下命名规则:
a. 名称可以含字母、数字以及其他字符
b. 名称不能以数字或者标点符号开始
c. 名称不能以字符"xml"(或者XML、Xml)开始
e. 名称不能包含空格
f. 可使用任何名称,无保留的字词。
3. 最佳命名习惯
使名称具有描述性。使用下划线的名称也很不错,例如<book_title>;
避免 "-" 字符。如果您按照这样的方式进行命名:"first-name",一些软件会认为你需要提取第一个单词。
避免 "." 字符。如果您按照这样的方式进行命名:"first.name",一些软件会认为 "name" 是对象 "first" 的属性。
避免 ":" 字符。冒号会被转换为命名空间来使用。
XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的名称规则来命名 XML 文档中的元素。
4. XML元素是可扩展的。
可以为已经存在的XML中增加元素。
五、XML属性
XML元素可以在开始标签中包含属性,类似HTML。
属性提供关于元素的额外信息。
1. 属性通常不属于数据组成部分的信息。
2. XML属性必须加引号。
3. XML元素 VS 属性
<person sex="female"> --此时sex是属性 <firstname>Anna</firstname> <lastname>Smith</lastname> </person> <person> <sex>female</sex> --此时sex是元素 <firstname>Anna</firstname> <lastname>Smith</lastname> </person>
在XML中,应该金利郎避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。
4. 为什么要尽量避免使用XML属性?
因为使用属性会引发一些问题:
a. 属性无法包含多重的值(元素可以)
b. 属性无法描述树结构(元素可以)
c. 属性不易扩展(为未来的变化)
d. 属性难以维护和阅读
请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。
5. 元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
六、命名空间
XML命名空间提供避免元素命名冲突的方法。
1. 命名冲突
在XML中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。
例:
a. 这个XML文档携带者某个表格中的信息:
<table> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table>
b. 这个XML文档携带有关桌子的信息(一件家具)
<table> <name>African Coffee Table</name> <width>80</width> <length>120</length> </table>
假如者两个XML文档被一起使用,由于两个文档都包含带有不同内容和定义的<table>元素,就会发生命名冲突。
XML解析器无法确定如何处理这类冲突。
2. 使用前缀来避免命名冲突
例:
a. 此文档带有某个表格中的信息:
<h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table>
b. 此XML文档携带着有关一件家具的信息:
<f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table>
现在,命名冲突不存在了,这是由于两个文档都使用了不同的名称来命名它们的 <table> 元素 (<h:table> 和 <f:table>)。
通过使用前缀,我们创建了两种不同类型的 <table> 元素。
3. 使用命名空间
<1>例:
a. 这个 XML 文档携带着某个表格中的信息:
<h:table xmlns:h="http://www.w3.org/TR/html4/"> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table>
b. 此 XML 文档携带着有关一件家具的信息:
<f:table xmlns:f="http://www.w3school.com.cn/furniture"> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table>
与仅仅使用前缀不同,我们为 <table> 标签添加了一个 xmlns 属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。
<2> XML Namespace (xmlns)属性
XML 命名空间属性被放置于元素的开始标签之中,并使用以下的语法:xmlns: namespace-prefix="namespaceURI"
当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。
<3> 默认的命名空间
为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。
语法:xmlns="namespaceURI"
例:
a. 这个 XML 文档携带着某个表格中的信息:
<table xmlns="http://www.w3.org/TR/html4/"> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table>
b. 此 XML 文档携带着有关一件家具的信息:
<table xmlns="http://www.w3school.com.cn/furniture"> <name>African Coffee Table</name> <width>80</width> <length>120</length> </table>
七、XML CDATA
所有XML文档中的文本均会被解析器解析。
只有CDATA区域中的文本会被解析器忽略。
1. PCDATA
PCDATA指的是被解析的字符数据(Paresed Character Data)。
XML解析器通常会解析XML文档中所有的文本。
2. CDATA
术语CDATA指的是不应由XML解析器进行解析的文本数据。
a. 在XML元素中, "<"和"&"是非法的。
"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。
"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
b. 某些文本,比如JS代码,包含大量的"<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为CDATA。
例:
<script> <![CDATA[ function matchwo(a,b) { if (a < b && a < 0) then { return 1; } else { return 0; } } ]]> </script>
c. 关于CDATA部分的注释:
CDATA部分不能包含字符串"]]>"。也不允许嵌套CDATA部分。
标记CDATA部分结尾的"]]>"不能包含空格或折行。
八、进阶
1. XML DOM
XML DOM定义了一种访问和操作XML文档的标准方法。
XML DOM独立于语言和平台,可被任何变成语言使用,比如Java,C#,JS等。
2. XSLT
XSLT是一种针对XML文件的样式表语言。
通过XSLT,可以把XML文档转换为其他格式,比如XHTML。