1 XML简介
什么是XML?
XML 指可扩展标记语言(EXtensible Markup Language)。
XML 是一种标记语言。
XML 的设计宗旨是传输数据,而不是显示数据。
XML 标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。
XML 是 W3C 的推荐标准。
XML不会做任何事情
XML不会做任何事情,XML被设计用来结构化、存储以及传输信息。
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don’t forget me this weekend!</body>
</note>
上面的这条便签具有自我描述性。它包含了发送者和接受者的信息,同时拥有标题以及消息主体。但是,这个 XML 文档仍然没有做任何事情。它仅仅是包装在 XML 标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。
上面实例中的标签没有在任何 XML 标准中定义过(比如 <to> 和 <from>)。这些标签是由 XML 文档的创作者发明的。这是因为 XML 语言没有预定义的标签。
HTML 中使用的标签都是预定义的。HTML 文档只能使用在 HTML 标准中定义过的标签(如 <p>、<h1> 等等)。XML 允许创作者定义自己的标签和自己的文档结构。
2 XML语法
XML文档形成了一种树结构,它从”根部”开始,然后扩展到”枝叶”。
一个XML文档实例
XML文档使用简单的具有自我描述性的语法:
<?xml version=”1.0″ encoding=”UTF-8″?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don’t forget me this weekend!</body>
</note>
第一行是 XML 声明。它定义 XML 的版本(1.0)和所使用的编码(UTF-8)。
下一行描述文档的根元素(像在说:”本文档是一个便签”),接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body)。
语法规则
XML 文档必须有根元素
XML 必须包含根元素,它是所有其他元素的父元素
XML 声明
XML 声明文件的可选部分,如果存在需要放在文档的第一行
<?xml version=”1.0″ encoding=”utf-8″?>
所有的 XML 元素都必须有一个关闭标签
在 XML 中,省略关闭标签是非法的。所有元素都必须有关闭标签。
note: 这个关闭标签的一种简写
XML 标签对大小写敏感
XML 标签对大小写敏感。标签 <Letter> 与标签 <letter> 是不同的。必须使用相同的大小写来编写开始标签和结束标签。
XML 必须正确嵌套
XML 属性值必须加引号
与 HTML 类似,XML 元素也可拥有属性(名称/值的对)。在 XML 中,XML 的属性值必须加引号。
错误:
<note date=”12/11/2007″>
<to>Tove</to>
<from>Jani</from>
</note>
正确
<note date=”12/11/2007″>
<to>Tove</to>
<from>Jani</from>
</note>
实体引用
在 XML 中,一些字符拥有特殊的意义。如果您把字符 “<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。
在 XML 中,有 5 个预定义的实体引用:
<
<
less than
>
>
greater than
&
&
ampersand
‘
‘
apostrophe
”
”
quotation mark
XML 中的注释
在 XML 中编写注释的语法与 HTML 的语法很相似。
<!– This is a comment –>
在 XML 中,空格会被保留
XML 以 LF 存储换行
3 XML元素
什么是XML元素?
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
一个元素可以包含:
其他元素
文本
属性
或混合以上所有…
XML元素命名规则
XML 元素必须遵循以下命名规则:
名称可以包含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字母 xml(或者 XML、Xml 等等)开始
名称不能包含空格
可使用任何名称,没有保留的字词。
XML元素是可扩展的
XML 的优势之一,就是可以在不中断应用程序的情况下进行扩展元素。
4 XML属性
XML元素具有属性,类似 HTML。
属性(Attribute)提供有关元素的额外信息,属性通常提供不属于数据组成部分的信息。
XML属性值必须加引号,单引号、双引号都可以。
<person sex=”female”>
属性 VS 元素
没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用元素吧。
<person sex=”female”>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
属性有如下限制:
属性不能包含多个值(元素可以)
属性不能包含树结构(元素可以)
属性不容易扩展(为未来的变化)
属性难以阅读和维护。请尽量使用元素来描述数据,而仅仅使用属性来提供与数据无关的信息。
针对元数据的XML属性
有时候会向元素分配 ID 引用。这些 ID 索引可用于标识 XML 元素,它起作用的方式与 HTML 中 id 属性是一样的。这个实例向我们演示了这种情况:
<messages>
<note id=”501″>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don’t forget me this weekend!</body>
</note>
<note id=”502″>
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>
上面的 id 属性仅仅是一个标识符,用于标识不同的便签。它并不是便签数据的组成部分。
在此我们极力向您传递的理念是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
5 XML验证
拥有正确语法的XML被称为”形式良好”的XML。
有两种方式可以验证XML文件:XML DTD, XML Schema。
XML错误会终止您的程序
XML文档中的错误会终止您的 XML 应用程序。
W3C的XML规范声明:如果XML文档存在错误,那么程序就不应当继续处理这个文档。理由是,XML软件应当轻巧,快速,具有良好的兼容性。
XML DTD
DTD(文档类型定义)的作用是定义XML文档的合法构建模块。
通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。
通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。
而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。
您还可以使用 DTD 来验证您自身的数据。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
内部文档声明
假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:
<!DOCTYPE root-element [element-declarations]>
带有DTD的XML文档实例:
<?xml version=”1.0″?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don’t forget me this weekend</body>
</note>
以上 DTD 解释如下:
!DOCTYPE note (第二行)定义此文档是 note 类型的文档。!ELEMENT note (第三行)定义 note 元素有四个元素:”to、from、heading,、body”!ELEMENT to (第四行)定义 to 元素为 “#PCDATA” 类型!ELEMENT from (第五行)定义 from 元素为 “#PCDATA” 类型!ELEMENT heading (第六行)定义 heading 元素为 “#PCDATA” 类型!ELEMENT body (第七行)定义 body 元素为 “#PCDATA” 类型
外部文档声明
假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:
<!DOCTYPE root-element SYSTEM “filename”>
<?xml version=”1.0″?>
<!DOCTYPE note SYSTEM “note.dtd”>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don’t forget me this weekend!</body>
</note>
这是包含 DTD 的 “note.dtd” 文件:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
note: SYSTEM表示DTD文件是私有的,PUBLIC表示DTD文件是共有的。
XML Schema
6 XML显示
在所有主流的浏览器中,均能够查看原始的 XML 文件。
ML 文档将显示为代码颜色化的根以及子元素。通过点击元素左侧的加号(+)或减号( – ),可以展开或收起元素的结构。要查看原始的 XML 源(不包括 + 和 – 符号),选择”查看页面源代码”或从浏览器菜单”查看源文件”。
XML 文档不会携带有关如何显示数据的信息。
由于 XML 标签由 XML 文档的作者”发明”,浏览器无法确定像 <table> 这样一个标签究竟描述一个 HTML 表格还是一个餐桌。在没有任何有关如何显示数据的信息的情况下,大多数的浏览器都会仅仅把 XML 文档显示为源代码。
7 XML命名空间
发表回复