什么是 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)

如果必须不断描述标签和位置(例如,“OS 部分的 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

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.