在文档格式良好的XML中有多个XML声明吗?

时间:2013-11-27 19:38:53

标签: xml xml-declaration

在同一个文档格式良好的XML中有两个XML声明吗?

<?xml version="1.0" encoding="UTF-8"?>
<a>
 <?xml version="1.0" encoding="UTF-8"?>
 <b>
  hello
 </b>
</a>

我相信不是,但我无法找到支持我的消息来源。

来自Extensible Markup Language (XML) 1.0

  

定义:XML文档应该以XML声明开头   指定正在使用的XML版本。

讨厌的词&#34;应该&#34;在那儿。理想情况下,文档以XML声明开头。它没有说明在文档中有另一个。

  

文档类型声明必须出现在第一个元素之前   文件。

这很接近,但它并没有谈论XML声明本身,即使它应该在它之前。

1 个答案:

答案 0 :(得分:8)

在格式良好的XML中只允许使用一个 XML声明,如果在任何地方,必须位于顶部

必须位于顶部

Well-Formed XML DocumentsXML Recommendation部分中查看document的定义:

[1]     document ::= prolog element Misc*

然后检查prolog

[22]    prolog   ::= XMLDecl? Misc* (doctypedecl Misc*)?

然后XMLDecl

[23]    XMLDecl  ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

因此,我们看到EBNF允许在文档顶部发出XML声明。

只有一个

Processing instructions ...

[16]    PI       ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
[17]    PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

...通常可能在其他地方发生,但是由于PITarget的定义和本声明而排除了第二个XML声明:

  

保留目标名称“XML”,“xml”等   本规范的此版本或未来版本中的标准化。