“有效xml”和“格式正确的xml”之间有什么区别吗?


78

我不知道有什么区别,但是一位同事说有区别,尽管他不能支持。有什么区别?

Answers:


81

有区别,是的。

遵守XML标准XML被认为是格式正确的,而遵守DTD的xml被认为是有效的。


11
或者是XML Schema,RelaxNG或Schematron。
Torsten Marek

24
可能值得指出的是,格式正确是有效性的前提。
昆汀2010年

1
@Quentin:这是重要的一点,公认的XML专家也同意这一点(lists.w3.org/Archives/Public/www-xml-linking-comments/… “规范中明确说明了……”);但是从XML规范中并不完全明显。你有被引用吗?您是否基于w3.org/TR/REC-xml/#dt-valid
LarsH 2013年

@LarsH根据定义,如果XML文档的格式不正确,则无法对照DTD或架构对其进行检查。

@LegoStormtroopr:我同意你的观点,但是我的问题是,规范在哪里这么说?您指的定义在哪里?w3.org/TR/REC-xml/#dt-valid告诉您什么才是“有效”的,但不是必须的。例如,在没有DTD的情况下,根据XML模式检查的XML文档可能是有效的。因此,此定义不排除使用其他方式使文档有效的可能性。
LarsH 2014年

29

格式正确与有效XML

那么形成意味着一个文本对象符合W3C要求是XML

有效表示格式正确的XML满足指定架构给出的其他要求。


官方定义

根据W3C XML建议

[定义:如本规范中所定义,如果数据对象格式良好,则它是XML文档 。另外,如果XML文档满足某些进一步的约束,则它是有效的。]


观察结果:

  • 格式不正确的文档不是XML。(格式良好的XML通常被使用,但在技术上是多余的。)
  • 有效意味着组织良好。
  • 格式正确并不意味着有效。
  • 尽管针对XMLW3C建议书有效性定义为与DTD相对,但常规用法允许将该术​​语应用于通过XSDRELAX NGSchematron或其他方法指定的XML模式。

导致文档出现问题的示例...

格式不正确

  • 元素缺少结束标记(并且不是自闭合的)。
  • 元素重叠而没有适当的嵌套: <a><b></a></b>
  • 属性值缺少与开头报价匹配的结尾报价。
  • <&用于内容而非&lt&amp;
  • 存在多个根元素。
  • 存在多个XML声明,或者XML声明出现在文档顶部之外。

无效

  • 缺少元素或属性,但XML架构必需。
  • 使用了元素或属性,但XML模式未定义。
  • 元素的内容与XML模式指定的内容不匹配。
  • 属性的值与XML模式指定的类型不匹配。

命名空间格式

从技术上讲,XML组件名称中允许使用冒号。然而,冒号应该只能在命名空间用途名称中使用:

注意:

XML建议书[ XML名称]中的命名空间为包含冒号的名称赋予含义。因此,除命名空间用途外,作者不应在XML名称中使用冒号,但XML处理器必须接受冒号作为名称字符。

因此,另一个术语,结构良好的命名空间,在定义命名空间中的XML 1.0 W3C推荐标准暗含所有的良构的XML规则加上那些有关命名空间和命名空间前缀。

通俗地讲,格式良好的术语通常用于格式正确的命名空间会更精确的地方。但是,这是一种次要的技术方式,其实用性要比此答案中描述的格式正确的XML与有效的XML之间的区别要小。


1
这已经是一个很好的答案,但是也许可以添加有关名称空间的注释,即关于名称空间格式正确的属性的注释?如您所知,对于初学者来说,名称空间是一个常见的陷阱,许多人会将具有名称空间问题的文档描述为“格式不正确”。
MathiasMüller'16

谢谢,@MathiasMüller。我已根据您的请求添加了名称空间格式的说明。
kjhughes

28

有效XML是成功针对DTD进行验证的XML。

格式正确的XML是XML,它以正确的顺序关闭了所有标签,如果有声明,则它首先在文件中具有正确的属性。

换句话说,有效性是指语义,格式正确是指语法。

因此,您将拥有无效的格式正确的XML。


9
我不同意第三段。这两个术语都没有提及语义(事物的含义)。DTD无法指示特定元素或属性的含义。这将是诸如Web本体语言之类的努力的目标。相反,格式正确是指语法水平较低(可能更好地称为词法正确性),而有效性是指语法水平较高(如果愿意,可以将其称为“结构性”)。
LarsH 2013年

16

正如其他人所说,格式正确的XML符合XML规范,有效的XML符合给定的架构。

另一种表达方式是,格式正确的XML在词法上是正确的(可以解析),而有效的XML在语法上是正确的(可以与已知的词汇和语法匹配)。

格式正确的XML文档才有效。所有XML文档都遵循相同的格式规范(W3推出的RFC)。一个XML文档对某些模式可以有效,而对另一些模式则无效。有许多模式语言,其中许多本身都是基于XML的。


6

格式正确的XML是满足该语言语法要求的XML。不丢失任何结束标记,让您的所有单例标记使用<whatever />而不仅仅是<whatever>,并且使结束标记按正确的顺序排列。

有效XML是使用DTD并符合其所有要求的XML。因此,如果您不正确地使用属性,则会违反DTD且无效。

所有有效的XML格式都正确,但并非所有有效的XML格式都有效。


4

如果符合标准规定的所有XML文档的要求,则XML的格式正确-诸如具有单个根节点,具有正确嵌套的节点,所有节点具有结束标记(或在格式正确意味着它遵循XML规则,因此可以正确地进行解析。

如果XML将针对DTD或架构进行验证,则XML是有效的。这显然因情况而异-对一种模式有效的XML对另一种模式无效,即使它仍然是格式正确的。

如果XML格式不正确,则无法正确解析-解析器只会抛出异常或报告错误。这是通用的,您的XML包含什么都没有关系。只有对其进行了解析,才能对其进行有效性检查。此域或上下文相关,并且需要使用DTD或架构进行验证。对于简单的XML文档,您可能没有DTD或架构,在这种情况下,您不知道XML是否有效-概念或有效性在这种情况下根本不适用。当然,这并不意味着您不能使用它,而只是意味着您无法确定它是否有效。


3

XML规范中的W3C已定义了创建XML文档时必须遵循的某些规则。此类规则的示例包括仅具有一个根元素,为每个开始标签具有结束标签,对属性值使用单/双引号等等。如果XML文档遵循所有这些规则,则可以说它是格式正确的文档,可以使用XML解析器来解析和处理此类文档。

文档类型定义(DTD)或XML模式可用于定义XML文档特定类的结构和内容。这包括父子关系详细信息,属性列表,数据类型信息,值限制等。除了格式规则外,如果XML文档还遵循关联的DTD / Schema中指定的规则,则据说是有效的XML文档。

所有有效的XML文档格式正确,但并非总是如此。格式正确的XML文档不一定必须有效。


1

我要补充一点,有效的XML也意味着它的格式正确,但是格式正确的XML不一定有效。



1

如果XML正在确认DTD规则,则它是有效的XML。如果XML文档符合XML规则(所有开始的标签都已关闭,存在根元素等),那么它就是格式正确的XML。


1

摘自可扩展标记语言(XML)1.0(第五版)-W3C建议书2008年11月26日

[定义:如本规范中所定义,如果数据对象格式正确,则它是XML文档。另外,如果XML文档满足某些进一步的约束,则它是有效的。]


对于那些喜欢伪代码而不喜欢文本段落的人... :)

IF is_well_formed(<XML_doc>) THEN
    # It is well-formed, and can be parsed
    IF is_valid(<XML_doc>) THEN
        # Well-formed and ALSO valid. Hurray! 
        # **A valid XML doc, is a well-formed doc!**
    ELSE
        # Only well-formed, NOT valid
    END IF
ELSE
    # Not well-formed, or valid!
END IF

FUNCTION is_well_formed
    IF <does_not_contain_syntax,_spelling,_punctuation,_grammar_errors,_etc._errors> THEN
        RETURN TRUE
    ELSE 
        RETURN FALSE
    END IF
END FUNCTION 

FUNCTION is_valid
    IF <markup_of_the_XML_document_matches_"some"_defined_standard> THEN
        # Standards used to validate XML could be a DTDs or XML Schemas, referenced within the XML document
        RETURN TRUE
    ELSE 
        RETURN FALSE
    END IF
END FUNCTION

基于以下理论:“格式良好”与有效


0

DTD是“文档类型定义”的首字母缩写。这是一系列XML文件内容的描述。这是XML 1.0规范的一部分,并允许其描述和验证给定文档实例是否符合详细说明其结构和内容的一组规则。

验证是根据DTD(更通常是针对一组构造规则)检查文档的过程。

验证过程和构建DTD是XML生命周期中两个最困难的部分。简要地说,DTD定义了在文档中可以找到的所有可能元素,文档树的正式形状是什么(通过定义元素的允许内容;文本,允许子列表的正则表达式或混合内容)即文字和儿童)。DTD还定义了所有元素的有效属性以及这些属性的类型。


您好@Rachna。这很好地解释了验证部分,但没有解释何时可以将XML文件称为“格式正确的” ...
Kent Pawar 2013年

0

好吧,从定义上讲,格式不正确的XML不是XML。人们通常将有效XML称为遵循特定架构(XSD或DTD)的XML。


0

参见W3学校的XML DTD

具有正确语法的XML文档称为“格式良好”。

针对DTD验证的XML文档既“格式正确”又“有效”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.