在XML成为标准并存在所有缺点之前,是什么使XML如此流行?

时间:2020-03-06 14:33:07  来源:igfitidea点击:

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

XML肿,难以解析,难以在代码中进行修改以及我可以考虑的大量其他问题。

我的问题是,使XML如此流行的最吸引人的品质是什么????

解决方案

它是结构化的。

它与多种语言兼容

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

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

我们还记得XML流行之前的日子吗?数据只是不容易互换-一个程序将使用.csv文件,下一个.xls和下一个EBSIDIC格式的文件。 XML有其弱点,但是它是结构化的,这使其可解析和可转换。
如我们所指出的那样,CSV文件具有很好的可移植性。但是,它们对他们没有任何意义。专栏(14)对我意味着什么?而不是<customer id =" 14" />?

  • 模式定义语言-我们可以描述XML的预期格式
  • 这是一个标准:)-绝对比使用他们自己的自定义格式的每个人都要好

CSV是人类可读的,但这真的是唯一的好处,它是如此的僵化,并且没有为这些值分配任何含义。如果我现在开始设计一个系统,我肯定会使用YAML,它会变得不那么肿,而且势必会越来越强劲。

鉴于在阳光下每种语言都可以使用的优秀API数量众多,因此XML解析起来并不难,实际上,它非常简单。

XML本身并不是ated肿的,它可以根据需要尽可能简洁,但是由模式决定是否保持这种状态。

XML以一种以逗号分隔的文本永远不会也不应出现的方式处理分层数据集。

XML是自记录/描述的,并且易于阅读。为什么是标准?好吧,首先,因为它可以标准化。 CSV不是(也不能是)标准,因为存在无数种变化。

到了90年代后期,互联网开始炙手可热,但是公司所拥有的系统无法接近互联网。他们花了无数小时来处理CORBA,并计划使用Enterprise JavaBeans使这些较旧的系统与较新的系统进行通信。

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

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

因此,考虑到XML是结构化的,并且我们可以随意定义该结构,它自然允许我们构建接口(从非OO角度来看)。它实际上并没有做其他接口语言已经做过的任何事情,但是它使人们能够设计自己的定义。

确实存在诸如X12和HL7之类的接口语言,但是使用XML的人可以根据自己的AIX或者AS / 400系统对其进行定制。

而且由于HTML导致标记语言的优势,很自然,由于XML的易用性而将XML推到了最前沿。

它具有许多优点,并且缺点很少。主要问题是文件大小增加和处理速度变慢。但是,有一些优点:

  • 它是结构化的,因此我们只需编写一次解析器
  • 它支持具有嵌套结构(层次结构,树等)的数据
  • 我们可以在单个XML中嵌入多种类型的数据结构
  • 我们可以使用标准语言(XSL ...)描述架构(数据类型等)

  • 我们可以得到一个xml文件,并有机会通过读取数据来理解数据的含义,而无需单独指定pre-xml数据格式。
  • 可以使用工具来通用地使用xml。在以前的情况下,如果每个人都使用不同的文件格式:逗号分隔,二进制等。则需要编写一个自定义工具。
  • 我们可以通过使用默认值将新标签添加到架构中来扩展它。如果操作正确,使用xml不会破坏解析xml的所有旧代码,但不会知道该标记。对于所有权格式,通常情况并非如此。
  • 可能使它流行的主要原因是它看起来有点像HTML,很多人以前都了解它。所以它变得流行,然后因为它变得流行而变得更流行,因为它很好地适用于每个人都知道的一个标准。
  • 不好的是,由于所有标签以及基于文本的文本,xml通常比以前使用的要大得多。但是,由于现在的计算机越来越大,我们经常可以处理它以及它具有值得交易的大小,以拥有更好的自描述数据。
  • 我们可以下架将解析/编写xml的现有代码/库。

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

它实际上很容易解析的原因之一是因为它"膨胀"。这些结束标记意味着我们可以准确地将元素的结尾与开始匹配,并在树变得不平衡时进行计算。我们无法在JSON之类的"轻量级"替代方案中做到这一点。

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

而且,不要忘了它附带的其他伪像,例如定义的描述和验证机制(XSD)以及功能强大的声明式转换机制(XSLT)。

它支持标准化查询语言XPath的事实如何?对我来说非常有用。

XML的一些固有特质使它如此流行和有用:

  • XML表示一棵树,树状结构是编程中非常常见的模式。这是从基于记录的表示形式(例如CSV)演变而来的飞跃,而今天的廉价计算能力和带宽使之成为可能。
  • XML在人为因素(纯文本,相当清晰)与计算实用性(简洁,易于解析,表达性,可扩展性等)之间取得了良好的平衡。

直言不讳,XML的设计目标是:

XML shall be straightforwardly usable over the Internet.  
  XML shall support a wide variety of applications.  
  XML shall be compatible with SGML.  
  It shall be easy to write programs which process XML documents.  
  The number of optional features in XML is to be kept to the absolute minimum, ideally zero.  
  XML documents should be human-legible and reasonably clear.  
  The XML design should be prepared quickly.  
  The design of XML shall be formal and concise.  
  XML documents shall be easy to create.  
  Terseness in XML markup is of minimal importance.

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

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

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

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

我对该语言的次要改进建议是更改结束标签的工作方式。试想一下,如果我们可以使用&lt;/>结尾的标签(如<my_tag> blah </>而不是&lt;my_tag> blah </ my_tag>`)来节省多少带宽和磁盘空间。不允许我们使用重叠的标签,因此我不知道为什么该标准坚持要求提供更多的文本。实际上,为什么要完全使用尖括号呢?

尖括号的丑陋很好地显示了它可能是什么:JSON。 JavaScript对象表示法以更少的输入实现了XML的大多数目标。 Groovy和Ruby使用的另一种使XML可以使用的替代语法是Builder语法。它更加自然和可读。

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

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

我猜想它的流行首先源于以下事实:它解决了正确的问题,而对于足够多的大型企业来说,获得足够的支持并因此获得了广泛的行业采用并不算太糟糕。此时,由于围绕XML进行了大量的组件开发投资,它已被牢固地嵌入到环境中。 MS BizTalk Server(以及BizTalk本身)附带的HIPPA和其他EDI XML架构和适配器是在XML之上逐步构建的典型例子。

XML的流行源于其他标记语言。 HTML是人们最熟悉的一种语言,但现在越来越多地看到诸如Wiki甚至stackoverflow帖子形式使用的"降价"语言。

HTML在格式化文本方面做得很有趣,但是还不够。它成长了。人们想为所有内容添加标签。 <BLINK>有人吗?布局,样式,甚至数据。

XML是可扩展的标记语言(不是吗?),其设计目的是使任何人都可以创建自己的标签,并且即使它们的含义不同并且对代码敏感,RECORD标签也不会干扰我的RECORD标签。 HTML的编码,标签匹配和转义的问题。

刚开始,它在已经知道HTML的人中很流行,并且喜欢使用标记来组织数据的熟悉概念。

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

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

关于XML的许多抱怨来自使用XML在仅存在毫秒数据的机器之间直接传输数据的人。
在许多领域,数据将必须持续50-100年,并且其价值远远超过其运行的机器。有时值得支付关闭标签税。

我还没有提到的是,不仅XML是结构化的,而且属性和元素之间的交互方式还创建了某种不寻常的结构,人类仍然可以轻松理解。

如果将XML树与其最接近的结构邻居(有向无环图)进行比较,我们可能会注意到典型的DAG在每个节点上仅携带一个ID和一个值。 XML也带有此标记(gi / tag与ID对应,节点的文本与值对应),但是每个节点还可以携带任意数量的添加元数据:元素。如果我们认为DAG在每个分支的二维平面内展开,则XML文档非常像一个额外的维度,XML文档在三个维度上平面展开,然后向下扩展至仅包含属性的子树。

这是对结构的可选弯曲。遍历属性列表,例如任何子元素列表,我们将回到二维树。完全忽略它们,我们将拥有一个简化的节点/值树,它可能更纯粹地表示所包含数据的整体"形状"。但是,如果需要元数据,则可以使用额外的维度。

有了适当的缩进,人们就可以通过盯着原始数据,使XML成为用于潜在复杂结构的微型可视化工具,并在应用程序的数据交换中内置可视化工具,来使程序员参与其中。更有可能建立一个表示数据使用方式的结构。

使XML被广泛采用的两个主要方面是"人类可读性"和" Sun Microsystem"。它们是(现在还有)其他跨语言,跨平台的数据交换格式,它们比XML更灵活,更易于解析,更冗长。如ASN.1.

这是一种文本格式,这是它的主要优点之一。所有二进制格式通常都小得多,但是我们始终需要工具来"读取"它们。我们可以根据自己的喜好打开并编辑和修改XML文件。但是,我认为这是一种过时的格式,但是我们可以很好地压缩它....如果我们看一下Windows Office XML格式的规范,就可以想象打开它似乎很棒...

问候
弗里德里希

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

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