I made a claim that an unescaped ampersand in some XML source was “invalid XML”. LarsH然后提到:
technically, the XML is “not well-formed”. “Invalid” would mean that it fails to conform to a specific schema.
我试图找到“无效”XML和“格式不正确”XML的官方定义来确认LarsH的声明,但我无法在官方规范中找到任何定义来进行比较.
“无效”XML与“格式不正确”的XML有何不同?
我认为一般差异很明显,而Nathan和Shawn的答案是准确的.提出问题的不明确的案例是:>如果文档格式不正确,它是否有效?可以无效吗?
对于一个非格式良好的XML片段,我从长时间使用XML中得到的印象是,有效性的问题是未定义的.但我无法从XML规范中证明这一点.
理论上
XML规范中的official definition of “valid”是:
Definition: An XML document is valid if it has an associated document
type declaration and if the document complies with the constraints
expressed in it.
请注意,此定义以“XML文档”开头.一个XML document is defined as:
Definition: A data object is an XML document if it is well-formed, as
defined in this specification. In addition, the XML document is valid
if it meets certain further constraints.
这意味着上述“有效”定义仅适用于XML文档,即适用于格式良好的数据对象.关于不是(格式良好的)XML文档的数据对象,“有效”的定义没有说什么.
各种诠释学问题仍然存在……
>我们是否将上述有效定义视为详尽无遗……也就是说,我们是否认为没有其他关于有效性的定义是明确的? (如果是这样,我们忽略基于XML Schema或RelaxNG等的/ validity)
>我们是否将“if”视为“仅限于”?例如.一个没有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给出了根据W3C验证器服务说明有效的XHTML页面示例,但格式不正确.但是当我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规范那样正式.