什么是XML的良好替代数据格式?

时间:2020-03-05 18:47:45  来源:igfitidea点击:

授予XML是非常有用的,但是可能很冗长。有哪些替代方案,它们是否专门用于任何特定目的?图书馆支持轻松查询内容是一大优势。

解决方案

回答

似乎有很多对JSON的多平台支持。

回答

如果我们不需要将属性应用于元素,则S-Expressions效果很好。另一种选择是YAML。

回答

不要忘了YAML!

JSON似乎有更好的支持。例如,Prototype JS库具有出色的内置JSON函数。

回答

杰夫(Jeff)在"尖括号税"(The Angle Bracket Tax)上的文章总结了许多替代方法(嗯,主要是YAML),并引导我进入有关轻量标记语言的Wiki文章。

更新:尽管对于某些应用程序,YAML可能是XML的"替代品",但正如我首先想到的那样,两者不是同构的。

实际上,它"不是标记语言"。

此外,YAML看上去并不像"轻量级"。对于可以用纯XML表示的文档(例如Jeff的示例),YAML显然不那么冗长。但是YAML提供了许多其他专门的结构,它所包含的字符和序列比XML保留的要多得多。

底线是,如果我们要查找不带尖括号的XML,则不是YAML。

回答

我不会关闭CSV或者制表符分隔的纯文本格式。

回答

为了完整起见,我会提到Edifact,我很久以前就为此写了一个接口。

回答

JSON是有效的YAML,可能非常有用。二对一!

回答

XML通常用于配置,在这种情况下,还有一些其他常用的简单存储格式(较少面向文档):

  • .property文件
  • INI文件

根据平台和语言的不同,有两种读写方式。

回答

我们要如何处理数据?存放吗?通过它吗?显示吗?这些问题将推动我们寻找合适的技术。仅仅询问我们应如何格式化数据就好比询问我们应使用哪种语言进行编程,而无需指定要完成的工作。

对于大多数数据任务,Codd博士可以解决:http://en.wikipedia.org/wiki/Edgar_F._Codd。数据库应该能够执行我们所想到的几乎任何事情。

如果我们要传递它,我建议我们使用纯文本。当我们滚动自己的二进制格式时,解析器将消失,数据也会消失。

对于纯文本,更深层的问题是元数据的放置位置。它应该在数据文件的外部还是内部("自我描述")。

例如,XML是纯文本,但是源代码也是如此。对于源文件,有一个关于语法和语义的详细说明,而XML应该是自描述的。问题是事实并非如此。此外,它是从文档表示和标记的基础上发展而来的,但是现在被滥用于各种数据序列化,传输和存储。

回答

如果我们以DSL的角度询问,Guide Scheme可能会有所帮助,正如S表达式已经建议的那样。

我个人也将JSON用于AJAX事务。

回答

HDF5是一种非常紧凑的数据格式,具有与xml类似的某些特征。 .net库有很多不足之处,但是格式在大小和性能方面都可以很好地扩展。

回答

I wouldn't dismiss plain text, like CSV or tab-delimited.

我真的在寻找具有定义的结构和(跨平台,多语言)库支持的替代方案。我对研究不同的设计及其优缺点感兴趣。我喜欢可以具有文本和"二进制"(紧凑,"编译",快速I / O,较小占用空间)格式的格式的想法。拥有库的优点是它们执行解析,并可能为我们执行额外的数据操作/验证。

尽管这么说,但绝对可以使用.ini,.plist和CSV等简单格式。我们不必总是用锤子敲碎螺母。

回答

但是要付出什么代价呢?

在许多情况下,我全都支持JSON,尤其是在需要考虑重量或者客户端工作的情况下,但是从XML移走将失去可读性(在那些配置文件中如此重要)以及XSLT和XPath等未来问题解决方案的强大功能。务必确定为什么以及何时离开:这是事实上的标准,这是有原因的。

(此外:我的习惯是在内部使用XML,然后将其转换为JSON,这是所需的输出)

回答

我使用XML的工作几乎都是以文档为中心的XML,它必须对任意嵌套结构的长序列进行建模。我还没有使用过JSON,但是我的印象是,使用类似文档的数据很麻烦,但是如果使用类似记录的数据则适应性很好,甚至很优雅。在做出决定时,请考虑数据的形状。

回答

异端! XML是数据之王。
对篡夺者说不,请昂首阔步!
XML万岁!

但是如果只需要数据,请认真使用Json,以获得支持和优雅,但是如果我们需要格式化,xpath(例如查询,其他元数据等),则请坚持使用XML

注意:我使用Xml进行配置系统生成代码和执行类似的任务,但是使用Json进行Rpc,Sql进行查询和持久化,最后使用Yaml进行日志记录和快速任务,换句话说,根据需要选择适当的格式。

回答

我们可以尝试使用Google的protobuf。它比XML快得多。有C,C ++,C#,Java和Python的库(有针对ruby和perl的alpha versons)。但这是二进制的。

回答

XML适用于文本标记,但对于通用结构而言,序列化是一个非常糟糕的选择,JSON更适合于此。