什么是 XML?

了解 XML,一种严格而灵活的标记语言,可用于从文档到图形的各种用途。
67 位读者喜欢这篇文章。
Computer screen with files or windows open

Opensource.com

XML 是一种分层标记语言。它使用开始和结束标签来定义数据。它用于存储和交换数据,并且由于其极高的灵活性,它可用于从 文档图形 的各种用途。

这是一个 XML 文档示例

<xml>
  <os>
   <linux>
    <distribution>
      <name>Fedora</name>
      <release>8</release>
      <codename>Werewolf</codename>
    </distribution>

    <distribution>
      <name>Slackware</name>
      <release>12.1</release>
      <mascot>
	<official>Tux</official>
        <unofficial>Bob Dobbs</unofficial>
      </mascot>
    </distribution>
   </linux>
  </os>    
</xml>

阅读示例 XML,您可能会发现该格式具有直观的特性。无论您是否熟悉主题,您都可能理解本文档中的数据。这部分是因为 XML 被认为是冗长的。它使用大量标签,标签可以具有长而描述性的名称,并且数据以分层方式排序,这有助于解释数据之间的关系。您可能从这个示例中了解到,Fedora 发行版和 Slackware 发行版是 Linux 的两个不同且不相关的实例,因为每个发行版都“包含”在其自己的独立 <distribution> 标签内。

XML 也非常灵活。与 HTML 不同,没有预定义的标签列表。您可以自由创建所需的任何数据结构来表示。

XML 的组成部分

数据存在是为了被读取,当计算机“读取”数据时,这个过程称为解析。再次使用示例 XML 数据,以下是大多数 XML 解析器认为重要的术语。

  • 文档: <xml> 标签打开一个文档</xml> 标签关闭它。
  • 节点: <os><distribution><mascot>节点。在解析术语中,节点是包含其他标签的标签。
  • 元素: 诸如 <name>Fedora</name><official>Tux</official> 这样的实体,从第一个 < 到最后一个 > 是一个元素
  • 内容: 两个元素标签之间的数据被认为是内容。在第一个 <name> 元素中,字符串 Fedora 是内容。

XML 模式

XML 文档中的标签和标签继承被称为模式

有些模式是即兴创作的(例如,本文中的示例 XML 代码是纯粹即兴的),而另一些模式则由标准组织严格定义。例如,可缩放矢量图形 (SVG) 模式由 W3C 定义,而 DocBook 模式 由 Norman Walsh 定义。

模式强制一致性。最基本的模式通常也是最严格的。在我的示例 XML 代码中,将发行版名称放在 <mascot> 节点中是没有意义的,因为文档的隐含模式清楚地表明吉祥物必须是发行版的“子”元素。

数据对象模型 (DOM)

如果必须不断描述标签和位置(例如,“操作系统部分的 Linux 部分中第二个发行版标签的名称标签”),那么谈论 XML 就会变得混乱,因此解析器使用文档对象模型 (DOM) 的概念来表示 XML 数据。DOM 将 XML 数据放入一种“家谱”结构中,从根元素(在我的示例 XML 中,它是 os 标签)开始,并包括每个标签。

这种相同的 XML 数据结构可以表示为路径,就像 Linux 系统中的文件或互联网上网页的位置一样。例如,<mascot> 标签的路径可以表示为 //os/linux/distribution/slackware/mascot

两个 <distribution> 标签的路径可以表示为 //os/linux/distribution。由于有两个发行版节点,解析器会将两个节点(以及每个节点的内容)加载到一个可以查询的数组中。

严格的 XML

XML 也以其严格性而闻名。这意味着大多数应用程序在遇到 XML 错误时都会被设计为故意失败。这听起来可能存在问题,但这是开发人员最欣赏 XML 的原因之一,因为当应用程序尝试猜测如何解决错误时,可能会发生不可预测的事情。例如,在 HTML 尚未明确定义之前,大多数 Web 浏览器都包含“怪异模式”,以便当人们尝试查看糟糕的 HTML 代码时,Web 浏览器可以加载作者可能想要的内容。结果是完全不可预测的,尤其是一个浏览器的猜测与另一个浏览器不同时。

XML 通过在出现错误时故意失败来禁止这种情况。这让作者可以修复错误,直到他们生成有效的 XML。由于 XML 是明确定义的,因此许多应用程序都有验证器插件,并且有像 xmllintxmlstarlet 这样的独立命令来帮助您尽早发现错误。

转换 XML

由于 XML 经常用作交换格式,因此将 XML 转换为其他数据格式或转换为其他 XML 模式是很常见的。经典示例包括 XSLTProc、xmlto 和 pandoc,但从技术上讲,还有许多其他应用程序被设计为至少部分用于转换 XML。

事实上,LibreOffice 使用 XML 来布局其文字处理器和电子表格文档,因此,每当您导出或 从 LibreOffice 转换文件 时,您都在转换 XML。

开源 EPUB 格式的电子书 使用 XML,因此,每当您 将文档转换为 EPUB 或从 EPUB 转换时,您都在转换 XML。

Inkscape,这款基于矢量的插图应用程序,将其文件保存在 SVG 中,SVG 是一种为图形设计的 XML 模式。每当您从 Inkscape 导出图像为 PNG 文件时,您都在转换 XML。

这样的例子不胜枚举。XML 是一种数据存储格式,它旨在确保您的数据,无论是画布上的点和线、图表上的节点,还是文档中的文字,都可以轻松准确地提取、更新和转换。 

学习 XML

编写 XML 很像编写 HTML。感谢 Jay Nick 的辛勤工作,在线提供免费且有趣的 XML 课程,教您如何使用 XML 创建图形。

一般来说,探索 XML 几乎不需要特殊的工具。由于 HTML 和 XML 之间的密切关系,您可以使用 Web 浏览器查看 XML。此外,像 QXmlEditNetBeansKate 这样的开源文本编辑器通过有用的提示、自动完成、语法验证等功能,使 XML 的输入和读取变得容易。

选择 XML

XML 最初看起来可能有很多数据,但它与 HTML 没有太大区别(事实上,HTML 已经 以 XHTML 的形式重新实现为 XML)。XML 具有独特的优势,即构成其结构的组件也恰好是元数据,提供有关其存储内容的信息。一个设计良好的 XML 模式包含并描述您的数据,使用户能够一目了然地理解它并快速解析它,并使开发人员能够使用方便的编程库 高效地解析它

接下来阅读
标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,而且经常同时从事这两个行业。

4 条评论

有人可能会争辩说 HTML 是 XML 的子集。尝试使用浏览器读取 XML 文件并获得令人满意的结果需要创建 XSL 文件,以告诉浏览器如何处理各种 XML 标签。
话虽如此,我注意到,如果您将 Firefox 指向计算机主目录中的 XML 文件,它现在将不会使用 XSL 文件。您需要做的是通过运行 httpd 设置一个 localhost,然后将这些文件放入 /var/www/html/,然后将浏览器指向 localhost/

官方来说,xhtml 是以 XML 实现的 HTML。

绝对有支持 HTML5 的论点,但我不认为这必然是一个纯粹技术性的论点。

Firefox 仍然可以解析 XML 的 XSL 样式表。我将此用于一些个人项目。它甚至可以在移动设备上工作,但您必须精确导航到页面(换句话说,将 XML 目标设置为 htaccess 默认索引页在移动设备上无法呈现。我已将其添加到我的待办事项列表中,以提交有关该问题的错误报告..)

这是一个快速的概念验证。它在移动设备和最新的 Firefox 上对我来说都有效

http://linuxinfoshop.tk/xslonline/index.xml

回复 ,作者是 Greg P

我没有说它在 Firefox 上不起作用。我说的是,您不能将 Firefox 指向计算机上的一个目录,其中有一个 XML 文件及其 XSL 文件,并期望它工作。因此,您需要将其放在网站上或在 /var/www/ 中创建一个 localhost。

回复 ,作者是 sethkenlon

明白了。很高兴知道,谢谢!

这很奇怪...但我不是 Firefox 维护者,所以也许解析 XML 和 XSL 不值得维护...?

回复 ,作者是 Greg P

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.