沉淀再出发:xml的意义和存在的价值
沉淀再出发:xml的意义和存在的价值
⼀、前⾔
学习了那么多的语⾔、框架、语法和基础知识,我们对于数据的理解或许有了⼀定的认识,但是如何描述、包装、传输、存储数据的⼿法和流程我们了解的或许并不多,其中xml就是⼀种我们经常使⽤的⽤来传输和存储数据来描述信息的⽅法了。
⼆、xml的意义
2.1、xml简介
XML 指可扩展标记语⾔(e X tensible M arkup L anguage),XML 被设计⽤来传输和存储数据。HTML 被设计⽤来显⽰数据。
1 XML 指可扩展标记语⾔(EXtensible Markup Language)。
2 XML 是⼀种很像HTML的标记语⾔。
3 XML 的设计宗旨是传输数据,⽽不是显⽰数据。
4 XML 标签没有被预定义。您需要⾃⾏定义标签。
5 XML 被设计为具有⾃我描述性。
6 XML 是 W3C 的推荐标准。
XML 和 HTML 之间的差异:
1 XML 不是 HTML 的替代,XML 和 HTML 为不同的⽬的⽽设计:
2 XML 被设计⽤来传输和存储数据,其焦点是数据的内容。
3 HTML 被设计⽤来显⽰数据,其焦点是数据的外观。
4 HTML 旨在显⽰信息,⽽ XML 旨在传输信息。
5 XML 被设计⽤来结构化、存储以及传输信息,XML 不会做任何事情,并且具有⾃我描述性。
6 XML 语⾔没有预定义的标签,通过 XML 可以发明⾃⼰的标签,这些标签是由 XML ⽂档的创作者发明的。HTML 中使⽤的标签都是预定义的。HTML ⽂档只能使⽤在 HTML 标准中定义过的标签。
7 XML 允许创作者定义⾃⼰的标签和⾃⼰的⽂档结构。
8 XML 不是对 HTML 的替代,XML 是对 HTML 的补充。
9 XML 不会替代 HTML,在⼤多数 Web 应⽤程序中,XML ⽤于传输数据,⽽ HTML ⽤于格式化并显⽰数据。
对 XML 最好的描述是:
1 XML 是独⽴于软件和硬件的信息传输⼯具。
2 XML 是 W3C 的推荐标准,XML 于 1998 年 2 ⽉ 10 ⽇成为 W3C 的推荐标准。
3⽬前,XML 在 Web 中起到的作⽤不会亚于⼀直作为 Web 基⽯的 HTML。XML 是各种应⽤程序之间进⾏数据传输的最常⽤的⼯具。
XML 应⽤于 Web 开发的许多⽅⾯,常⽤于简化数据的存储和共享。
1、XML 把数据从 HTML 分离:如果需要在 HTML ⽂档中显⽰动态数据,那么每当数据改变时将花费⼤量的时间来编辑 HTML。通过 XML,数据能够存储在独⽴的 XML ⽂件中。这
样就可以专注于使⽤ HTML/CSS 进⾏显⽰和布局,并确保修改底层数据不再需要对 HTML 进⾏任何的改变。通过使⽤⼏⾏ JavaScript 代码,就可以读取⼀个外部 XML ⽂件,并更新的⽹页的数据内容。
2、XML 简化数据共享:在真实的世界中,计算机系统和数据使⽤不兼容的格式来存储数据。XML 数据以纯⽂本格式进⾏存储,因此提供了⼀种独⽴于软件和硬件的数据存储⽅法,
这让创建不同应⽤程序可以共享的数据变得更加容易。
3、XML 简化数据传输:对开发⼈员来说,其中⼀项最费时的挑战⼀直是在互联⽹上的不兼容系统之间交换数据。由于可以通过各种不兼容的应⽤程序来读取数据,以 XML 交换数据降低了这种复杂性。
4、XML 简化平台变更升级到新的系统(硬件或软件平台),总是⾮常费时的。必须转换⼤量的数据,不兼容的数据经常会丢失。XML 数据以⽂本格式存储。这使得 XML 在不损失数据的情况下,更容易扩展或升级到新的操作系统、新的应⽤程序或新的浏览器。
5、XML 使数据更有⽤:不同的应⽤程序都能够访问数据,不仅仅在 HTML 页中,也可以从 XML 数据源中进⾏访问。通过 XML,数据可供各种阅读设备使⽤(掌上计算机、语⾳设备、新闻阅读器等),还可以供盲⼈或其他残障⼈⼠使⽤。
6、XML ⽤于创建新的互联⽹语⾔:很多新的互联⽹语⾔是通过 XML 创建的。
XHTML
⽤于描述可⽤的 Web 服务的 WSDL
作为⼿持设备的标记语⾔的 WAP 和 WML
⽤于新闻 feed 的 RSS 语⾔
描述资本和本体的 RDF 和 OWL
⽤于描述针针对 Web 的多媒体的 SMIL
2.2、xml的结构和语法
XML ⽂档形成⼀种树结构,XML ⽂档必须包含根元素。该元素是所有其他元素的⽗元素。XML ⽂档中的元素形成了⼀棵⽂档树。这棵树从根部开始,并扩展到树的最底端。
所有的元素都可以有⼦元素:
1<root>
2<child>
3<subchild>.....</subchild>
4</child>
5</root>
⽐如:
1<bookstore>
2<book category="COOKING">
3<title lang="en">Everyday Italian</title>
4<author>Giada De Laurentiis</author>
5<year>2005</year>
6<price>30.00</price>
7</book>
8<book category="CHILDREN">
9<title lang="en">Harry Potter</title>
10<author>J K. Rowling</author>
11<year>2005</year>
12<price>29.99</price>
13</book>
14<book category="WEB">
15<title lang="en">Learning XML</title>
16<author>Erik T. Ray</author>
17<year>2003</year>
18<price>39.95</price>
19</book>
20</bookstore>
在 HTML 中,某些元素不必有⼀个关闭标签:<br>;在 XML 中,省略关闭标签是⾮法的,所有的 XML 元素都必须有⼀个关闭标签。打开标签和关闭标签通常被称为开始标签和结束标签。
1 XML 标签对⼤⼩写敏感;
2 XML 必须正确嵌套;
3 XML ⽂档必须有根元素;
4 XML 属性值必须加引号;
5在 XML 中,⼀些字符拥有特殊的意义。
6如果把字符 "<" 放在 XML 元素中,会发⽣错误,这是因为解析器会把它当作新元素的开始。为了避免这个错误,请⽤实体引⽤来代替 "<" 字符:
7在 XML 中,有 5 个预定义的实体引⽤:
8< < less than
9> > greater than
10& & ampersand
11' ' apostrophe
12" " quotation mark
13在 XML 中,只有字符 "<" 和 "&" 确实是⾮法的。⼤于号是合法的,但是⽤实体引⽤来代替它是⼀个好习惯。
14 XML 中的注释:在 XML 中编写注释的语法与 HTML 的语法很相似。
15 <!-- This is a comment -->
16 HTML 会把多个连续的空格字符裁减(合并)为⼀个,在 XML 中,空格会被保留,不会被删减。
17 XML 以 LF 存储换⾏:在 Windows 应⽤程序中,换⾏通常以⼀对字符来存储:回车符(CR)和换⾏符(LF)。在 Unix 和 Mac OSX 中,使⽤ LF 来存储新⾏。在旧的 Mac 系统中,使⽤ CR 来存储新⾏。XML 以 LF 存储换⾏。
2.3、XML 命名规则
1 XML 元素必须遵循以下命名规则:
2名称可以包含字母、数字以及其他的字符
3名称不能以数字或者标点符号开始
4名称不能以字母 xml(或者 XML、Xml 等等)开始
5名称不能包含空格
6可使⽤任何名称,没有保留的字词。
7最佳命名习惯:
8使名称具有描述性。使⽤下划线的名称也很不错:<first_name>、<last_name>。
9名称应简短和简单,⽐如:<book_title>,⽽不是:<the_title_of_the_book>。
10避免 "-" 字符。如果您按照这样的⽅式进⾏命名:"first-name",⼀些软件会认为您想要从 first ⾥边减去 name。
11避免 "." 字符。如果您按照这样的⽅式进⾏命名:"first.name",⼀些软件会认为 "name" 是对象 "first" 的属性。
12避免 ":" 字符。冒号会被转换为命名空间来使⽤。
13 XML ⽂档经常有⼀个对应的数据库,其中的字段会对应 XML ⽂档中的元素。有⼀个实⽤的经验,即使⽤数据库的命名规则来命名 XML ⽂档中的元素。
XML 元素是可扩展的,以携带更多的信息。
请看下⾯的 XML 实例:
<note>
<to>Tove</to>
<from>Jani</from>
<body>Don't forget me this weekend!</body>
</note>
让我们设想⼀下,我们创建了⼀个应⽤程序,可将 <to>、<from> 以及 <body> 元素从 XML ⽂档中提取出来,并产⽣以下的输出:
MESSAGE
To: Tove
From: Jani
Don't forget me this weekend!
XML ⽂档的作者再添加的⼀些额外信息:
<note>
<date>2018-10-1</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
那么这个应⽤程序不会中断或崩溃,这个应⽤程序仍然可以到 XML ⽂档中的 <to>、<from> 以及 <body> 元素,并产⽣同样的输出。XML 的优势之⼀,就是可以在不中断应⽤程序的情况下进⾏扩展。
2.4、xml的元素和属性的选⽤
XML元素具有属性,类似 HTML,属性(Attribute)提供有关元素的额外信息。
属性通常提供不属于数据组成部分的信息。⽂件类型与数据⽆关,但是对需要处理这个元素的软件来说却很重要。属性值必须被引号包围,不过单引号和双引号均可使⽤。⽐如⼀个⼈的性别,person 元素可以这样写:
<person sex="female">
<person sex='female'>
如果属性值本⾝包含双引号,可以使⽤单引号:
<gangster name='George "Shotgun" Ziegler'>
<gangster name="George "Shotgun" Ziegler">
XML 元素和属性:
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
在第⼀个实例中,sex 是⼀个属性。在第⼆个实例中,sex 是⼀个元素。这两个实例都提供相同的信息。
没有什么规矩可以告诉我们什么时候该使⽤属性,⽽什么时候该使⽤元素。在 HTML 中,属性⽤起来很便利,但是在 XML 中,应该尽量避免使⽤属性。如果信息感觉起来很像数据,那么请使⽤元素吧。
下⾯的三个 XML ⽂档包含完全相同的信息:
第⼀个实例中使⽤了 date 属性:
<note date="10/01/2008">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
第⼆个实例中使⽤了 date 元素:
<note>
<date>10/01/2008</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
xml标签大全第三个实例中使⽤了扩展的 date 元素(建议):
<note>
<date>
<day>10</day>
<month>01</month>
<year>2008</year>
</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
避免 XML 属性的原因是使⽤属性⽽引起的⼀些问题:
属性不能包含多个值(元素可以)
属性不能包含树结构(元素可以)
属性不容易扩展
属性难以阅读和维护。
尽量使⽤元素来描述数据。⽽仅仅使⽤属性来提供与数据⽆关的信息。
不要做这样的蠢事(这不是 XML 应该被使⽤的⽅式):
<note day="10" month="01" year="2008"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>
针对元数据的 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 属性仅仅是⼀个标识符,⽤于标识不同的便签,它并不是便签数据的组成部分。元数据(有关数据的数据)应当存储为属性,⽽数据本⾝应当存储为元素。
2.5、xml DTD和shema
XML DTD:拥有正确语法的 XML 被称为"形式良好"的 XML。通过 DTD(⽂档类型定义) 验证的XML是"合法"的 XML。"形式良好"的 XML ⽂档拥有正确的语法。
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
DOCTYPE 声明是对外部 DTD ⽂件的引⽤。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!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 的⽬的是定义 XML ⽂档的结构。它使⽤⼀系列合法的元素来定义⽂档结构:
<!DOCTYPE note
[
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]
>
XML Schema:W3C ⽀持⼀种基于 XML 的 DTD 代替者,它名为 XML Schema:
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
⼀个通⽤的 XML 验证器:为了帮助您检查 XML ⽂件的语法,我们创建了 XML 验证器,以便您对任何 XML ⽂件进⾏语法检查。使⽤我们的 XML 验证器来对您的 XML ⽂件进⾏语法检查。XML ⽂档中的错误会终⽌您的 XML 应⽤程序。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论