schema的概述
schema約束同為xml文件的約束模式語言之一, 最大的作用是為了驗證xml文件的規范性的.
是為了解決dtd約束不夠的問題, 相應的他的配置就變得比較復雜
schema本身就是xml語言, 后綴名為xsd, 對命名空間的支持非常好
schema的根元素就為schema
schema約束和dtd約束的區別:
⑴XML Schema符合XML語法結構。
⑵DOM、SAX等XML API很容易解析出XML Schema文檔中的內容。
⑶XML Schema對名稱空間支持得非常好。
⑷XML Schema比XML DTD支持更多的數據類型,並支持用戶自定義新的數據類型。
⑸XML Schema定義約束的能力非常強大,可以對XML實例文檔作出細致的語義限制。
⑹XML Schema不能像DTD一樣定義實體,比DTD更復雜,但Xml Schema現在已是w3c組織的標准,它正逐步取代DTD。
schema的引入
學的時候這個地方搞得最暈了, dtd約束直接在<!ENTITY >中聲明了本地文件還是網絡路徑; 而schema約束中並沒有dtd那么詳細. 剛開始以為在同一文件夾下就可以使用, 而后使用寫好的xml文件的便與約束無關了, 但經過幾次試驗之后發現約束依然在起作用. 翻了很多資料, 理解了一點,
首先介紹URL和URI的區別:
URL: 統一資源定位符, 可以准確的定位到互聯網上某一資源的確定位置, 一般由協議, 服務器名, 文件路徑組成, URL是URI的子集
URI: 統一資源標識符, 對某一互聯網資源進行標識的字符串, 關羽他倆的區別, 可具體參考:http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html
而在schema中, 每個約束模式文檔都可以被賦予一個唯一的使用URI標識的名稱空間, Xml文件引用schema約束的時候, 便是通過這個名稱空間來聲明來自哪個shema約束文檔的.
在xsd文檔中, 至少要包括shema根元素和xml模式命名空間的定義, 元素定義等
在schema中聲明schema根元素:
根元素包括模式的約束, xml模式空間命名的定義, 其他命名空間的定義, 版本信息, 語言信息和其他的信息.
xmlns=URI: 使用默認的名稱空間
targetNamespace=:URI: 指定schema文檔中聲明的元素屬於哪個命名空間
xmlns:xsd=URI: 使用名稱空間引入多個xml shema文檔
elementFormaDefault= " ": 指定shema文檔中聲明的跟元素和所有子元素都屬於targetnamespace鎖指定的名稱空間
解下來, 如何在xml文件中引用定義的schema約束
在新建的xml文檔中加入聲明后, 引入schema的約束文檔,
首先聲明約束來自哪個名稱空間, 使用xmlns="" 來指定,
引入的名稱空間和哪個xsd文件對應, 使用schemaLocation="" 來指定, 第一個為名稱空間, 第二個為xsd文件路徑.
如果在開發過程中沒有internet連接, 這是ide將約束的URI映射到本地, 所以指定了命名空間和元素后, 仍然可以使用schema約束
最后, 從文檔中截取了幾張圖方便理解: