13

是的,XML 是人类可读的,但逗号分隔的文本和属性文件也是如此。

XML 臃肿,难以解析,难以在代码中修改,还有很多我可以用它思考的其他问题。

我的问题是使 XML 如此受欢迎的最吸引人的品质是什么????

4

23 回答 23

27

与 CSV 文件相比,它的主要优势之一是它可以轻松地表示分层数据。为此,您要么需要像 XML 这样的自描述树结构,要么需要像 SWIFT 或 EDI 这样的预定义格式(如果您曾经处理过其中任何一种,那么您会意识到 XML 解析起来很简单相比下)。

它实际上很容易解析的原因之一是因为它“臃肿”。这些结束标记意味着您可以准确地将元素的结尾与开始匹配,并计算出树何时变得不平衡。您不能在 JSON 等“轻量级”替代方案中做到这一点。

它易于解析的另一个原因是它从一开始就完全支持 Unicode 编码,因此您不必担心目标系统上的默认代码页是什么,或者如何编码多字节字符,因为这些信息都包含在文件中。

我们不要忘记它附带的其他人工制品,例如定义的描述和验证机制 (XSD) 以及强大的声明性转换机制 (XSLT)。

于 2008-09-22T17:30:21.700 回答
26

那是 90 年代后期,互联网很热很热,但是公司的系统无法靠近互联网。他们花费了无数个小时与 CORBA 打交道,并且正在计划使用 Enterprise JavaBeans 让这些旧系统与新系统进行通信。

随之而来的是 SGML,它是几乎所有标记语言的先驱(我跳过了 GML)。SGML 已经用于定义如何定义 HTML,但 HTML 具有必须使用的特定标签,以便 Netscape 正确显示给定的网页。

但是,如果我们还有其他需要解释的数据呢?啊哈!

因此,鉴于 XML 是结构化的,并且您可以随意定义该结构,它自然允许您构建接口(从非 OO 的角度来看)。它并没有真正做其他界面语言已经做的任何事情,但它让人们能够设计自己的定义。

像 X12 和 HL7 这样的界面语言是肯定存在的,但是使用 XML,人们可以根据他们各自的 AIX 或 AS/400 系统对其进行定制。

由于 HTML 导致标记语言占主导地位,因此 XML 很自然地会因为其易用性而被推到最前沿。

于 2008-09-22T17:25:34.520 回答
11

直接从马的嘴里说,XML 的设计目标是:

  1. XML 应该可以直接在 Internet 上使用。
  2. XML 应支持广泛的应用程序。
  3. XML 应与 SGML 兼容。
  4. 编写处理 XML 文档的程序应该很容易。
  5. XML 中可选功能的数量应保持在绝对最小值,理想情况下为零。
  6. XML 文档应该是易于阅读且相当清晰的。
  7. 应该快速准备 XML 设计。
  8. XML 的设计应正式、简洁。
  9. XML 文档应易于创建。
  10. XML 标记中的简洁性并不重要。

它之所以流行,是因为人们需要一个跨平台数据交换格式的标准。XML 可能有点臃肿,但它是一种非常简单的分隔文本数据的方法,并且它向后兼容现有的大量 SGML 系统。

您确实无法将 XML 与 CSV 进行比较,因为 CSV 是一种极其有限的数据表示方式。CSV 无法处理基本行列表之外的任何内容,并且没有层次结构的概念。

XML 并不难解析,一旦您编写或找到了一个不错的 XML 实用程序,在代码中处理也不难。

于 2008-09-22T17:47:05.623 回答
10

XML 不难解析,事实上它非常简单,因为有大量优秀的 API 可用于每种语言。

XML 本身并不臃肿,它可以根据需要尽可能简洁,但保持这种方式取决于您的模式。

XML 以逗号分隔的文本永远不能或不应该的方式处理分层数据集。

XML 是自文档化/描述性的,并且是人类可读的。为什么它是一个标准?嗯,首先,因为它可以标准化。CSV 不是(也不能是)标准,因为存在无限量的变化。

于 2008-09-22T17:24:17.783 回答
7
  • 您可以获得一个 xml 文件,并有机会通过阅读它来理解数据的含义,而无需单独规范您的 pre-xml 数据格式。
  • 工具可用于一般地处理 xml。以前,如果每个人都使用不同的文件格式:逗号分隔、二进制等。您需要编写一个自定义工具。
  • 您可以通过将新标签添加到具有默认值的架构中来扩展它。如果操作正确,xml 不会破坏所有解析 xml 但不知道标签的旧代码。这通常不适用于专有格式。
  • 可能使它流行的主要原因是它看起来有点像以前很多人都理解的 HTML。所以它变得流行,然后因为它很流行,它变得更流行,因为它很高兴与每个人都知道的一个标准一起工作。
  • 一件坏事是xml通常要大得多,因为所有的标签和它的基于文本的比以前使用的要大。但是,随着计算机现在变得更大,我们通常可以处理它以及它的价值交易规模以获得更好的自我描述数据。
  • 您可以下架将解析/写入 xml 的现成代码/库。
于 2008-09-22T17:26:28.340 回答
6

它有很多优点,也很少有缺点。主要问题是文件大小增加和处理速度变慢。但是,有以下优点:

  • 它是结构化的,所以你只写一次解析器
  • 它支持具有嵌套结构的数据(层次结构、树等)
  • 您可以在单个 XML 中嵌入多种类型的数据结构
  • 您可以使用标准语言(XSL ...)描述架构(数据类型等)
于 2008-09-22T17:26:16.653 回答
5

它支持标准化的查询语言 XPath 怎么样?这对我来说非常有用。

于 2008-09-22T17:30:27.877 回答
4

您还记得 XML 流行之前的日子吗?数据不容易互换——一个程序会采用 .csv 文件,下一个是 .xls,下一个是 EBSIDIC 格式的文件。XML 有其弱点,但它是结构化的,这使得它可以解析和转换。

正如您所指出的,CSV 文件非常便携。然而,对他们来说没有任何意义。第 (14) 列对我意味着什么?与 <customer id="14"/> 相反?

于 2008-09-22T17:21:03.873 回答
4

XML 的一些固有特性使其如此流行和有用:

  1. XML 表示一棵树,树状结构是编程中非常常见的模式。这是从 CSV 等基于记录的表示形式的进化飞跃,这得益于当今廉价的计算能力和带宽。

  2. XML 在人为因素(它是纯文本且相当易读)和计算实用性(简洁性、易于解析、表达性、可扩展性等)之间取得了很好的平衡。

于 2008-09-22T17:43:46.550 回答
4

XML 提供了一种非常直接的方式来表示数据。解析相当容易——它是一种非常规则的语法,适合直接递归下降解析。这使得数据消费者和生产者可以轻松地交换信息,而不必真正了解他们各自的应用程序和内部结构。

然而,这是一种非常低效的数据表示方式,并且容易被严重滥用。这方面的一个例子是我使用的对象接口,而不是导出特定对象的构造函数和属性,而是要求我以编程方式编写 XML 并将生成的 XML 传递给单个构造函数。同样,XML 不适用于可能需要随机访问而不创建附加编目系统的大型数据集(即,如果我有一千页 XML 文档,我将需要解析几乎整个文件才能到达第 999 页,假设页面数据是有序的),而我最好将实际页面数据放在一个或多个单独的文件中,并使用 XML 指向正确的文件或文件中的位置。

于 2008-09-22T18:04:16.157 回答
4

我还没有看到提到的是,不仅 XML 是结构化的,而且属性和元素交互的方式创建了一种不寻常的结构,但人类仍然很容易理解。

如果您将 XML 树与其最近的结构邻居(有向无环图)进行比较,您可能会注意到典型的 DAG 在每个节点处仅携带一个 ID 和一个值。XML 也携带这一点(gi/tag 对应于 ID,节点的文本对应于 value),但是每个节点也可以携带任意数量的附加元数据:元素。这与拥有一个额外的维度非常相似——如果您认为 DAG 以每个分支在二维中展开,则 XML 文档在三个维度中展开,展开,然后向下到仅包含属性的子树。

这是结构的可选弯曲。像任何子元素列表一样遍历属性列表,您将回到二维树。完全忽略它们,您将拥有一个简化的节点/值树,它可能更纯粹地代表包含数据的整体“形状”。但是,如果您需要元数据,则存在额外的维度。

有了不错的缩进,人类只需通过观察原始数据就可以了解这一点,使 XML 成为潜在复杂结构的微型可视化工具 - 并且在应用程序的数据交换中内置可视化工具意味着程序员参与的人更有可能构建一个代表数据可能被使用方式的结构。

于 2008-09-24T15:08:55.640 回答
2
  1. 模式定义语言 - 您可以描述 XML 的预期格式
  2. 这是一个标准:) - 它绝对比使用自己的自定义格式的每个人都好

CSV 是人类可读的,但这确实是它唯一的好处 - 它非常不灵活,并且没有为这些值分配任何含义。如果我现在开始设计一个系统,我肯定会改用YAML - 它不那么臃肿,而且肯定会获得动力。

于 2008-09-22T17:23:38.457 回答
2

XML 与二进制数据相比的另一个好处是错误恢复能力。

对于二进制数据,如果单个位出错,数据很可能无法使用,使用xml,作为最后的手段,您仍然可以打开它并进行更正......

于 2009-09-15T20:55:40.647 回答
1

XML 的流行源于其他标记语言。HTML 是人们最熟悉的一种,但现在我们越来越多地看到“降价”语言,例如 wiki 甚至 stackoverflow 帖子表单所使用的语言。

HTML 在格式化文本方面做了一项有趣的工作,但这还不够。它长大了。人们想为所有东西添加标签。<眨眼> 有人吗?布局、样式甚至数据。

XML 是一种可扩展的标记语言(呃,对吧?),其设计目的是让任何人都可以创建自己的标签,并且您的 RECORD 标签不会干扰我的 RECORD 标签,以防它们具有不同的含义,并且对HTML 的编码、标签匹配和转义问题。

一开始,它受到已经了解 HTML 的人的欢迎,并且喜欢使用标记来组织数据的熟悉概念。

于 2008-09-24T14:39:55.883 回答
1

它是跨平台的。我们用它来编码机器人控制程序和在 VxWorks 下运行在 C 中的数据以供执行,但是我们的离线编程是在 dot net 下完成的。两者都很容易解析 XML。

于 2008-09-24T14:50:32.037 回答
1

它是结构化的。

于 2008-09-22T17:18:07.173 回答
0

它与许多语言兼容

于 2008-09-22T17:20:22.707 回答
0

It is a text format that is one of it's major advantages. All binary formats are usually much smaller but you always need tools to "read" them. You can simply open and editor and modify XML files to your liking. However I'd argue it's stil a bloated format, but well you can compress it quite well.... if one looks at the specs for the Windows Office XML formats one just can imagine it's wonderful to be seemingly open....

Regards Friedrich

于 2008-11-06T16:31:04.060 回答
0

与以前的一些标准相比,这是一个梦想。尝试编写 HDF(分层数据格式)文件或 FITS。FITS 在磁盘驱动器发明之前就已标准化——您必须担心将文件填充为块大小!
甚至 CSV 也没有那么简单。快速提问,德语 CSV 文件中的分隔符是什么?

许多关于 XML 的抱怨来自使用它在数据仅存在几毫秒的机器之间直接传输数据的人。在很多领域,数据必须持续 50 到 100 年,并且比运行它的机器更有价值。有时支付结束标签税是值得的。

于 2008-09-24T15:02:16.360 回答
0

它赋予的主要优势是分层数据的系统独立表示。逗号分隔的文本和属性文件在许多使用 XML 的地方更合适,但表示复杂数据结构和数据类型、字符集意识和标准文档的能力使其可以用作良好的应用程序间交换格式。

我对语言的小改进建议是改变结束标签的工作方式。</>想象一下,如果你可以用 结束标签,<my_tag>blah</>而不是 < ,将节省多少带宽和磁盘空间my_tag>blah</my_tag>。你不允许有重叠的标签,所以我不知道为什么标准坚持比它需要的更多的文本。事实上,为什么要使用尖括号呢?

尖括号的丑陋很好地展示了它本来可以是什么:JSON。JavaScript Object Notation 以更少的输入实现了 XML 的大部分目标。另一种使 XML 可以接受的替代语法是 Builder 语法,它被 Groovy 和 Ruby 使用。它更加自然和可读。

于 2008-09-22T17:59:23.207 回答
0

我猜它的流行最初源于这样一个事实,即它以一种对足够大的玩家获得他们的支持并因此获得广泛的行业采用并不算太糟糕的方式解决了正确的问题。在这一点上,由于围绕 XML 进行了如此多的组件开发投资,因此它已相当牢固地嵌入到环境中。MS BizTalk Server(和 BizTalk 本身)附带的 HIPPA 和其他 EDI XML 模式和适配器是逐渐建立在 XML 之上的山的一个很好的例子。

于 2008-09-22T18:06:25.310 回答
0

使 XML 被广泛采用的两个主要因素是“人类可读性”和“Sun Microsystem”。它们曾经是(并且仍然存在)其他跨语言、跨平台的数据交换格式,这些格式比 XML 更灵活、更易于解析、更简洁。如ASN.1

于 2008-09-24T15:14:51.773 回答
-1

由于有可用的工具,为 XML 方言编写解析器比为任意方言编写解析器更容易。

例如,使用 DOM 解析器比 lexx 和 yacc 简单得多,尤其是在它流行的 Java 中。

于 2008-09-22T17:21:01.097 回答