2017-06-13 123 views
1

我與使用XML XML文件的工作:郎,現在有人給我發一份文件,這個代替:正在使用不同名稱空間前綴下的xml命名空間相同嗎?

<element xmlns:ns1="xml" ns1:lang="fr" /> 

我應該把它當作等於這個?

<element xml:lang="fr" /> 

或者當我需要xml:lang時,我應該將文件視爲無效嗎?如果第一個,我可以在XSD中捕獲xml命名空間的這個「代理」嗎?

回答

1

你給出的兩個例子並不相同。名稱空間是一個URI,可以將這些URI綁定到前綴以定義元素和屬性的完全限定名稱。 URI不需要指向現有的資源,並且XML處理器不需要對URI進行任何類型的解析或以其他方式創建它的規範化表示(除了某些屬性值規範化之外)。實際上,名稱空間實際上只是區分大小寫的字符串,但是URI恰好被選爲它們的表示。

換句話說,這

<element xmlns:ns1="xml" ns1:lang="fr" /> 

結合前綴ns1到命名空間xml(這不是一個合法的URI引用)。 lang屬性隨後位於名稱空間xml中,因爲它的前綴爲ns1

那麼,爲什麼這不像你的第二個例子?由於

<element xml:lang="fr" /> 

xml前綴,而不是命名空間。根據specification regarding reserved prefixes and namespace names,此前綴隱式綁定到命名空間http://www.w3.org/XML/1998/namespace

進一步瞭解該規範,您還會發現,不僅允許您將xml前綴綁定到任何其他名稱空間(有意義),而且您也不允許將名稱空間綁定到其他任何名稱空間前綴(意義不大,但允許進行一些XML處理優化和假設)。

總之,如果需要xml:lang屬性,則應該將第一個輸入視爲無效,因爲該屬性不在其中。構建該文件的人無法理解XML名稱空間。

我更深入地理解了in this answer的概念。

1

背景:xml:lang attribute不經上XML名稱空間的依賴W3C XML建議書中定義,儘管它使用一個冒號(:)的。在W3C XML Namespaces Recommendation中,前綴xml(以及以xml開頭的所有名稱空間前綴)爲declared to be reserved。前綴xml自動被自動定義爲綁定到http://www.w3.org/XML/1998/namespace

因此,xml:lang="fr"是完全正確的,可以在不聲明xml名稱空間前綴的情況下使用。如果您確實想聲明xml名稱空間前綴,那將是xmlns:xml=http://www.w3.org/XML/1998/namespace

此外,xmlns:ns1="xml" ns1:lang="fr"暗示名稱空間前綴聲明可以通過傳遞賦值來誤解名稱空間前綴聲明;他們不可以。

所以,雖然

<element xmlns:ns1="xml" ns1:lang="fr" /> 

形成公(見well-formed vs valid),它是不等同於

<element xml:lang="fr" /> 
相關問題