xml DTD 和 xmlns xml schema 示例解析

1. DTD

先來說 DTD,我們先給聘個例子,以例子為導向進行講解:
這個是一個spring的簡單配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
...
</beans>

不看具體內容,我們先來看一下以前我們不太關注的前兩行。

首先我們要明確一點 xml 文檔本身并不實現任何功能,我們下邊所說的他所表現的東西,都是要給xml解析器看的。

第一行 <?xml version="1.0" encoding="UTF-8"?>
這一行就是說明 此xml文檔的版本為1.0,以及編碼方式為UTF-8

第二行 <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">

乍一看好像很復雜,完全看不懂,實際上呢這個涉及到 xml 的另一個概念 DTD。這個東西我們后邊再細說,現在你可以先簡單做如下理解:

首先我們要知道, xml里邊的標簽如 <beans> <city> <person> ...這些都是可以隨意寫的,這樣就會比較混亂,那人們就發明了一個東西叫DTD的東西來規范我們的標簽,像這個文檔里標簽可以寫成什么樣啊,誰是主標簽,誰是子標簽,誰是屬性,他們的類型是什么 都由 DTD 來規定,好,我們暫時理解到這樣就可以了。

好,我們繼續說
<!DOCTYPE 當然就是DTD的標簽定義了
beans 就是說明當前文檔的根元素是什么,從下邊的內容也能看出來
PUBLIC "-//SPRING/DTD BEAN/EN" 這個是公共標識符定義,xml解析器知道如何尋找匹配此公共標識符的DTD
"http://www.springframework.org/dtd/spring-beans.dtd" 如果 解析器用上邊的公共標識符沒有匹配到DTD,則會用這個URL尋找DTD 的位置。

那DTD的文件到底是什么樣子呢,我們下邊簡單的來了解一下:

DTD 相關

DTD(文檔類型定義)的作用是定義XML文檔的合法構建模塊。

通俗一點說就是定義當前XML文檔里都可以有什么元素,他們的格式是什么。

和以前一樣,我們先來看一例子:

一、第一個例子

<!ELEMENT beans (
    description?,
    (import | alias | bean)*
)>

1:

我們接下來來分析上邊這個聲明
首先,我們先來學習一個DTD中元素聲明的語法:

    <!ELEMENT 元素名稱 (元素內容)>

那我們先知道了一點,就是這個聲明是在聲明一個 beans 元素,也就是有了它,我們就可以在用這個DTD文件聲明的文檔中用 <beans></beans>這樣的元素了。

2:

接下來 ()里邊的就是元素內容了,也就是 這個元素都可以包含什么子元素.
第一個description? 要明白這個,我們得再學習一個語法:

//聲明出現0次或1次的元素
<!ELEMENT 元素名稱 (子元素名稱?)>

也就是beans元素下邊,description子元素只能出現0次或1次。

3:

(import | alias | bean)* 這個涉及到兩個語法:
|當然就是或了,也就是當我們需要統一設定一些元素的屬性時就要用到它了
*?一樣也是通配符,代表 可以出現0次或多次

總結:

我們總結一下這個聲明的意思就是,我們聲明了一個beans元素,他的子元素包含只能出現 0次或1次的description元素,還有可以出現0次或多次的 import, alias,bean元素

第二個例子

<!ATTLIST beans default-lazy-init (true | false) "false">

這個就是元素屬性的定義了,我們先來看一下語法:

<!ATTLIST 元素名稱 屬性名稱 屬性類型 默認值>

(en1|en2|...) 此值是枚舉列表中的一個值

那上邊這個定義的意思就很顯示了:
我們定義了一個 beans 元素的屬性 名為 default-lazy-init 它的值可以為 true或者false 它的默認值為 false

這個暫時先了解到這兒了。

2. xml schema

我們再來看一個 pom 的例子:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.yl</groupId>
  <artifactId>BootStudy</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

xmlns 這個就是xml命名空間了,用來區分元素名字相同,但功能不同的元素,像一個唯一id,所寫明的網址也不一事實上就是一個確定有效的網址。

xmlns:xsi 這個就稍有一些復雜了,xsi的全稱是 xml schema instance。

我們先大概解釋下 xml schema,這個呢就像上邊我們所說的DTD,也是用來規范這個xml中應該有什么元素,什么屬性, 都是什么樣的,不過比DTD更強大就是了。

好,我們繼續,xmlns:xsi 指的就是我們這個xml schema 文件里邊的定義要遵循什么規范,注意:這個不是規范這個xml文檔里的元素的,而是規范 xml schema的

xsi:schemaLocation 這個就是具體的xml schema文件了,后綴是xsd (xml schema defination) ,第一部分是這個xsd 需使用的命名空間,第二部分就是具體的xsd文件的位置了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. XML簡介 以下內容來自于http://www.w3school.com.cn/xml 基本知識 XML 和...
    WebSSO閱讀 1,956評論 1 7
  • 經過兩天的奮戰,終于把xml簡略的過了一遍。 1.1XML介紹 xml是Extensible Markup lan...
    Ystrator閱讀 848評論 0 2
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,915評論 18 139
  • 1. XML總結 1.1. XML簡介 XML : 可擴展的標記語言。(和HTML非常類似的) 可擴展的。 自定義...
    Ethan_Walker閱讀 3,117評論 0 12
  • XML文件我經常使用,頭部信息一般都是直接粘貼過來,而不知道那些屬性的意義。通過查閱資料,我通過自己的理解解釋一下...
    dejunz閱讀 7,302評論 1 8