XML DTD Schema 学习-Schema 介绍
Schema 介紹:
有人會(huì)問(wèn),DTD和Schema都是對(duì)XML文檔的一種約束,為什么不就選其中之一,而又有Sche
ma呢。因?yàn)?/span>DTD安全度太低了,也就是說(shuō)它的約束定義能力不足,無(wú)法對(duì)XML實(shí)例文檔做出
更細(xì)致的語(yǔ)義限制。其實(shí)細(xì)心的人會(huì)發(fā)現(xiàn),在DTD中,只有一個(gè)數(shù)據(jù)類(lèi)型,就是PCDATA(用
在元素中)和CDATA(用在屬性中),在里面寫(xiě)日期也行,數(shù)字還行,字符更是沒(méi)問(wèn)題。而
Schema正是針對(duì)這些DTD的缺點(diǎn)而設(shè)計(jì)的,Schema是完全使用XML作為描述手段,具有很強(qiáng)
的描述能力,擴(kuò)展能力和處理維護(hù)能力等。下面讓我們看一個(gè)簡(jiǎn)單的例子吧:
hello.xml
-------------------
<?xml version="1.0"?>
Hello World!!
說(shuō)明:
一個(gè)根元素:greeting;且這個(gè)元素不含屬性,無(wú)子元素,內(nèi)容是字符串。
hello.xsd
----------
<?xml version="1.0"?>
http://www.w3.org/2001/XMLSchema">
說(shuō)明:
XML Schema文檔后綴名是.xsd,完全符合XML語(yǔ)法,根元素是schema,命名空間xmlns:xsd
="http://www.w3.org/2001/XMLSchema,用元素定義實(shí)例文檔中的元素,如gre
eting。xsd:string就是定義的數(shù)據(jù)類(lèi)型了,其中的數(shù)據(jù)類(lèi)型有很多,比如:int,double,
dateTime,Boolean,long,integer,float,等,總之Java等語(yǔ)言里有的數(shù)據(jù)類(lèi)型它都有,但
要以“xsd:”開(kāi)頭。
讓我們?cè)倏匆粋€(gè)里面有子無(wú)素的例子:
customer.xml
-----------
teiki
則可以寫(xiě)出以下的XML Schema文檔:
customer.xsd
----------------
1: <?xml version="1.0"?>
2: http://www.w3.org/2001/XMLSchema">
3:
4:
5:
6:
7:
8:
9:
10:
11:
說(shuō)明:
實(shí)例文檔customer.xml中,元素含有兩個(gè)子元素,在Schema中凡是有兩個(gè)以上
的子元素,就認(rèn)為是復(fù)雜類(lèi)型的,所以我們?cè)?/span>Schema文檔中采用ComplexType來(lái)定義該元素
。表示有多個(gè)XML子元素。
sequence表示子元素依次出現(xiàn)的順序。
如果有多層子元素怎么辦呢,同樣的道理,有幾層寫(xiě)幾層,一直往下嵌就OK了,這里我要
說(shuō)的是另一種方法,結(jié)構(gòu)看上去會(huì)清晰一些。
address.xml
---------------
Teiki
<!-- address追加一個(gè)地址子元素 -->
Zhejiang
Hangzhou
Xilu Road, No.121, 7F
下面就是采用ref元素來(lái)編寫(xiě)的這個(gè)Schema文檔:
address2.xsd
----------------------
1: <?xm l version="1.0"?>
2: http://www.w3.org/2001/XMLSchema">
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
說(shuō)明:
如果按正常的寫(xiě)法,應(yīng)該把13-21行的內(nèi)容替換到每8行去,但這里使用ref元素可以直接
將其指向另一個(gè)模塊,使文檔更加具有可讀性。
如果元素中包含屬性怎么辦呢?一樣簡(jiǎn)單,只要在定義完子元素的后面再著定義屬性就行
了。定義屬性用“attribute”,還是舉個(gè)例子吧
customer2.xml
---------------
Teiki
No.237, Road Waitan, Shanghai
這個(gè)例子和上面的一個(gè)例子差不多,只是在元素customer中設(shè)了一個(gè)屬性id。
customer2.xsd
------------------
1: <?xml version="1.0"?>
2: http://www.w3.org/2001/XMLSchema">
3:
4:
5:
6:
7:
8:
9:
10: <!-- 增加屬性定義 -->
11:
12:
13:
14:
15:
說(shuō)明:
需要注意的一點(diǎn)是,屬性和元素不是一家的,所以要把它放在sequence外面寫(xiě),但它們都
在customer的孩子,所以要寫(xiě)在complexType的里面。
下面再看一個(gè)例子:
order4-1.xsd
----------------------
1:<?xml version="1.0"?>
2:http://www.w3.org/2001/XMLSchema">
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
上面的例子中,maxOccurs代表:相同元素最多出現(xiàn)的次數(shù),與些相反的是minOccurs代表:
出現(xiàn)的最少次數(shù)。默認(rèn)情況下兩個(gè)都為“1”,如果把minOccurs設(shè)為“0”,表示該元素可
有可無(wú)。choice代表:可選的元素,也就是在這里面寫(xiě)的元素只能選其中之一,不能全寫(xiě)
。simpleType代表自定義數(shù)據(jù)類(lèi)型,也就是name里的并不是真正的數(shù)據(jù)類(lèi)型,而是根據(jù)自
己的意愿定制的。restriction代表對(duì)某一數(shù)據(jù)類(lèi)型做約束,也就是只能取其中范圍之內(nèi)符
合要求的,比如第25-29行中,里面又有個(gè)元素enumeration代表枚舉,也就是只能在枚舉
的那幾個(gè)中選一個(gè),而下在的36-36行,里面又有一對(duì)元素minInclusive和maxInclusive
代表類(lèi)型的取值范圍,也就是只能取大于等于minInclusive并且小于等于maxInclusive的
數(shù)。
把這個(gè)Schema用在XML中是這樣的:
<?xml version="1.0" encoding="UTF-8"?>
http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSc
hemaLocation="D:\ProgramCode\Year2\XML\practice\temp.xsd">
7-5005-6450-3
3
xyb
3
<!-- 注意下面這個(gè)是錯(cuò)的,因?yàn)槌隽艘?guī)定的范圍 -->
7-5005-6450-3
13
從上面的注釋到此,是錯(cuò)誤的 -->
說(shuō)明:
紅色的部分是導(dǎo)入Schema的命令,綠色的是Schema文件的路徑,如果用XMLSPY寫(xiě)時(shí),會(huì)自
動(dòng)加上。
對(duì)屬性的設(shè)置,基本上和元素的差不多。比如:
這里我們講id屬性類(lèi)型作為一種自定義數(shù)據(jù)類(lèi)型idType。它的格式就是上面用到的也就是
類(lèi)似于“7-5005-6450-3”樣的。
而且,用attribute元素的use屬性來(lái)定義是否是必須的屬性。
required是必須值,optional是可選值,prohibited是無(wú)屬性值。default屬性是默認(rèn)值。
?
?
來(lái)自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/12476590/viewspace-504261/,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任。
轉(zhuǎn)載于:http://blog.itpub.net/12476590/viewspace-504261/
總結(jié)
以上是生活随笔為你收集整理的XML DTD Schema 学习-Schema 介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: default.asp html,ASP
- 下一篇: dropout法中为什么要除以keep_