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

ere*_*eOn 18 xml naming

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

我相信,对于某些被称为"有效XML"的东西,它需要一个XML声明节点.

我的同事声明XML声明节点是optionnal,因为默认编码是UTF-8,版本总是如此1.0.这是有道理的,但标准说的是什么?

简而言之,给出以下文件:

<books>
  <book id="1"><title>Title</title></book>
</book>
Run Code Online (Sandbox Code Playgroud)

我们可以这样说:

  1. 它是有效的XML?
  2. 它是一个有效的XML节点?
  3. 它是一个有效的XML文档?

非常感谢你.

Tom*_*lak 34

这个:

<?xml version="1.0" encoding="UTF-8"?>
Run Code Online (Sandbox Code Playgroud)

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

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

"有效" XML 不是必需的."有效"表示"表示明确定义的文档类型,如DTD或模式中所述".没有架构或DTD,"有效"一词没有任何意义.

许多人误用"有效",当他们真正意味着"结构良好".格式良好的XML文档是遵循XML的基本语法规则的文档.

由于两者versionencoding(1.0UTF-8/ UTF-16)分别存在默认值,因此也没有必要的XML声明来使文档格式正确.如果文件中存在Unicode BOM(字节顺序标记),则它确定编码.如果没有BOM且没有XML声明,则假定为UTF-8.

这是关于编码声明和检测如何在XML文件中工作的规范线程.XML声明中的默认编码(UTF-8)的默认值如何?


对你的问题:

  1. 它是有效的XML?
    没有DTD或架构,这是无法回答的.但它结构良好.
  2. 它是一个有效的XML节点?
    节点是与文档相关的(一个DOM)的内存中表示的概念.此片段可以解析为节点,因为它格式正确.
  3. 它是一个有效的XML文档?
    见#1.

你在这里混淆了一些XML概念(不用担心,这种混淆很常见,部分源于这些概念重叠并且名称经常被误用).

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

  • 默认编码不只是`UTF-8`。如果未在XML声明中指定编码,则如果在字节顺序标记(BOM)中定义,则编码可以为“ UTF-8”或“ UTF-16”,如果没有BOM,则最终为“ UTF-8”。当下。 (2认同)