我认为大体上的区别很明显,内森和肖恩的回答是准确的。提出问题的不清楚的极端案例是这样的:
我从长期使用 XML 得到的印象是,对于非格式良好的 XML 片段,有效性问题是未定义。但我无法从 XML 规范中证明这一点。
理论上
XML 规范中的official definition of "valid" 是:
定义:如果 XML 文档有关联的文档,则它是有效的
类型声明以及文档是否符合约束
在里面表达出来。
请注意,此定义以“一个 XML 文档”开头。一个XML document is defined as:
定义:如果数据对象是格式良好的,那么它就是一个 XML 文档,如
在本规范中定义。另外,XML 文档是有效的
如果它满足某些进一步的限制。
这意味着上面对“有效”的定义只适用于XML文档,即格式良好的数据对象。关于不是(格式良好的)XML 文档的数据对象,“有效”的定义没有说明任何内容。
仍然存在各种解释学问题......
我们是否认为上述有效定义是详尽无遗的……也就是说,我们是否假设没有其他关于有效性的文章是确定的? (如果是,我们忽略基于XML Schema或RelaxNG等的in/validity)
我们是否将“如果”视为“仅当”?例如。没有 DTD 的格式良好的 XML 文档也可以被认为是有效的吗?如果格式不正确的 XML 文档符合其关联的 DTD,是否可以认为它是有效的? (Bob DuCharmes seems to say 这个定义的意思是“仅当”:“XML 规范明确规定有效文档必须格式良好[强调我的]。”)
我们可以假设每个不是“有效”的 XML 文档都是“无效的”吗?我想是这样。但是每个数据对象呢?例如。是否存在未定义的有效性状态? XML 规范从未定义术语“无效”,为解释留下了一些余地。很明显,如果 X 无效,则它无效。但反过来:如果 X 无效,是否意味着它一定是无效的?
看看规范之外的受人尊敬的 XML 专家...
Bob DuCharme writes 认为一个 XML“无效的文档......可能仍然是格式良好的......”,暗示一个无效的 XML 文档可能不是格式良好。但是,“无效”是否与“无效”相同?此外,according to the spec,XML 文档 根据定义是格式良好的。所以从技术上讲,一个无效的XML 文档必须仍然是格式良好的。我相信 DuCharme 在这里使用的术语有些松散。
我们还需要牢记 SGML 后裔语言的更广泛背景,包括 HTML。 This web page 给出了 XHTML 页面的示例,根据 W3C 验证器服务它认为这些页面是有效的,但格式不正确。但是当我run them by the validator service 时,它并没有说它们是有效的。
在实践中
实际上,任何验证引擎都很难处理格式不正确的 XML。它必须首先“纠正”输入数据,猜测预期的正确 XML 结构应该是什么,并且该过程没有官方规范。因此,实现之间的结果可能会有很大差异。验证将依赖于实现。
结论
出于这个原因,我想说的是,出于所有实际目的,如果数据对象不是(格式正确的)XML 文档,则声称数据对象是无效的 XML 是一种误导。如果您的意思是传达(如在the case of the unescaped ampersand 中)数据不是格式良好的 XML,那么“无效”一词是在传达错误的东西,即使可以说是正确的。这有点像说蜘蛛不是果蝇,因为它有六个以上的腿,而你的意思是蜘蛛不是昆虫,因为它有六个以上腿。蜘蛛确实不是果蝇,但没有传达预期的含义。
尽管如此,我没有从 XML 规范中看到一个铁定的论点,即不是格式良好的 XML 的数据对象是否可以(或必须)无效。如果我们遵循 Bob DuCharme(我们可能应该这样做),我们可以安全地得出结论,不是格式良好的 XML 的数据对象是无效的。
当然,如果我们说,指的是不是格式良好的 XML 的数据对象,它是无效的,我们会引起混淆,并且我们很容易被理解为声称除了格式不正确之外的其他内容。
我希望进一步阅读有关 XML 的专家可以让我们更好地就这个问题达成共识,即使答案不像 XML 规范那样正式。