XML中是否可以有多个名称空间前缀?

时间:2016-11-11 18:18:48

标签: xml html5 xml-namespaces

我想做这样的事情:

<root:secondlevel:thirdlevel
    xmlns:secondlevel="http://secondlevel.com"
    xmlns:secondlevel:thirdlevel="http://thirdlevel.com">
</root:secondlevel:thirdlevel>

有没有办法将这些多级root:secondlevel:thirdlevel作为有效的XML?

1 个答案:

答案 0 :(得分:3)

不,XML中最多只能有一个名称空间前缀。

名称的XML Namespace BNF规则基于QName,只允许一个PrefixedName

QName          ::= PrefixedName | UnprefixedName
PrefixedName   ::= Prefix ':' LocalPart
UnprefixedName ::= LocalPart
Prefix         ::= NCName
LocalPart      ::= NCName
NCName         ::= Name - (Char* ':' Char*) /* An XML Name, minus the ":" */

PrefixLocalPart都不允许使用冒号(:)字符,因此最多只能有一个冒号(最多只有一个Prefix)到{{{ 1}}。

Side note在基类XML中语法上允许多个冒号:

QName

但是除了命名空间之外,不应该使用冒号W3C XML Recommendation is clear

  

注意:

     

XML建议[XML Names]中的命名空间分配了一个   含义为包含冒号字符的名称。因此,作者   除了命名空间之外,不应该在XML名称中使用冒号,   但XML处理器必须接受冒号作为名称字符。

并且命名空间不允许多个名称空间前缀,如上所示。

另见: