生活随笔
收集整理的這篇文章主要介紹了
xml引用xsd文件规则
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)自:http://www.jk1123.com/?p=124
以前寫spring的配置文件的時候 一直搞不清楚在xml引入的xsd文件到底是怎么回事,只會從官方文檔拷貝一份用,今天細(xì)細(xì)地研究了一下,原來也不難,就那么回事,記錄下來
我們寫下如下的示例的xml文件
<?xml version="1.0" encoding="UTF-8"?> 這里添加一些描述信息 c++從入門到放棄 329.0 小笨蛋 javaweb開發(fā)實戰(zhàn) 212.09 小笨蛋 接下來我們要求對上面的xml文件中的元素和屬性加上限制
description元素可以有 也可以沒有 而且必須出現(xiàn)在book元素前面
id必須有 且 值是int類型
name必須有 名字是字符串類型
price必須有 價格是double類型
author必須有 作者是字符串
一個books元素中可以有多個book元素
但是我們知道xml是可擴展的標(biāo)記語言 根本是無限制的 那么我們就要引入books.xsd文件 對他進行限制
寫下來如下規(guī)則:
<xs:schema xmlns=“http://xml.jk1123.com/books”
xmlns:xs=“http://www.w3.org/2001/XMLSchema”
targetNamespace=“http://xml.jk1123.com/books”
elementFormDefault=“qualified”
version=“0.0.1”>
<!–
xmlns=“http://xml.jk1123.com/books”
這里格式是 xmlns:前綴
但是我們這里為啥沒寫前綴呢 因為我們決定將此命名空間作為默認(rèn)命名空間 所以省略不寫了
這也是為啥在下方代碼中: 我們可以直接寫book元素
<xs:element ref=“book” minOccurs=“1” maxOccurs=“unbounded”></xs:element>
如果這里我們沒有默認(rèn) 比方說這里寫成
xmlns:books=“http://xml.jk1123.com/books”
也即是說我們將使用該命名空間 前綴是books
那么那段代碼應(yīng)該寫成
<xs:element ref=“books:book” minOccurs=“1” maxOccurs=“unbounded”></xs:element>
所以一般情況下,我們都會有一個默認(rèn)命名空間
xmlns:xs="http://www.w3.org/2001/XMLSchema"這里的格式是 xmlns:前綴這里表示引入了 w3中xmlSchema官方命名空間 正式由于引入了這個命名空間 所以我們才可以使用下方那些<xs:element> <xs:documentation> 等等一些標(biāo)簽 這個元素都被定義在官方的命名空間中一個schema文件 必定會應(yīng)用該官方命名空間targetNamespace="http://xml.jk1123.com/books"表示此約束文件的命名空間的名字 這個名字可以隨便自定義,但是一般情況下我們都會寫成 http://公司域名/根元素的名字 比如這個例子中http://xml.jk1123.com 表示的jk1123我的一個個人域名 books表示該約束文件中根元素elementFormDefault="qualified"表示該約束文件約束的xml 所有的元素都必須有命名空間前綴version="0.0.1"表示此約束文件的版本-->
<xs:element name="books"><!--表示使用該命名空間的根元素是books--><xs:annotation><xs:documentation><!--該xsd的描述信息 -->該xsd文件是對books命名空間的一些約束信息</xs:documentation></xs:annotation><xs:complexType><!--表示該類型是一個復(fù)合類型也就是還說在books元素下可以包含子元素和屬性--><xs:sequence><!--表示隊列 也就是說books元素中可以有以下元素 而且必須是有序的出現(xiàn) 順序不對也不行 --><xs:element name="description" maxOccurs="1" minOccurs="0"></xs:element><!--上面表示books元素可以包含子標(biāo)簽description 而且最多出現(xiàn)一次 必須出現(xiàn)在book子元素之前 --><xs:element ref="book" minOccurs="1" maxOccurs="unbounded"></xs:element><!--上面表示books元素可以包含子標(biāo)簽book 而且最少出現(xiàn)一次 必須出現(xiàn)在description子元素之后 最多無限制 --></xs:sequence></xs:complexType>
</xs:element>
<xs:element name="book"><xs:complexType><xs:sequence><xs:element type="xs:string" name="name" minOccurs="1" ></xs:element><xs:element type="xs:double" name="price" minOccurs="1"></xs:element><xs:element type="xs:string" name="author" minOccurs="1"></xs:element></xs:sequence><xs:attribute name="id" use="required" type="xs:int"></xs:attribute></xs:complexType>
</xs:element>
</xs:schema>
如上的books.xsd文件就是對上面books.xml的限制
接下來我們的任務(wù)就是將xsd引入 books.xml代碼修改如下
<?xml version="1.0" encoding="UTF-8"?>
<books xmlns=“http://xml.jk1123.com/books”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation="
http://xml.jk1123.com/books http://xml.jk1123.com/xsd/books.xsd
">
<!--http://xml.jk1123.com/books http://xml.jk1123.com/xsd/books.xsdxmlns="http://xml.jk1123.com/books"表示引入books命名空間 并且作為默認(rèn)命名空間xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"表示引入官方的命名空間XMLSchema-instance 并且前綴是xsi 約定俗成xsi當(dāng)然你可以寫 xyz一個xml文件必然會引入該命名空間 因為看下面xsi:schemaLocation="http://xml.jk1123.com/books http://xml.jk1123.com/xsd/books.xsd"使用xsi前綴 使用官方命名空間中schemaLocation元素 該元素的作用是告知命名空間對應(yīng)xsd位置語法如下xsi:schemaLocation="namespace名字 location地址"http://xml.jk1123.com/books http://xml.jk1123.com/xsd/books.xsd表示該命名空間對應(yīng)的xsd文件 在http://xml.jk1123.com/xsd/books.xsd網(wǎng)絡(luò)地址上 xml校驗器會去該位置下載xsd文件當(dāng)然如果你的xsd文件在本地 你可以寫相對地址 或者絕對地址 例如http://xml.jk1123.com/books books.xsd表示該xsd跟xml文件在同一個目錄下http://xml.jk1123.com/books file://E:\interllijworkspace\beike\xml\src\resource\books.xsd表示該xsd文件在本地磁盤的哪個目錄
-->
<description>這里添加一些描述信息
</description>
<book id="1"><name>c++從入門到放棄</name><price>329.0</price><author>小笨蛋</author>
</book>
<book id="2"><name>javaweb開發(fā)實戰(zhàn)</name><price>212.09</price><author>小笨蛋</author>
</book>
接下來我們再嘗試寫一些不合法的值 
總結(jié)
以上是生活随笔為你收集整理的xml引用xsd文件规则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。