【编者按】本文作者 Yegor Bugayenko 是 Teamed.io 公司的联合创始人,在软件质量和工程管理方法领域有深入的研究。本文中,作者通过对比 JSON ,向大家更详细地阐述了 XML 的四大特性,帮助大家在搭建项目时选择适合的数据格式类型。
很多人都在心里纠结,如果 JSON 和 XML 相比,谁更好谁更快?在接下来的新项目中到底选择哪一个?别傻了!完全没有可比性。就像自行车和 AMG S65 ,你能说哪个更好吗?虽然两者都是交通工具,但有些情况下,自行车反而更便捷。所以 JSON 和 XML 也一样,它们都各有所长,完全没有必要进行比较。
下面举一个简单的 JSON 数据(140个字符):
{ "id": 123, "title": "Object Thinking", "author": "David West", "published": { "by": "Microsoft Press", "year": 2004 } }
同样的数据在 XML 中会表示如下(167个字符):
<?xml version="1.0"?> <book id="123"> <title>Object Thinking</title> <author>David West</author> <published> <by>Microsoft Press</by> <year>2004</year> </published> </book>
很容易看出其中的区别,前者更简洁更容易理解,而且能在JavaScript 中能完美解析。所以,我们便可以简单粗暴地放弃 XML 选择 JSON 了吗?谁还会需要已历时15年的重量级语言呢?
但恰恰相反,本人就非常喜爱 XML ,且听下文分解。
但千万别误会,本文并不是在反对 JSON 。 JSON 的确是很好的数据格式,但它仅仅只是一种数据格式,经常被临时用于将数据从 A 点传到 B 点。它比 XML 更简短易读,但仅此而已。
XML 是一种非常强大的语言,而非只是单纯的数据格式。相对于 JSON 和其他简单的数据格式来说,如 YAML ,XML 至少有以下四个重要特性。
为了从文档中得到上文类似的出版年份,只需要发送一个简单的 XPath 请求:/book/published/year/text() 。但是,必须得有一个 XPath 处理器来解析请求并返回2004。好就好在 XPath2.0是集 functions、predicates、axes 等为一体的强大检索引擎,在不用 Java 代码编写任何遍历的逻辑的情况下,就可以在 XPath 请求中以自然语言形式加入任何逻辑,例如,你可以直接发出请求 “How many books were published by David West in 2004?” ,便能通过 XPath 得到答案。而这是 JSON 所不能做到的。
Attributes and Namespaces
可以将 metadata 加到 XML 数据中,正如上面的 id 属性一样。数据保存在元素中,例如图书作者的姓名,而 metadata(数据的数据)应该保存为属性,这会大大有利于组织和结构化信息。最重要的是,元素和属性都可以标记为属于某个 namespaces ,当多个应用使用同一 XML 文档时,这种技术的优势会非常明显。
XML Schema
试想这样的情况,当你在一台机器上创建了 XML 文档,在其他电脑上做了数次修改,然后又传到别的电脑上使用,所以必须确保文档结构没有被中间操作所破坏。比如可能有人用 4620f01c9fab72e23a9b679732106cc4 保存出版日期,但别人又可能使用 ISO-8601 格式的 1d78a9a384cca7aba89b0d5f2a964e41 。为了避免这样的结构混乱,我们可以创建一个说明文档 XML Schema ,和主文档一起进行保存。在每次操作主文档之前,都需要通过 schema 文件检查其正确性,这是生产过程中的一种集成测试。 RelaxNG 也是类似的机制,但会简单很多,如果觉得 XML Schema 太过复杂不妨尝试用 RelaxNG。
XSL
事实上,可以不用任何 Java/Ruby 等代码就能完成 XML 文档的修改。简单的说,你只需要创建一个 XSL transformation 文档并将其应用于原始 XML ,然后得到一个新的 XML 。 XSL 语言(纯功能性语言)是专为分层数据操作设计的,它比 Java 或任何其他面向对象/过程的语言都更适合这一任务。借助 XSL 可以将 XML 转换为任何形式,包括纯文本和 HTML 。很多人抱怨 XSL 太复杂,但其实没那么难, XSL 的核心功能其实很简单,大家不妨一试。
以上所述并不是 XML 的全部特征,但这四大特性的确用途非凡。它们不仅可以让文档的“自给自足”,还能进行自我验证(XML Schema),进而知道如何修改(XSL),最后还能方便地获得其中的文档内容(Xpath)。
同时,市面上还有很多以 XML 为基础发展的语言、标准和应用,包括 Xforms、 SVG、 MathML、 RDF、 OWL、 WSDL 等。但一般的主流项目中都不会用到,因为它们的针对性都太强。
设计 JSON 的用途并非是满足以上特性,尽管 JSON 领域现在努力尝试,包括用于查询的 JSONPath 、一些转换工具和用于验证的 json-schema ,但和强大的 XML 相比这只是微不足道的模仿,笔者并不认为会有长远发展,而且迟早会消失殆尽。
综上所述, JSON 是一种没有过多附加功能的简单数据格式,其最佳的使用情况是在 AJAX 下,除此之外,本人都强烈推荐大家使用 XML。
OneAPM 为您提供端到端的 Java 应用性能解决方案,我们支持所有常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,Java 监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客。
以上是JSON和XML-不可同日而语的详解的详细内容。更多信息请关注PHP中文网其他相关文章!

XML在RSS中具有结构化数据、可扩展性、跨平台兼容性和解析验证的优势。1)结构化数据确保内容的一致性和可靠性;2)可扩展性允许添加自定义标签以适应内容需求;3)跨平台兼容性使其在不同设备上无缝工作;4)解析和验证工具确保Feed的质量和完整性。

RSS在XML中的实现方式是通过结构化的XML格式来组织内容。1)RSS使用XML作为数据交换格式,包含频道信息和项目列表等元素。2)生成RSS文件需按规范组织内容,发布到服务器供订阅。3)RSS文件可通过阅读器或插件订阅,实现内容自动更新。

RSS的高级功能包括内容命名空间、扩展模块和条件订阅。1)内容命名空间扩展RSS功能,2)扩展模块如DublinCore或iTunes添加元数据,3)条件订阅根据特定条件筛选条目。这些功能通过添加XML元素和属性实现,提升信息获取效率。

rssfeedsusexmltoStructureContentUpdates.1)xmlProvidesHierarchicalStructurefordata.2)theelementDefinestHefEed'sIdentityAndContainsElements.3)ElementsRementsRementsRepresSentividividividualContentpieces.4)rsssissisexisextensible,允许custemements.5)5)

RSS和XML是用于网络内容管理的工具。RSS用于发布和订阅内容,XML用于存储和传输数据。它们的工作原理包括内容发布、订阅和更新推送。使用示例包括RSS发布博客文章和XML存储书籍信息。

RSS文档是基于XML的结构化文件,用于发布和订阅频繁更新的内容。它的主要作用包括:1)自动化内容更新,2)内容聚合,3)提高浏览效率。通过RSSfeed,用户可以订阅并及时获取来自不同来源的最新信息。

RSS的XML结构包括:1.XML声明和RSS版本,2.频道(Channel),3.条目(Item)。这些部分构成了RSS文件的基础,允许用户通过解析XML数据来获取和处理内容信息。

RSSFEEDSUSEXMLTOSYNDICATECONTENT; PARSINGTHEMINVOLVESLOADINGINGINGINGINSSTRUCTURE,andExtractingData.ApplicationsIncludeBuildBuildingNewSagGregatorSaterNewSagGregatorSator andTrackingPodcastepodcastepisodes。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

WebStorm Mac版
好用的JavaScript开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版