免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
XML 中的 xmlns 等屬性的意義

Maven 是一個(gè) java 開發(fā)人員很難繞過的構(gòu)建工具, 因?yàn)橛斜姸嗟拈_源項(xiàng)目都使用 Maven 作為其構(gòu)建工具。 而閱讀 maven 中的 pom 文件, 是了解一個(gè)項(xiàng)目依賴關(guān)系和構(gòu)建方式的重要環(huán)節(jié)。 但是 pom 文件的頭部會讓初學(xué)者感到困惑, 這里對其進(jìn)行一個(gè)清晰易懂的解釋(梳理自網(wǎng)絡(luò)資料)

先修知識

  • 理解 xml 中的標(biāo)簽含義, 及標(biāo)簽之間樹狀的嵌套結(jié)構(gòu)

  • 了解 pom ( project object model)文件

POM 文件頭示例

<project xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://maven.apache.org/POM/4.0.0' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd'>
  • 1

  • 2

初學(xué)者看到如上的內(nèi)容應(yīng)當(dāng)有如下困惑點(diǎn):

  • xmlns:xsi , xmlnsxsi:schmeLocation 這些看上去相近的屬性是什么含義, 為什么他們的值是不一樣的 URL

  • 這些 URL 是否對應(yīng)一些可以訪問的資源,對于該文件的解析是否會需要下載這些 URL 對應(yīng)的資源

從 xmlns 的作用講起

一個(gè) xml 文檔中如果包含如下兩種定義不同, 但是名稱相同的元素, xml 解析器是無法解析的, 因?yàn)樗荒艽_定當(dāng)你調(diào)用 document.getElementsByTagName('book') 時(shí)應(yīng)該返回哪個(gè)元素。

<!-- 這里的 table 元素描述的是一個(gè)表格--><table>   <tr>   <td>Apples</td>   <td>Bananas</td>   </tr></table><!-- 這里的 table 元素描述的是一個(gè)家居桌子--><table>   <name>African Coffee Table</name>   <width>80</width>   <length>120</length></table>
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

顯然, 如果給他們的名字添加一個(gè)前綴, 則命名沖突的問題就可以解決。

<!-- 這里的 table 元素描述的是一個(gè)表格--><h:table> <!--添加了前綴 h --> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr></h:table><!-- 這里的 table 元素描述的是一個(gè)表格--><f:table> <!--添加了前綴 f --> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length></f:table>
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

但是, 在一個(gè)擁有眾多元素的文檔中, 僅僅擁有前綴, 也不能完全避免命名沖突的問題。

  • 注意 xml 文檔相互之間是可以通過 XInclude, External Entites 實(shí)現(xiàn)相互包含或者引用的。

此時(shí), 命名空間就誕生了, 我們可以為元素定義一個(gè)命名空間, 將一個(gè)很長的, 可以保證全局唯一性的字符串與該元素關(guān)聯(lián)起來。這樣就可以避免命名沖突了。

但是如何保證那個(gè)較長的字符串全局唯一呢, 最好的方式莫過于使用 統(tǒng)一資源標(biāo)識符(Uniform Resource Identifier,URI) 了, 而我們最常見的 URI 就是平時(shí)經(jīng)常訪問的網(wǎng)址 URL 了。

xmlns:namespace-prefix='namespaceURI'
  • 1

應(yīng)用到我們所舉的例子中就是:

<!-- 這里的 table 元素描述的是一個(gè)表格--><h:table xmlns:h='http://www.w3.org/TR/html4/'> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr></h:table><!-- 這里的 table 元素描述的是一個(gè)表格--><f:table xmlns:f='http://www.w3school.com.cn/furniture'> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length></f:table>
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 所以, 對于命名空間的標(biāo)識符, URI 的作用僅僅是保證唯一性, 它并不需要對應(yīng)一個(gè)可以訪問的資源或文件 ! 但是, 有很多公司都會讓 namespace 的 URI 指向一個(gè)包含該命名空間信息的網(wǎng)頁

回到我們的 POM 文檔頭中,你會發(fā)現(xiàn) project xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 中的http://www.w3.org/2001/XMLSchema-instance可以訪問到一個(gè)正常的頁面, 但是如果訪問 xmlns='http://maven.apache.org/POM/4.0.0' 中的 http://maven.apache.org/POM/4.0.0 就會得到一個(gè) PAGE NOT FOUND 錯(cuò)誤, 頁面未獲取到。

xmlns 出現(xiàn)在沒有沒有前綴的元素中的含義

<project xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://maven.apache.org/POM/4.0.0' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd'>
  • 1

  • 2

細(xì)心的童鞋會注意到, project 元素前面并沒有前綴。 這里實(shí)際上使用的是默認(rèn)命名空間(default naming space)。 它的語法如下:

<elementName xmlns='namespaceURI'>
  • 1

例如我們的 project 元素定義 和下面的例子

<table xmlns='http://www.w3.org/TR/html4/'>  <tr><td>Apples</td><td>Bananas</td>  </tr></table>
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

使用默認(rèn)命名空間的作用是, 該元素內(nèi)部的子元素都會默認(rèn)屬于該命名空間下, 我們不需要為他們一一添加命名空間前綴。

xmlns:xsi 與 xsi:schemaLocation

現(xiàn)在來看文件頭中剩下的, 看上去更為復(fù)雜的部分。

xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd'
  • 1

  • 2

  • 3

根據(jù)之前的知識我們可以理解, xmlns:xsi 定義了一個(gè)命名空間前綴 xsi 對應(yīng)的唯一字符串 http://www.w3.org/2001/XMLSchema-instance。 但是讀者會發(fā)現(xiàn), 這個(gè) xmlns:xsi 在不同的 xml 文檔中似乎都會出現(xiàn)。 這是因?yàn)椋?nbsp;xsi 已經(jīng)成為了一個(gè)業(yè)界默認(rèn)的用于 XSD((XML Schema Definition) 文件的命名空間。 而 XSD 文件(也常常稱為 Schema 文件)是用來定義 xml 文檔結(jié)構(gòu)的。

  • 注解: XML 解析器可以根據(jù) 一個(gè) XSD 文件的內(nèi)容來解析另一個(gè) XML 文件, 判斷該文件的結(jié)構(gòu)是否和 XSD 文件中定義的一致。 XSD 文件 可以理解為 XML 文檔可以自定義的語法或格式檢查器。

那么, 有了上述的理解, 再來看

xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd'
  • 1

上面這行的語法其實(shí)是, xsi:schemaLocation = '鍵' “值” 
即 xsi 命名空間下 schemaLocation 元素的值為一個(gè)由空格分開的鍵值對。

  • 前一個(gè)“鍵” http://maven.apache.org/POM/4.0.0 指代 【命名空間】, 只是一個(gè)全局唯一字符串而已

  • 后一個(gè)值指代 【XSD location URI】 , 這個(gè)值指示了前一個(gè)命名空間所對應(yīng)的 XSD 文件的位置, xml parser 可以利用這個(gè)信息獲取到 XSD 文件, 從而通過 XSD 文件對 
    所有屬于 命名空間 http://maven.apache.org/POM/4.0.0 的元素結(jié)構(gòu)進(jìn)行校驗(yàn), 因此這個(gè)值必然是可以訪問的, 且訪問到的內(nèi)容是一個(gè) XSD 文件的內(nèi)容

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
持續(xù)集成之路——搭建Maven私服
淘寶HSF服務(wù)的原理以及簡單的實(shí)現(xiàn)
Maven依賴管理
模塊化建立項(xiàng)目流程(Maven聚合模塊)
maven創(chuàng)建SSM項(xiàng)目
Maven的配置文件pom.xml
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服