XML声明节点是强制性的吗?

我与我的一位同事讨论了XML声明节点(我正在讨论这个=> <?xml version="1.0" encoding="UTF-8"?> )。

我相信对于被称为“有效的XML”的东西,它需要一个XML声明节点。

我的同事指出XML声明节点是可选的,因为默认编码是UTF-8,版本始终为1.0 。 这是有道理的,但标准说了什么?

总之,给出以下文件:

<books>
  <book id="1"><title>Title</title></book>
</book>

我们可以这样说:

  • 它是有效的XML?
  • 它是一个有效的XML节点?
  • 这是一个有效的XML文档?
  • 非常感谢你。


    这个:

    <?xml version="1.0" encoding="UTF-8"?>
    

    不是一个处理指令 - 它是XML声明。 其目的是在开始阅读文档的其余部分之前正确配置XML解析器。

    它看起来像一个处理指令,但与实际处理指令不同,它不会成为解析器创建的DOM的一部分。

    对于“有效的”XML来说不是必需的。 “有效”意味着“代表一个明确定义的文档类型,如DTD或模式中所述”。 没有模式或DTD,“有效”这个词就没有意义。

    当许多人真正的意思是“格式良好”时,就会误用“有效”。 一个格式良好的XML文档是一种服从XML基本语法规则的文档。

    由于versionencoding都有默认值(分别为1.0UTF-8 / UTF-16 ),所以文档格式良好也不需要XML声明。 如果文件中存在Unicode BOM(字节顺序标记),则确定编码。 如果没有BOM并且没有XML声明,则假定UTF-8。

    这里是关于如何在XML文件中编码声明和检测的规范线程。 默认编码(UTF-8)在XML声明中的默认方式是什么?


    对你的问题:

  • 它是有效的XML?
    没有DTD或架构就无法回答这个问题。 尽管如此,它是完美的。
  • 它是一个有效的XML节点?
    节点是与文档的内存表示(DOM)相关的概念。 这段代码可以被解析为一个节点,因为它是格式良好的。
  • 这是一个有效的XML文档?
    见#1。
  • 您在这里混淆了一些XML概念(不用担心,这种混淆是常见的,部分原因是这些概念重叠,名称经常被误用)。

  • 这一切都始于由组织为树的名称,值和属性组成的结构化数据
  • XML最基本的意思是以文本形式表示这种结构化数据的语法(这是一种“标记语言”)。 这是您将树序列化为字符串时所得到的结果,它可以用来将字符串重新反序列化为树状结构。
  • 文档通常是指代表序列化树的字符串。 它可以存储在文件中,通过网络发送或在内存中创建。
  • 序列化和反序列化的规则是非常严格定义的。 据说可以成功地将序列化为树的文档(“字符串”)称为格式良好的
  • 这种树的语义(允许的元素,元素数量和顺序,名称空间,任何数量的复杂规则,都可以在所谓的DTD或模式中定义)。 如果一棵树服从一套明确定义的语义,它被认为是有效的
  • 术语文档对象模型(DOM)是指结构化数据的标准化内存中表示。 这是使用标准化方法访问此树的定义良好的API的名称。
  • 节点是文档对象模型的基本数据结构。

  • 根据2008年11月26日的W3C推荐标准XML(可扩展标记语言)1.0(第五版),部分:http://www.w3.org/TR/2008/REC-xml-20081126/#sec-prolog-dtd
    没有xml声明,它是无效的(即使它是格式良好的,完整的)。


    该规范指出:

    定义:XML文档应该以一个XML声明开始,该声明指定了正在使用的XML版本。

    而且为了使文件有效,它应该有与之相关的文件类型声明。 您在这里展示的片段似乎是一个良好的节点,但绝不是有效的文档。

    链接地址: http://www.djcxy.com/p/29829.html

    上一篇: Is the XML declaration node mandatory?

    下一篇: Change XML node element value in PHP and save file