XML在哪些方面表现出色,以及何时应该使用它?
XML的用途是存储异构树结构,在可以应用通用工具并且冗余性是可取的情况下使用。如果您正在进行现代Web开发,那么您很可能正在生成XHTML而不是HTML,并且正在生成RSS或Atom,所以您应该已经在使用它。最常见的RDF格式都使用它。
JSON在处理Web上的数据时更容易使用,但是它的功能集不如XML-您不能在JSON中使用属性,因此数据和元数据之间没有隐含的区别,并且您没有处理指令或创建重复文本块的实体的能力。另一方面,许多XML的用途也不使用这些功能。SQL数据库具有固定的模式,不能很好地表示树。
大多数情况下,XML用于实现互操作性。
如果他正在进行Web开发,那么很有可能他正在生成以text/html
发送的无效XHTML
。个人意见:)
“JSON中不能有属性”如何:{ "firstAttribute": "value1", "secondAttribute": "value2", "content": [ /*blah*/] }
?这些属性本身可以是对象,而在XML中它们只能是字符串。
-您的示例将被表示为XML:
Prime-但我之所以称它们为firstAttribute
等,是因为它们表示XML中通常由属性表示的任何内容。如果元数据值得支持,那么为什么要提供一个无法支持结构但只能支持字符串值的残缺设施呢?
Earwicker XML中没有“字符串”。属性的内置类型是CDATA,NMTOKEN,NMTOKENS,粗略地说是字符数据,枚举值或枚举值列表。但这些字段不是元数据,它们是数据。您始终可以使用字段的名称来表示它们是属性,但这是一种解释,而不是文本,结构性标记(元素标签)和元数据(属性)之间的区别。
Kirkham-也许我表达不清楚。属性值无法利用XML中其他地方可用的递归结构特性,通过嵌套元素(或简单地说,它是任何熟悉编程语言的人所理解的“只是一个字符串”)。为什么假定结构在元数据中比在普通数据中更有用?无论如何,有许多标准用途使用XML属性,您声称它们是元数据似乎非常可疑,例如在XHTML中,关于img
的所有内容都在属性中指定。
Earwicker您一定是唯一一个抱怨XML不够复杂的人!传统上,属性的用例(在SGML,HTML等中)不需要复杂类型,因此它们没有被表示,只是字符数据,枚举值或枚举值列表。我更希望其他部分被留下(DTD),并且实体机制与文档类型机制分离,但是这就是现实。
Kirkham-再次,我可能表达不清楚。我不是建议属性应该变得更复杂,以便像XML的其余部分一样强大,我建议相同的机制可以并且应该用于元数据和数据,因为如果元数据受到严格限制,则表示元数据的特殊方法没有优势。 (我认为自我描述的XML中明显缺失的“必要复杂性”是:具有命名成员的记录和具有有序项目的列表是无法区分的。但是尝试在XML中修复这个问题是没有意义的。)
Earwicker鉴于所说的机制显然很有用,并且在Web标记的主要用例中字符数据被提供给用户代理而元数据(例如与CSS类对应的枚举值列表)不被呈现,我不同意。
Kirkham-“在Web标记的主要用例中”,我完全同意您的观点。但是在您在答案中提到的第一个用例中,“用于存储异构树结构”,文本+标记的SGML模型对于这个问题是无用的。它不适用于该问题。不幸的是,这是XML专门的最流行的用例,比XHTML在现实世界中更普遍。
Earwicker我非常小心地说“XML的用途是...”而不是“XML特别适用于...”或“XML被设计用于...”。瑞士军刀是有用的,但当然不是最佳选择。
XML是一种非常轻量级的数据交换格式,适用于在前端传递数据。它具有描述性标签,使得在原始格式中更易于阅读。如果我想要一个从程序中加载的设置文件,我会选择XML文件格式。虽然我个人这样认为,但我相信还有更深入的原因可以选择一种格式而不是另一种,只是我没有足够的经验来列举出来。然而,我找到了一些站点,提出了一些好观点。
有人说XML不支持数组,这是什么意思?真可惜你删除了关于数组的部分。确实,XML不支持数组(就是说,它没有提供内置的特定功能来使其自描述)。相反,XML(滥用)相同的语法用于具有有序未命名成员的数组和具有命名成员的记录对象。XML需要模式的首要原因就是为了克服这个限制!
这是我第一次尝试为别人提问的答案,我感到有些慌张(我只是一直在提问,觉得有点不好意思,但是嘿,我在学习嘛),但这是一些很好的信息。谢谢你为我解答。
嘿,我感谢你的努力!不要担心这些小事情。再次感谢你分享你的观点和这些好链接。:)
提供的两个链接都不存在了。是否有存档可供查阅?