XML的DTD和Schema約束

爲何要使用約束?

XML是自定義的標籤,有時候標籤太多,記不住,因此就須要有約束來告訴我能寫哪些標籤,哪些標籤寫錯了不能識別java


XML中有哪幾種約束?

有不少約束,其中DTD和Schema約束最爲常見。web


約束本質上是什麼?

約束本質上也是一種xml文件。apache


DTD約束和Schema約束的區別

特色的區別:

DTD約束較爲古老,簡單,一些老框架使用DTD做爲約束:Struts2和Hibernate都使用DTD做爲其XML配置文件的約束app

Schema約束功能更爲強大,用的更爲普遍,Tomcat和Spring都使用Schema做爲其xml配置文件的約束。框架


文件的區別:

DTD約束是已.dtd爲後綴命名學習

Schema約束已.xsd爲後綴命名spa


語法上的區別:

DTD約束的基本語法:

定義元素:<!ELEMENT 元素名稱 使用規則>code

定義屬性:<!ATTLIST 元素名稱 屬性名稱 屬性值類型 設置說明>xml

Schema約束的基本語法:

書寫規範跟一個XML文件同樣是包含關係element

根節點是:<xs:schema xmlns:xs="名稱空間">

後面的屬性節點和元素節點以及文本節點根據使用的須要進行嵌套,也就是說實際使用的時候怎麼嵌套在寫Schema文件的時候就怎麼嵌套

元素節點:<xs:element name="名稱"></xs:element>

屬性節點:<xs:attribute name="名稱" type="類型" use="使用要求"/>




爲何要學習DTD和Schema約束?

不是爲了寫.dtd或者.xsd文件!

而是爲了知道約束這個概念,到時候可以在寫XML的時候更順手!


XML中如何引入DTD約束?

dtd文檔在本地: <!DOCTYPE 根元素 SYSTEM "DTD文檔路徑">

dtd文檔不在本地: <!DOCTYPE 根元素 PUBLIC "DTD名稱" "DTD文檔的URL">

Demo:(來自Struts2的struts.xml)

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">


XML如何引入Schema約束?

一、查看schema文檔,找到根元素,在xml中寫出來

二、根元素來自哪一個名稱空間。使用xmlns指令來聲明

三、引入的名稱空間跟哪一個xsd文件對應?使用schemaLocation來指定:兩個取值:第一個爲名稱空間 第二個爲xsd文件的路徑

Demo:(來自Tomcat的web.xml)

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">



開發過程當中若是沒法鏈接到英特網,如何使用約束?

在IDE中給將約束的URI映射到本地便可

相關文章
相關標籤/搜索