'有效的xml'和'格式良好的xml'之间有什么区别吗?

use*_*931 75 xml validation xsd dtd

我并不知道有什么区别,但是一位同事说有,尽管他无法支持.有什么区别?

Kil*_*fer 78

是的,有区别.

遵循XML标准XML被认为是良好的形式,而遵守DTDXML被认为是有效的.

  • 可能值得指出的是,良好的形成是有效性的先决条件. (24认同)
  • 或者XML Schema,或RelaxNG,或Schematron. (10认同)

Vin*_*vic 27

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

格式良好的XML是XML,它以正确的顺序关闭所有标签,如果它有一个声明,它首先在文件中具有适当的属性.

换句话说,有效性指的是语义,良好的形成指的是语法.

所以你可以使用格式错误的XML.

  • 我不同意第三段.这两个术语都没有说出任何关于语义的东西(某些东西的含义).DTD无法指示特定元素或属性*的含义*.这将是Web Ontology Language等努力的目标.相反,格式良好是指语法水平较低(可能更好地称为词汇正确性),而有效性则指的是更高级别的语法(如果您愿意,可将其称为"结构"). (9认同)

kjh*_*hes 26

格式良好与有效XML

格式良好意味着文本对象符合 W3C XML的要求.

有效意味着格式良好的XML满足指定模式给出的其他要求.


官方定义

根据W3C XML建议:

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


观察:

  • 格式不正确的文档不是XML.(格式良好的XML通常使用,但在技术上是多余的.)
  • 有效意味着形成良好.
  • 形式良好并不意味着有效.
  • 虽然W3C XML建议书定义了针对DTD的有效性,但是传统的使用允许该术语用于符合通过XSD,RELAX NG,Schematron或其他方法指定的XML模式.

什么导致文件的例子......

形式不佳:

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

无效:

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

命名空间结构良好的

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

注意:

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

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

通俗地说,通常使用格式良好的术语,其中命名空间良好的形式将更精确.然而,这是一种较小的技术方式,其实际结果不如本答案中描述的格式良好与有效XML之间的区别.


har*_*rpo 16

正如其他人所说,格式良好的XML符合XML规范,有效的XML符合给定的模式.

另一种说法是,格式良好的XML是词法上的正确的(它可以被解析),而有效的XML在语法上是正确的(它可以与已知的词汇和语法相匹配).

XML文档在格式良好之前无法生效.所有XML文档都遵循相同的格式(W3推出的RFC).一个XML文档对某些模式有效,对其他模式无效.有许多模式语言,其中许多本身都是基于XML的.


小智 6

格式良好的XML是满足语言语法要求的XML.不缺少任何结束标签,让所有单件标签使用<whatever />而不是仅仅使用<whatever>,并以正确的顺序使用结束标签.

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

所有有效的XML都是格式良好的,但并非所有格式良好的XML都是有效的.


Sim*_*est 5

如果满足标准规定的所有 XML 文档的要求,XML 就是格式良好的 - 因此,例如具有单个根节点、正确嵌套节点、所有节点都具有结束标记(或在之前使用斜杠的空节点简写)右尖括号),引用的属性等。格式良好仅意味着它遵守 XML 规则,因此可以正确解析。

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

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