摘要本文首先介紹了xml schema的一些相關概念,主要包括名稱空間的聲明、根元素的聲明和數據類型的分類。數據類型主要分為三種,一種是原生數據類型,一種是派生數據類型,還有一種是自定義簡單數據類型。又通過一個詳細的例子來介紹schema的書寫和對應xml文檔和最終二者的引用。
關鍵詞xml schema 名稱空間 數據類型
中圖分類號:TP31文獻標識碼:A
在xml中,規范xml文檔的除了DTD之外,還存在一種規格方法,也就是xml schema。Xml schema 是用來規范和描述xml文檔的第二代標準,它必須以獨立的文檔保存,使用與xml文檔相同的語法,其使用有一些類似與xml文檔中的外部DTD。
Xml schema 的數據結構類型主要分為三種,一種是原生數據類型,一種是派生數據類型,還有一種是自定義簡單數據類型。原生數據類型不可以包括其他元素及其屬性,只可以包含各種具體數據。一般常見的有string(字符串數據),float(標準的32位浮點數)和deimal(任意精度和位數的十進制數)。派生數據結構類型可以由原生數據結構派生出來,也可以由其他派生數據結構派生出來。最后是自定義簡單數據類型。它有些類似于數據結構當中的結構體,屬于典型的一個父元素包括幾個子元素。
了解這些之后,就可以開始對Xml schema進行編碼了。首先要了解xml根元素的聲明。其中對根元素的聲明必須有且只有一個,這個根元素不僅表明了該文檔是Xml schema的文檔,而且還指明了其名稱空間以及其他一些信息。
一般Xml schema的聲明格式如下:
… …
其中xmln是用來聲明名稱空間的關鍵詞,這里的名稱空間被映射到xsd前綴,但是一般來說,名稱空間的前綴可以使用任意的標識符,而不只局限于xsd。
一般在聲明一個數據類型的XML文檔元素時,通常會包含若干個子元素或者屬性。像這種嵌套式的具體例子如下所示:
上述例子中就聲明了一個名為company的元素,其中包含有2個子元素,一個名為manager,一個名為department。
除了元素之外,還有元素屬性的聲明。這個非常簡單,只需要在名稱之后加上type類型的聲明就可以了,具體格式如下:
上述例子聲明了一個名為len的屬性,并且規定該屬性值的類型為一個十進制數。
了解了xml shcema的文檔聲明、元素聲明和元素屬性聲明之后,我們通過一個實例來具體分析schema的使用。
首先我們定義一個關于大學的schema的文檔,其中包括對它的聲明,代碼如下:
然后是聲明根元素schema以及相應的名稱空間,并將該名稱空間映射到前綴xsd,表示這是一個schema的文檔。代碼顯示如下:
接下來就是對元素的聲明以及相關屬性的定義。
首先聲明一個根元素,名叫university,其中包含有4個子元素,分別是UniversityName、school、address和faculty。其中UniversityName和faculty是字符類型的元素,address是引用了別的元素。而school是屬于自定義復雜數據類型的元素。具體代碼顯示如下:
其中
聲明了根元素之后,就開始對根元素的子元素進行聲明,一般ref類型的元素所引用的子元素是位于它后面的文檔的。以下是對學院school的聲明代碼:
School元素中又包含了一個department元素,該元素又引用了別的元素。所以school是一個自定義復雜的數據類型。以下是schoo所引用的department的聲明語句:
其中minOccurs=”1” maxOccurs=”5”是指專業名稱最少有一個,最多有五個。聲明完school之后,開始聲明address。聲明語句如下所示:
至此,程序基本完結,只需在結尾處加上即可。該schema非常形象的規范出一個xml文檔的結構,所以必須給出被規范的xml文檔。Xml文檔命名為university.xml,其中xml代碼如下:
< DepartmentName>Computer Science and Technology< /DepartmentName>
至此xml文檔全部書寫完畢,最后的操作是需要在XML Schema和XML文檔之間建立引用關系。schema文檔來規范某個xml文檔時必須在該xml文檔的根元素中指明用來驗證該文檔的schema的位置。這里又分兩種情況進行討論。第一種是當schema的根元素中包含了一個特定的targetNamespace時,可以通過schemaLocation屬性以及W3C的實例名稱空間來聲明短語。一般格式如下:
Xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
第二種情況就是根元素中沒有targetNamespace屬性,這種情況則需要在相應的XML文檔的根元素中,通過noNamespaceSchemaLocation屬性以及W3C的schema實例名稱空間聲明來制定所引用的schema文檔。
只有將xml文檔和schema聯系起來之后,schema就可以熟練的規范xml文檔了,此時的xml文檔就是一個格式良好的xml文檔了。