XML詳解----Schema(精)[原創]

有人會問,DTD和Schema都是對XML文檔的一種約束,爲什麼不就選其中之一,而又有Schema呢。因爲DTD安全度太低了,也就是說它的約束定義能力不足,無法對XML實例文檔做出更細緻的語義限制。其實細心的人會發現,在DTD中,只有一個數據類型,就是PCDATA(用在元素中)和CDATA(用在屬性中),在裏面寫日期也行,數字還行,字符更是沒問題。而Schema正是針對這些DTD的缺點而設計的,Schema是完全使用XML作爲描述手段,具有很強的描述能力,擴展能力和處理維護能力等。下面讓我們看一個簡單的例子吧: hello.xml ------------------- Hello World!! 說明:一個根元素:greeting;且這個元素不含屬性,無子元素,內容是字符串。 hello.xsd ---------- 說明: XML Schema文檔後綴名是.xsd,完全符合XML語法,根元素是schema,命名空間xmlns:xsd="http://www.w3.org/2001/XMLSchema,用元素定義實例文檔中的元素,如greeting。xsd:string就是定義的數據類型了,其中的數據類型有很多,比如:int,double,dateTime,Boolean,long,integer,float,等,總之Java等語言裏有的數據類型它都有,但要以“xsd:”開頭。讓我們再看一個裏面有子無素的例子: customer.xml ----------- teiki
No.237, Road Waitan, Shanghai
則可以寫出以下的XML Schema文檔: customer.xsd ---------------- 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 說明:實例文檔customer.xml中,元素含有兩個子元素,在Schema中凡是有兩個以上的子元素,就認爲是複雜類型的,所以我們在Schema文檔中採用ComplexType來定義該元素。表示有多個XML子元素。 sequence表示子元素依次出現的順序。如果有多層子元素怎麼辦呢,同樣的道理,有幾層寫幾層,一直往下嵌就OK了,這裏我要說的是另一種方法,結構看上去會清晰一些。 address.xml --------------- Teiki
Zhejiang Hangzhou Xilu Road, No.121, 7F
下面就是採用ref元素來編寫的這個Schema文檔: address2.xsd ---------------------- 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 說明:如果按正常的寫法,應該把13-21行的內容替換到每8行去,但這裏使用ref元素可以直接將其指向另一個模塊,使文檔更加具有可讀性。如果元素中包含屬性怎麼辦呢?一樣簡單,只要在定義完子元素的後面再着定義屬性就行了。定義屬性用“attribute”,還是舉個例子吧 customer2.xml --------------- Teiki
No.237, Road Waitan, Shanghai
這個例子和上面的一個例子差不多,只是在元素customer中設了一個屬性id。 customer2.xsd ------------------ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 說明:需要注意的一點是,屬性和元素不是一家的,所以要把它放在sequence外面寫,但它們都在customer的孩子,所以要寫在complexType的裏面。下面再看一個例子: order4-1.xsd ---------------------- 1: 2: 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代表:相同元素最多出現的次數,與些相反的是minOccurs代表:出現的最少次數。默認情況下兩個都爲“1”,如果把minOccurs設爲“0”,表示該元素可有可無。choice代表:可選的元素,也就是在這裏面寫的元素只能選其中之一,不能全寫。simpleType代表自定義數據類型,也就是name裏的並不是真正的數據類型,而是根據自己的意願定製的。restriction代表對某一數據類型做約束,也就是隻能取其中範圍之內符合要求的,比如第25-29行中,裏面又有個元素enumeration代表枚舉,也就是隻能在枚舉的那幾個中選一個,而下在的36-36行,裏面又有一對元素minInclusive和maxInclusive代表類型的取值範圍,也就是隻能取大於等於minInclusive並且小於等於maxInclusive的數。把這個Schema用在XML中是這樣的: 7-5005-6450-3 3 xyb 3 7-5005-6450-3 13 說明:紅色的部分是導入Schema的命令,綠色的是Schema文件的路徑,如果用XMLSPY寫時,會自動加上。對屬性的設置,基本上和元素的差不多。比如: 這裏我們講id屬性類型作爲一種自定義數據類型idType。它的格式就是上面用到的也就是類似於“7-5005-6450-3”樣的。而且,用attribute元素的use屬性來定義是否是必須的屬性。 required是必須值,optional是可選值,prohibited是無屬性值。default屬性是默認值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章