日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

我來(lái)說(shuō)說(shuō)XML文件中的xmlns、xmlns:xsi和xsi:schemaLocation、dtd文件的具體含義

 一本正經(jīng)地胡鬧 2019-07-17

文章摘自:https://yq.aliyun.com/articles/40353

              http://www.cnblogs.com/zhao1949/p/5652167.html

參照教程:http://www./xml/xml_dtds.html(易百教程)

前部分為原文引用,后部分為個(gè)人項(xiàng)目引例作為補(bǔ)充。

引用開(kāi)始:


 

相信很多人和我一樣,在編寫Spring或者M(jìn)aven或者其他需要用到XML文檔的程序時(shí),通常都是將這些XML文檔頭拷貝過(guò)來(lái),并沒(méi)有理解其中元素(比如xmlns,xmlns:xsi,xsi:schemaLocation)的真正含義,不知道哪些元素是多余的,也不知道為什么要加那些元素。這樣當(dāng)有時(shí)候網(wǎng)上Copy的XML頭有錯(cuò)的時(shí)候自己卻不知道怎么下手。我也是這樣的,于是今天花了點(diǎn)時(shí)間好好的理解了一下這些元素及其用法,現(xiàn)整理與此,在此謝謝各位前輩的經(jīng)驗(yàn),如有總結(jié)的不對(duì)或者不好的地方,歡迎留言提出各位的寶貴意見(jiàn)。

 

話不多說(shuō),先來(lái)一段Spring的XML樣本,相信大家都很眼熟:

 

    這個(gè)文檔中,根元素<beans/>就不用說(shuō)了,接下來(lái)是xmlns。那么什么是xmlns呢?xmlns其實(shí)是XML Namespace的縮寫,可譯為“XML命名空間”,但個(gè)人覺(jué)得,翻譯后的名字反而不好理解,所以我們就叫它為XML Namespace吧。 

    

    為什么需要xmlns?

    考慮這樣兩個(gè)XML文檔:表示HTML表格元素的<table/>:

 

    和描述一張桌子的<table/>:


 

    假如這兩個(gè) XML 文檔被一起使用,由于兩個(gè)文檔都包含帶有不同內(nèi)容和定義的 <table> 元素,就會(huì)發(fā)生命名沖突。XML 解析器是無(wú)法確定如何處理這類沖突。為了解決上述問(wèn)題,xmlns就產(chǎn)生了。

    

    如何是用xmlns?

    很簡(jiǎn)單,使用語(yǔ)法: xmlns:namespace-prefix="namespaceURI"。其中namespace-prefix為自定義前綴,只要在這個(gè)XML文檔中保證前綴不重復(fù)即可;namespaceURI是這個(gè)前綴對(duì)應(yīng)的XML Namespace的定義。例如,

 

    這一句定義了一個(gè)http://www./schema/context的Namespace(這和Java類中的包的聲明很相似),并將其和前綴context綁定。所以上面的Spring XML文檔中會(huì)有這么一句:

 

    這里的<component-scan/>元素就來(lái)自別名為context的XML Namespace,也就是在http://www./schema/context中定義的。

    我們還可以將前綴定義為abc:

 

    這樣再使用這個(gè)namespaceURI中的元素時(shí),需要以abc為前綴,例如:<abc:xxx/>。再拿上面的例子解釋怎么使用xmlns:

 

    和:

 

    后者與前者僅僅使用不同前綴,我們?yōu)?<table> 標(biāo)簽添加了一個(gè) xmlns 屬性,這樣就為前綴賦予了一個(gè)與某個(gè)命名空間相關(guān)聯(lián)的限定名稱。此時(shí)再把它們放在一起,XML解析器就不會(huì)報(bào)錯(cuò)了。

    注意:當(dāng)xmlns被定義在元素的開(kāi)始標(biāo)簽中(如這里的<f:table/>)時(shí),所有帶有相同前綴的子元素都會(huì)與同一個(gè)Namespace相關(guān)聯(lián)(即<f:table/>里面的<f:name/>和<f:width/>也會(huì)使用url2定義的寫法)。

    

    xmlns和xmlns:xsi有什么不同?

    xmlns表示默認(rèn)的Namespace。例如Spring XML文檔中的

 

    這一句表示該文檔默認(rèn)的XML Namespace為http://www./schema/beans。對(duì)于默認(rèn)的Namespace中的元素,可以不使用前綴。例如Spring XML文檔中的

 

    xmlns:xsi表示使用xsi作為前綴的Namespace,當(dāng)然前綴xsi需要在文檔中聲明。

 

    xsi:schemaLocation有何作用?

    xsi:schemaLocation屬性其實(shí)是Namespace為http://www./2001/XMLSchema-instance里的schemaLocation屬性,正是因?yàn)槲覀円婚_(kāi)始聲明了

 

    這里才寫作xsi:schemaLocation(當(dāng)然一般都使用這個(gè)前綴)。它定義了XML Namespace和對(duì)應(yīng)的XSD(Xml Schema Definition)文檔的位置的關(guān)系。它的值由一個(gè)或多個(gè)URI引用對(duì)組成,兩個(gè)URI之間以空白符分隔(空格和換行均可)。第一個(gè)URI是定義的XML Namespace的值,第二個(gè)URI給出Schema文檔的位置,Schema處理器將從這個(gè)位置讀取Schema文檔,該文檔的targetNamespace必須與第一個(gè)URI相匹配。例如:

 

    這里表示Namespace為http://www./schema/context的Schema的位置為http://www./schema/context/spring-context.xsd。這里我們可以打開(kāi)這個(gè)Schema的位置,下面是這個(gè)文檔的開(kāi)始部分:

 

    有了上面的說(shuō)明后,再去理解開(kāi)始的Spring XML文檔,一定會(huì)有不一樣的感覺(jué)!   

----------------------------------以上均為引用,以本人項(xiàng)目為例對(duì)上面的解釋補(bǔ)充個(gè)人見(jiàn)解,如下---------------------------------------------

從本人項(xiàng)目中,可以看看相應(yīng)的代碼:

 

又例如,何時(shí)名字空間何時(shí)可以刪除呢,比如下面的情況:

由此可見(jiàn):一切以  xsi:schemaLocation=“”為準(zhǔn),也就是說(shuō)xsi:schemaLocation包含的部分一定要出現(xiàn)在名字空間中。而實(shí)際上寫的只需要>=xsi:schemaLocation中的內(nèi)容即可,這就是刪除的依據(jù)。

又例,以maven中的pom.xml文件為例:

再例:

最后,以web service中xml的wsdl文件再一次詳細(xì)說(shuō)明:

只不過(guò)這里沒(méi)有 xsi:schemaLocation的說(shuō)法,所以這里的名字空間就不能隨意刪除了

其實(shí),看到這,已經(jīng)領(lǐng)悟很多了。

XML中的文檔聲明類型:dtd

此處參考易百教程:http://www./xml/xml_dtds.html

 dtd是一種XML的約束,說(shuō)白了就是我定義了dtd文件,下面的xml編寫必須按照我的約束條件來(lái)寫。分為內(nèi)部dtd和外部dtd(系統(tǒng)標(biāo)識(shí)符(SYSTEM)和公共標(biāo)識(shí)符(PUBLIC))

內(nèi)部dtd:

外部dtd:就是這個(gè)dtd文件是外部引用的,和css文件的內(nèi)部,外部一個(gè)意思

所以SYSTEMPUBLIC這種關(guān)鍵字就是引入外部dtd文件的。

以我的項(xiàng)目經(jīng)歷為例,一個(gè)例子如下:

 

 

 

 

 

 

 

 

 

    

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多