是否有可能在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处理器必须接受冒号作为名称字符。
并且名称空间不允许多个名称空间前缀,如上所示。
参见:
这是否意味着''是有效的? –
元素名称中的多个冒号在技术上会是***格式良好的***(在基本XML级别),而不是***名称空间 - 格式良好***。 (有效性是模式级别的概念;有关更多详细信息,请参阅[格式良好vs有效XML](http://stackoverflow.com/a/25830482/290085),包括更多关于命名空间的格式良好。)很可能找到一个XML分析器,它会忽略***名称空间 - 良好的***违规。简而言之:多个名称空间前缀:不。 – kjhughes