"有效xml"和"格式正确的xml"之间有什么区别吗?
我不知道有什么区别,但是一位同事说有区别,尽管他不能支持。有什么区别?
解决方案
有区别,是的。
遵循XML标准的XML被认为格式良好,而遵循DTD的xml被认为是有效的。
有效XML是成功针对DTD进行验证的XML。
格式正确的XML是XML,它以正确的顺序关闭了所有标签,如果有声明,则它首先在文件中具有正确的属性。
换句话说,有效性是指语义,格式正确是指语法。
因此,我们将拥有无效的格式正确的XML。
好吧,从定义上讲,格式不正确的XML并不是XML。人们通常将有效XML称为遵循某种模式(XSD或者DTD)的XML。
我要补充一点,有效的XML也意味着它的格式正确,但是格式正确的XML不一定有效。
格式正确的XML是符合语言语法要求的XML。不丢失任何结束标记,让所有单例标记使用<whatever />
而不是<whatever>
,并以正确的顺序显示结束标记。
有效XML是使用DTD并符合其所有要求的XML。因此,如果我们不正确地使用属性,则会违反DTD并且无效。
所有有效的XML格式都正确,但并非所有格式正确的XML都有效。
如果符合标准规定的所有XML文档的要求,则XML的格式正确,例如具有单个根节点,正确嵌套节点,所有节点具有结束标记(或者使用空节点的斜线简写)格式正确的文字表示它遵守XML规则,因此可以正确解析。
如果XML将针对DTD或者架构进行验证,则XML是有效的。这显然因情况不同而异,即使对一个模式有效的XML格式仍然正确,但对另一个模式无效。
如果XML格式不正确,则无法正确解析,解析器只会抛出异常或者报告错误。这是通用的,XML包含什么都没有关系。只有对其进行了解析,才能对其进行有效性检查。此域或者上下文相关,并且需要使用DTD或者架构进行验证。对于简单的XML文档,我们可能没有DTD或者架构,在这种情况下,我们不知道XML是否有效,概念或者有效性在这种情况下根本不适用。当然,这并不意味着我们不能使用它,而只是意味着我们无法确定它是否有效。
正如其他人所说,格式正确的XML符合XML规范,有效的XML符合给定的架构。
另一种表达方式是,格式正确的XML在词法上是正确的(可以解析),而有效的XML在语法上是正确的(可以与已知的词汇和语法匹配)。
格式正确的XML文档才有效。所有XML文档都遵循相同的格式规范(W3推出的RFC)。一个XML文档可以对某些模式有效,而对另一些模式则无效。有许多模式语言,其中许多本身都是基于XML的。
除了上述DTD之外,还有两种其他描述和验证XML文档的方式是XMLSchema和RelaxNG,这两种方式都比DTD更易于使用和支持更多功能。
如果XML正在确认DTD规则,则它是有效的XML。
如果XML文档符合XML规则(所有标记
开始关闭,有一个根元素等)然后它是一个
格式正确的XML。