XSD 小結
在實際開發中,常會遇到一些 XML 類型的配置文件,那麼如何去理解其所含的標籤,以及正確的進行配置呢!
追本溯源,如果想明確 XML 文件中的每一個標籤的含義,最好的辦法是找到定義這個文檔的人問道問道。
當然,這是不現實的,好在,XML 文檔中提供了一個 XSD 文檔地址供我們查閱。
XSD,XML Schema Definition,是定義 XML 文檔的文檔。
以 Maven 的 Settings.xml 文件爲例:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<settings>
實際上,幾乎每一個 XML 文檔的根標籤中都有諸如上面的屬性,那麼他們有啥含義呢!
簡單來說,就是聲明該標籤中的默認命名空間,並指明瞭解析該文檔的所需的 XSD 文檔的地址。
xmlns, xml name space
默認的命名空間,其後的值通常是一個鏈接,其實只要確保唯一即可,XML 解析器並不會去訪問該鏈接。
xmlns:xsi
前綴爲 xsi
的命名空間,xsi, xml schema instance
表示一個 xml schema
實例,實際上,這個前綴是什麼並不重要,只要在當前文檔中唯一即可,重要的是其後賦的 http://www.w3.org/2001/XMLSchema-instance
值。引入該命名空間,實際是爲了使用 schemaLocation
來指名當前 XML 文檔的 XSD 定義文檔的地址。
xsi:schemaLocation=<要使用的命名空間> <針對前面的命名空間進行定義的 XSD 地址>
訪問 http://maven.apache.org/xsd/settings-1.0.0.xsd 查詢 XML Shema 定義。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
elementFormDefault="qualified"
targetNamespace="http://maven.apache.org/SETTINGS/1.0.0">
</xs:schema>
xmlns:xs="http://www.w3.org/2001/XMLSchema"
指明瞭當前文檔中使用 xs
前綴的標籤的命名空間。
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
默認命名空間。
elementFormDefault="qualified"
表示該文檔中定義的標籤在被使用時,必須有命名空間的限定。
targetNamespace="http://maven.apache.org/SETTINGS/1.0.0"
表示文檔中定義的標籤是限定在該命名空間中的。
將 Settings.xml
和 settings-1.0.0.xsd
的根標籤的屬性聯繫起來,可知,前者使用默認的命名空間、指定 XSD 位置時使用的命名空間,都需要同後者的 xmlns
、targetNamespace
保持一致。
XSD 文檔中是如何定義 XML 文檔的,可以參見 XML Schema。
實際上,XSD 和 XML 的格式很像,那麼 XSD 中使用的標籤又是從何而來,憑什麼決定的呢!
尋其本源,最終是大家約定的結果,W3C 制定規則,而軟件商則根據該規則來編寫 XML 解析器。
網絡世界就是規則的世界,我們身處的世界的本質或許也是一條條規則。