【轉(zhuǎn)載】xmlns是什么——XML Namespace Explained

最近繼續(xù)看Struts哨鸭,在看struts.xml配置的時(shí)候看到這個(gè):

[html]view plaincopy

print?

xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee?http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

想起了自己在以前的博客中有人問到這個(gè)問題判莉,然后自己對(duì)XML也比較陌生,所以系統(tǒng)性地學(xué)了一下骚腥,把基本的屬性,XML DOM(其實(shí)和HTML DOM類似),DTD嗜侮,XML Schema焊虏,xmlns理了一次淡喜。

類似這種技術(shù)知識(shí)的,直接谷歌就好诵闭,這樣會(huì)省很多時(shí)間炼团。

先是從StackOverFlow看到:http://stackoverflow.com/questions/1181888/what-does-xmlns-in-xml-mean

問:我在xml文件中看到這句話,xmlns疏尿,這是什么呢瘟芝?

[html]view plaincopy

print?

xmlns:android="http://schemas.android.com/apk/res/android"

答:它定義了一個(gè)XML命名空間。

在你的例子中褥琐,命名空間前綴是android锌俱,命名空間的uri為

[html]view plaincopy

print?

http://schemas.android.com/apk/res/android

在文檔中,你可以看到這樣的元素敌呈。

這樣認(rèn)為贸宏,命名空間前綴就是一個(gè)變量,以簡短的名字表示整個(gè)命名空間uri磕洪。

這樣寫是等價(jià)的吭练。XML解析器讀取的時(shí)候就是這樣讀取的。

參考:http://www.sitepoint.com/xml-namespaces-explained/#

參考的文章寫得比較好析显,w3c在這部分講得過于簡單鲫咽,所以還是翻譯一下這篇文章。

XML Namespaces Explained

為什么我們需要XML命名空間?

這里有存在命名空間的兩個(gè)基本需要:

1分尸、消除兩個(gè)剛好同名的元素的歧義姊舵。

2、將共同idea的元素分組在一起寓落。

這些描述有點(diǎn)模糊括丁,直接看例子:

消除兩個(gè)剛好同名的元素的歧義

考慮一下:

* 在(x)html文件中有table元素,同時(shí)XSL-FO(現(xiàn)在稱為XSL伶选,作用可以類比CSS對(duì)Html的作用)里面也有同名的元素史飞。

* a,title和style都是(x)html和SVG(SVG 是使用 XML 來描述二維圖形和繪圖程序的語言)的元素仰税。

好了构资,那你怎么區(qū)分SVG的title和HTML的title的不同呢?

將共同idea的元素分組在一起

在(X)html文件中陨簇,table吐绵,style和a元素由所需求的特殊規(guī)則管理,一些可能包含河绽,一些可能不包含己单。

定義所需的規(guī)則都應(yīng)該包括在同一個(gè)地方。

例如耙饰,我以XML為基礎(chǔ)的數(shù)據(jù)要有驗(yàn)證規(guī)則纹笼,我要的是:

* 在同一個(gè)地方定義這些規(guī)則。

* 將這些特殊的規(guī)則和其他我(或者是別人)定義的規(guī)則集合區(qū)分苟跪。

命名空間是什么廷痘?

命名空間是唯一的URI。

這種格式的好處是任何傳輸XML的人件已,可以假裝成是拿到了域名(the bit after the http://, but before the next / 這句不知道怎么翻譯笋额,希望有人指出,謝謝)篷扩,但是依靠別人的域名并不好(特別是他們不知道你這樣做)兄猩。

在XML文檔里面,URI是和前綴聯(lián)系在一起的瞻惋,每個(gè)元素用到的前綴表示著這個(gè)元素屬于哪個(gè)命名空間厦滤。例如:

[html]view plaincopy

print?

rdf:description

xsl:template

zblsa:data

這些例子中:

* 冒號(hào)前面部分是前綴

* 冒號(hào)后面部分是本地部分

* 任何有前綴的元素是符合規(guī)范的名字

* 沒有前綴的元素是不符合規(guī)范的名字

我如何是用命名空間援岩?

使用命名空間歼狼,首先將命名空間和URI聯(lián)系。

[html]view plaincopy

print?

.

foo定義為元素標(biāo)簽命名空間的前綴享怀。xmlns作為前綴和該屬性連接羽峰,就像在命令“將這些字母和URI連接”。如一個(gè)不規(guī)范的文檔有兩個(gè)完全一樣的屬性,冒號(hào)后面部分能夠阻止相同的前綴同時(shí)被定義兩次梅屉。

定義一個(gè)命名空間前綴

這里有個(gè)定義一個(gè)命名空間前綴的例子:

[html]view plaincopy

print?

An?example?document

a?simple?document

Another?element

所有的元素都在里面值纱,命名空間前綴foo是和http://me.com/namespaces/foofoo聯(lián)系在一起的。

在同一命名空間定義多個(gè)前綴

不同的前綴代表不同的命名空間是可以的坯汤,如下:

[objc]view plaincopy

print?

An?example?document

a?simple?document

Another?element

不同的命名空間定義相同的前綴

不同的命名空間定義相同的前綴也是可以的(不過不推薦)虐唠,取決于上下文:

[html]view plaincopy

print?

A?really?bad?idea

A?really?bad?idea

Hello?World

筆記:這不是一個(gè)好想法!

多個(gè)命名空間

如果你使用多個(gè)命名空間惰聂,那你無疑需要在同時(shí)使用多個(gè)命名空間——所以你該如何在同一時(shí)間聲明多個(gè)命名空間疆偿。

你需要做的就是使用多個(gè)xmlns聲明,就像這樣:

[html]view plaincopy

print?

xmlns:bar="http://me.com/namespaces/foobar"

>

An?example?document

a?simple?document

Another?element

默認(rèn)的命名空間

Q:使用任何命名空間時(shí)搓幌,所有元素都需要存在一個(gè)命名空間里面嗎杆故。

A:是的,但是這樣不會(huì)有問題溉愁。

定義一個(gè)命名空間但是沒有和前綴聯(lián)系是允許的——在上面的例子中他們是不規(guī)范的名字处铛。

這就是xhtml的重要性,作為這種語言的一種需求拐揭,xhtml不會(huì)取代html——html也不認(rèn)識(shí)前綴們撤蟆。

定義默認(rèn)的命名空間,不用前綴堂污,直接將xmlns分配就可以了:

[html]view plaincopy

print?

舉例:

[html]view plaincopy

print?

xmlns:bar="http://me.com/namespaces/foobar"

>

An?example?document

a?simple?document

Another?element

屬性和命名空間和我應(yīng)該在命名空間URI最后放什么就不翻譯了枫疆。

再回到問題:

[html]view plaincopy

print?

xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee?http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

再結(jié)合W3C的教程:

XML Schema 是基于 XML 的 DTD 替代者。

XML Schema 描述 XML 文檔的結(jié)構(gòu)敷鸦。

XML Schema 語言也稱作 XML Schema 定義(XML Schema Definition息楔,XSD)。

而DTD是扒披,DTD(文檔類型定義)的作用是定義 XML 文檔的合法構(gòu)建模塊值依。

歸根到底,命名空間的出現(xiàn)就是為了區(qū)分相同名字的元素他們有不同的含義碟案。

通過命名空間就能區(qū)分究竟是你的還是我的元素:

xmlns:you= http://you 和 xmlns:me=http://me 這兩個(gè)不同的命名空間前綴愿险。

如果是xmlns=uri,表示的是文檔默認(rèn)的命名空間价说。

現(xiàn)在來看辆亏,W3C講得還是對(duì)的:

[html]view plaincopy

print?

xmlns="http://java.sun.com/xml/ns/j2ee"

告訴schema認(rèn)證器,XML中所有元素的命名空間都是http://java.sun.com/xml/ns/j2ee

[html]view plaincopy

print?

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi為前綴的命名空間鳖目。結(jié)合上面的例子扮叨,xsi:schemaLocation就是http://www.w3.org/2001/XMLSchema-instance/xsi:schemaLocation。

[html]view plaincopy

print?

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee?http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

發(fā)現(xiàn)沒有领迈,有兩個(gè)值彻磁,第一個(gè)為命名空間的值碍沐,第二個(gè)值為該命名空間使用的xml schema的位置,而由上面可知道:XML Schema 描述 XML 文檔的結(jié)構(gòu)衷蜓。

最后這個(gè)schema后面看書又補(bǔ)充了一些完整的內(nèi)容進(jìn)去累提。

引入xml schema 文檔

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

名稱空間的不同可以有兩種同名但不同的約束模式存在,

第一句并不能聲明schema所在的位置磁浇,只知道這是名稱空間的uri斋陪。

schemaLocation在公認(rèn)的名稱空間中聲明,所以置吓,前綴用到的時(shí)候鳍贾,要加前綴xsi,同時(shí)聲明xsi對(duì)應(yīng)的名稱空間交洗。

schemaLocation屬性設(shè)置有兩個(gè)部分骑科,名稱空間 空格 加上schema文件所在的位置。

不使用名稱空間引入schema文檔的話构拳,只能引入一個(gè)咆爽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市置森,隨后出現(xiàn)的幾起案子斗埂,更是在濱河造成了極大的恐慌,老刑警劉巖凫海,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呛凶,死亡現(xiàn)場離奇詭異,居然都是意外死亡行贪,警方通過查閱死者的電腦和手機(jī)漾稀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來建瘫,“玉大人崭捍,你說我怎么就攤上這事牛” “怎么了殷蛇?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長橄浓。 經(jīng)常有香客問我粒梦,道長,這世上最難降的妖魔是什么荸实? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任匀们,我火速辦了婚禮,結(jié)果婚禮上泪勒,老公的妹妹穿的比我還像新娘昼蛀。我一直安慰自己宴猾,他們只是感情好圆存,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布叼旋。 她就那樣靜靜地躺著,像睡著了一般沦辙。 火紅的嫁衣襯著肌膚如雪夫植。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天油讯,我揣著相機(jī)與錄音详民,去河邊找鬼。 笑死陌兑,一個(gè)胖子當(dāng)著我的面吹牛沈跨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兔综,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼饿凛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了软驰?” 一聲冷哼從身側(cè)響起涧窒,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锭亏,沒想到半個(gè)月后纠吴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慧瘤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年戴已,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锅减。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恭陡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出上煤,到底是詐尸還是另有隱情休玩,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布劫狠,位于F島的核電站拴疤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏独泞。R本人自食惡果不足惜呐矾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望懦砂。 院中可真熱鬧蜒犯,春花似錦组橄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至淘菩,卻和暖如春遵班,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背潮改。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來泰國打工狭郑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人汇在。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓翰萨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親糕殉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亩鬼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)糙麦,斷路器辛孵,智...
    卡卡羅2017閱讀 134,716評(píng)論 18 139
  • 1. XML簡介 以下內(nèi)容來自于http://www.w3school.com.cn/xml 基本知識(shí) XML 和...
    WebSSO閱讀 1,926評(píng)論 1 7
  • 通過之前的兩篇我們能在本地搭建單一和集群兩種方式的dubbo服務(wù),這篇我們來看 springmvc+spring+...
    安琪拉_4b7e閱讀 2,167評(píng)論 0 6
  • XML文件我經(jīng)常使用赡磅,頭部信息一般都是直接粘貼過來魄缚,而不知道那些屬性的意義。通過查閱資料焚廊,我通過自己的理解解釋一下...
    dejunz閱讀 7,215評(píng)論 1 8
  • Schema與DTD XML Schema符合XML語法結(jié)構(gòu)冶匹。 DOM、SAX等XML API很容易解析出XML ...
    扒塊腹肌閱讀 2,137評(píng)論 0 4