为什么字符是`<';不允许在xml属性中使用?

为什么字符是`<';不允许在xml属性中使用?,xml,Xml,我真的不明白,为什么字符这个简短(可能是唯一)的答案是,这是在编写XML规范时做出的设计决策 XML的设计初衷是要有一套清晰的规则,这些规则可以在没有任何可能的歧义的情况下严格执行。其中一条明确的规则是所有出现的和&必须转义到实体中 是的,他们本可以允许在不需要逃避的情况下,但他们没有设计一种语言来让人类易于书写;他们设计它是为了便于计算机生成和解析。规则的严格性就是这样的结果。正确生成的XML将正确解析,因为不存在歧义 无论如何,这是一个已经做出的决定,永远不会改变。这就是XML的方式,因此这

我真的不明白,为什么字符
这个简短(可能是唯一)的答案是,这是在编写XML规范时做出的设计决策

XML的设计初衷是要有一套清晰的规则,这些规则可以在没有任何可能的歧义的情况下严格执行。其中一条明确的规则是所有出现的
&
必须转义到实体中

是的,他们本可以允许在不需要逃避的情况下,但他们没有设计一种语言来让人类易于书写;他们设计它是为了便于计算机生成和解析。规则的严格性就是这样的结果。正确生成的XML将正确解析,因为不存在歧义

无论如何,这是一个已经做出的决定,永远不会改变。这就是XML的方式,因此这些是您必须遵循的规则


有大量的系统生成的“XML”违反了这些规则。这很奇怪,因为几乎所有语言都有一个API来生成格式正确的XML。因此,我们只能假设生成损坏的XML的任何系统都是“手动”生成的;即不使用lanugage提供的API。这是一个直接的危险信号,表明系统是由一个真正不知道自己在做什么的开发人员编写的。有这么多这样的系统存在,这是对全世界代码总体质量的可怕控诉。

@Spudley为我指出了正确的方向:

如果允许
内部属性

<tag attribute="value'/> <tag attribute='value"/>


将是有效的xml,但很可能并不代表作者的意图。虽然机器永远不会犯这种错误,但在编写了这段代码并且没有得到解析器预期的解释后,人类可能会暂时感到困惑。因此,不允许使用这些字符的原因只能是人类的可读性。

用于转义这些字符的代码可能已经适用于您正在使用的框架。@Codor是的,您是对的。但是在违反XML标准之前,我想了解XML标准的设计决策背后的基本原理。非常感谢您的回答。然而,我仍然不明白不允许明确的字符(在属性上下文中)是如何增加机器可读性的。这难道不需要更复杂的解析规则才能拒绝格式错误的属性吗?如果您想知道当您允许语言中存在歧义时会发生什么,请查看HTML的历史记录。浏览器引擎竭尽全力处理无效或模棱两可的代码,最终导致多年的浏览器怪癖,网站在不同的浏览器中看起来不同。XML规范编写者明确地试图在XML中避免这些问题。XML是一种面向数据的语言;您负担不起在数据中出现这种特定于实现的问题。在表示上下文中这已经够糟糕的了,但是XML所用于的跨系统通信是不允许的。我并不反对任何机器语言都不应该有歧义的观点。但是如何允许
HTML中的经典情况是忘记关闭引号,因此下一个标记流入属性。HTML解析器试图处理这类事情,取得了不同程度的成功——我们都见过在一个浏览器中看起来不错,但在另一个浏览器中完全崩溃的页面。XML是一种面向数据的语言:从一个系统传输到另一个系统的数据必须正确解析;你不能有这样的解析怪癖。在HTML中,浏览器看到的是一个破损的页面,这已经够糟糕的了,但如果将关键任务数据导入到公司的主数据库中,情况会更糟。但这不是解析器试图补偿有缺陷的输入而不是语言中的模糊性的问题吗?我认为未关闭的引号应该导致解析错误,而不是不可预见的错误。