XML是自定義的標籤,有時候標籤太多,記不住,因此就須要有約束來告訴我能寫哪些標籤,哪些標籤寫錯了不能識別java
有不少約束,其中DTD和Schema約束最爲常見。web
約束本質上也是一種xml文件。apache
DTD約束較爲古老,簡單,一些老框架使用DTD做爲約束:Struts2和Hibernate都使用DTD做爲其XML配置文件的約束app
Schema約束功能更爲強大,用的更爲普遍,Tomcat和Spring都使用Schema做爲其xml配置文件的約束。框架
DTD約束是已.dtd爲後綴命名學習
Schema約束已.xsd爲後綴命名spa
定義元素:<!ELEMENT 元素名稱 使用規則>code
定義屬性:<!ATTLIST 元素名稱 屬性名稱 屬性值類型 設置說明>xml
書寫規範跟一個XML文件同樣是包含關係element
根節點是:<xs:schema xmlns:xs="名稱空間">
後面的屬性節點和元素節點以及文本節點根據使用的須要進行嵌套,也就是說實際使用的時候怎麼嵌套在寫Schema文件的時候就怎麼嵌套
元素節點:<xs:element name="名稱"></xs:element>
屬性節點:<xs:attribute name="名稱" type="類型" use="使用要求"/>
不是爲了寫.dtd或者.xsd文件!
而是爲了知道約束這個概念,到時候可以在寫XML的時候更順手!
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">
一、查看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映射到本地便可