我与我的一位同事讨论过XML声明节点(我在谈论这个=&gt; <?xml version="1.0" encoding="UTF-8"?>
)。
我认为,对于某些被称为“有效XML”的东西,它需要一个XML声明节点。
我的同事声明XML声明节点是optionnal,因为默认编码是UTF-8,版本始终是1.0
。这是有道理的,但标准说的是什么?
简而言之,给出以下文件:
<books>
<book id="1"><title>Title</title></book>
</book>
我们能说:
非常感谢。
答案 0 :(得分:32)
此:
<?xml version="1.0" encoding="UTF-8"?>
不是处理指令 - 它是 XML声明。其目的是在开始读取文档的其余部分之前正确配置XML解析器。
它看起来像一个处理指令,但与实际处理指令不同,它不会成为解析器创建的DOM的一部分。
“有效” XML没有必要。 “有效”表示“表示明确定义的文档类型,如DTD或架构中所述。没有架构或DTD,单词“valid”没有任何意义。
许多人误用“有效”,当他们真正意味着“格式良好”时。格式良好的XML文档是遵循XML的基本语法规则的文档。
由于version
和encoding
(1.0
和UTF-8
/(UTF-16
/的默认设置,文档格式也不需要XML声明分别为{{1}})。如果文件中存在Unicode BOM(字节顺序标记),则它确定编码。如果没有BOM并且没有XML声明,则假定为UTF-8。
这是一个关于编码声明和检测如何在XML文件中工作的规范线程。 How default is the default encoding (UTF-8) in the XML Declaration?
问题:
你在这里混淆了一些XML概念(不用担心,这种混淆很常见,部分源于这些概念重叠并且名称经常被误用)。
答案 1 :(得分:2)
根据可扩展标记语言(XML)1.0(第五版)
W3C 2008年11月26日建议书,部分:
http://www.w3.org/TR/2008/REC-xml-20081126/#sec-prolog-dtd
没有xml声明,它无效(即使它格式正确,完整)。
答案 2 :(得分:0)
规范声明:
并且对于有效的文档,它应该具有与之关联的文档类型声明。您在此处显示的代码段似乎是一个状态良好的节点,但绝不是有效的文档。
答案 3 :(得分:0)
请注意,有效性取决于与文档关联的DTD或架构。在你的情况下
<books>
<book id="1"><title>Title</title></book>
</book>
DTD必须具有的最小值是ELEMENT“books”,“book”和“title”,并且“book”具有带“id”的ATTLIST,定义“id”的类型以及它是强制性的还是可选的。它还会声明“book”可以/必须包含“title”,“title”可以(或必须)包含PCDATA内容(字符串)。
DTD也可能声明必须存在某些其他元素,在这种情况下,您的XML文档将无效。有许多DTD会使您的文档有效,而许多DTD会使其无效。