我與使用XML XML文件的工作:郎,現在有人給我發一份文件,這個代替:正在使用不同名稱空間前綴下的xml命名空間相同嗎?
<element xmlns:ns1="xml" ns1:lang="fr" />
我應該把它當作等於這個?
<element xml:lang="fr" />
或者當我需要xml:lang時,我應該將文件視爲無效嗎?如果第一個,我可以在XSD中捕獲xml命名空間的這個「代理」嗎?
我與使用XML XML文件的工作:郎,現在有人給我發一份文件,這個代替:正在使用不同名稱空間前綴下的xml命名空間相同嗎?
<element xmlns:ns1="xml" ns1:lang="fr" />
我應該把它當作等於這個?
<element xml:lang="fr" />
或者當我需要xml:lang時,我應該將文件視爲無效嗎?如果第一個,我可以在XSD中捕獲xml命名空間的這個「代理」嗎?
你給出的兩個例子並不相同。名稱空間是一個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的概念。
號
背景:的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" />