MENU

XML相关知识(一)

December 3, 2018 • 编程开发阅读设置

XML 简介

XML 被设计用来传输存储数据。HTML被设计用来显示数据。

1. XML 和 HTML 之间的差异

XML 不是 HTML 的替代。XML 和 HTML 为不同的目的而设计:
XML 被设计用来传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息,而 XML 旨在传输信息。

2. XML 不会做任何事情

XML 不会做任何事情。XML 被设计用来结构化、存储以及传输信息。

3. 通过 XML 您可以发明自己的标签

HTML 中使用的标签都是预定义的。HTML 文档只能使用在 HTML 标准中定义过的标签(如 <p>、<h1> 等等)。

XML 允许创作者定义自己的标签和自己的文档结构。

XML 用途

XML 用于创建新的互联网语言

很多新的互联网语言是通过 XML 创建的。这里有一些实例:

  • XHTML
  • 用于描述可用的 Web 服务 的 WSDL
  • 作为手持设备的标记语言的 WAP 和 WML
  • 用于新闻 feed 的 RSS 语言
  • 描述资本和本体的 RDF 和 OWL
  • 用于描述针针对 Web 的多媒体 的 SMIL

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 : 万国码, 可显示各种语言)。

XML 语法规则

  • XML 文档必须有根元素
  • XML 声明文件的可选部分,如果存在需要放在文档的第一行,如下所示:
    <?xml version="1.0" encoding="utf-8"?>
  • XML 标签必须关闭
  • XML 标签对大小写敏感
  • XML 必须正确嵌套
  • XML 属性值必须加引号
  • 在 XML 中,一些字符拥有特殊的意义。如果您把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。
    在 XML 中,有 5 个预定义的实体引用:
实体名称符号含义
&lt;<less than
&gt;>greater than
&amp;&ampersand
&apos;'apostrophe
&quot;"quotation mark
  • XML 中的注释:<!-- This is a comment -->
  • 在 XML 中,空格会被保留
  • XML 以 LF 存储换行

XML 元素

XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。

XML 命名规则

XML 元素必须遵循以下命名规则:

  • 名称可使用任何名称,没有保留的字词。
  • 名称可以包含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字母 xml(或者 XML、Xml 等等)开始
  • 名称不能包含空格

XML 属性

XML元素具有属性,类似 HTML。属性(Attribute)提供有关元素的额外信息。

属性通常提供不属于数据组成部分的信息。
在下面的实例中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要:

<file type="gif">computer.gif</file>

XML 属性必须加引号

属性值必须被引号包围,不过单引号和双引号均可使用。

在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。

避免 XML 属性?

因使用属性而引起的一些问题:

  • 属性不能包含多个值(元素可以)
  • 属性不能包含树结构(元素可以)
  • 属性不容易扩展(为未来的变化)

属性难以阅读和维护。请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。

元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。

XML 验证

拥有正确语法的 XML 被称为"形式良好"的 XML。通过 DTD 验证的XML是"合法"的 XML。

验证 XML 文档

合法的 XML 文档是"形式良好"的 XML 文档,这也符合文档类型定义(DTD)的规则:

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>

XML DTD

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 应用程序。

W3C 的 XML 规范声明:如果 XML 文档存在错误,那么程序就不应当继续处理这个文档。理由是,XML 软件应当轻巧,快速,具有良好的兼容性。

根据 DTD 来验证 XML

如果您运行 Internet Explorer,您可以在下面的文本区域中根据 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> 
<message>Don't forget me this weekend!</message> 
</note>

查看 XML 文件

在所有主流的浏览器中,均能够查看原始的 XML 文件。不要指望 XML 文件会直接显示为 HTML 页面。

如果一个错误的XML文件被打开,浏览器会报告错误。

由于XML标签由XML文档的作者"发明",浏览器无法确定像 <table> 这样一个标签究竟描述一个 HTML 表格还是一个餐桌。

在没有任何有关如何显示数据的信息的情况下,大多数的浏览器都会仅仅把 XML 文档显示为源代码。

使用 CSS 显示 XML

使用 CSS 格式化 XML 不是常用的方法。W3C 推荐使用 XSLT,请看下一章。

下面是 XML 文件的一小部分。第二行把 XML 文件链接到 CSS 文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/css" href="cd_catalog.css"?>
<?xml-stylesheet type="text/css" ?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
</CATALOG>
CATALOG
{
background-color: #ffffff;
width: 100%;
}
CD
{
display: block;
margin-bottom: 30pt;
margin-left: 0;
}
TITLE
{
color: #FF0000;
font-size: 20pt;
}
ARTIST
{
color: #0000FF;
font-size: 20pt;
}
COUNTRY,PRICE,YEAR,COMPANY
{
display: block;
color: #000000;
margin-left: 20pt;
}

使用 XSLT 显示 XML

XSLT 是首选的 XML 样式表语言。通过使用 XSLT,您可以把 XML 文档转换成 HTML 格式。

XSLT(eXtensible Stylesheet Language Transformations)远比 CSS 更加完善。

XSLT 是在浏览器显示 XML 文件之前,先把它转换为 HTML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<breakfast_menu>
    <food>
        <name>Belgian Waffles</name>
        <price>$5.95</price>
        <description>Two of our famous Belgian Waffles with plenty of real maple syrup</description>
        <calories>650</calories>
    </food>
</breakfast_menu>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
  <body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE">
    <xsl:for-each select="breakfast_menu/food">
      <div style="background-color:teal;color:white;padding:4px">
        <span style="font-weight:bold"><xsl:value-of select="name"/></span>
        - <xsl:value-of select="price"/>
      </div>
      <div style="margin-left:20px;margin-bottom:1em;font-size:10pt">
        <p><xsl:value-of select="description"/>.
        <span style="font-style:italic">
          <xsl:value-of select="calories"/> (calories per serving)
        </span>.</p>
      </div>
    </xsl:for-each>
  </body>
</html>

在上面的实例中,当浏览器读取 XML 文件时,XSLT 转换是由浏览器完成的。

在使用 XSLT 来转换 XML 时,不同的浏览器可能会产生不同结果。为了减少这种问题,可以在服务器上进行 XSLT 转换。

Last Modified: December 18, 2018
Archives QR Code
QR Code for this page
Tipping QR Code