2016-11-11 36 views
2

我願做這樣的事情:是否有可能在XML中有多個名稱空間前綴?

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

有沒有辦法做的那些多層次root:secondlevel:thirdlevel爲有效的XML?

回答

2

不,在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

這是否意味着'<我:: XML ::節點>'是有效的? –

+1

元素名稱中的多個冒號在技術上會是***格式良好的***(在基本XML級別),而不是***名稱空間 - 格式良好***。 (有效性是模式級別的概念;有關更多詳細信息,請參閱[格式良好vs有效XML](http://stackoverflow.com/a/25830482/290085),包括更多關於命名空間的格式良好。)很可能找到一個XML分析器,它會忽略***名稱空間 - 良好的***違規。簡而言之:多個名稱空間前綴:不。 – kjhughes

相關問題