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

问题描述:

我愿做这样的事情:是否有可能在XML中有多个名称空间前缀?

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

有没有办法做的那些多层次root:secondlevel:thirdlevel为有效的XML?

不,在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 ":" */ 

既不Prefix也不LocalPart允许结肠(:)字符,所以可以有在最多一个冒号(并且至多一个Prefix)部分到QName

Side note多个冒号语法允许在基准水平XML:

STag   ::= '<' Name (S Attribute)* S? '>' 
NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] 
NameChar  ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] 
Name   ::= NameStartChar (NameChar)* 

但是这不应该只是命名空间目的使用冒号W3C XML Recommendation is clear

备注:

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

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

参见:

+0

这是否意味着''是有效的? –

+1

元素名称中的多个冒号在技术上会是***格式良好的***(在基本XML级别),而不是***名称空间 - 格式良好***。 (有效性是模式级别的概念;有关更多详细信息,请参阅[格式良好vs有效XML](http://*.com/a/25830482/290085),包括更多关于命名空间的格式良好。)很可能找到一个XML分析器,它会忽略***名称空间 - 良好的***违规。简而言之:多个名称空间前缀:不。 – kjhughes