XML三部曲之Schema詳解

2021-06-19 10:45:29 字數 2596 閱讀 3342



前幾篇部落格討論了xml及dtd的用法,通過討論了解到xml是一種元標記語言,通過它可以定義新的標記語言。另外,文件定義模型為xml文件提供了規範,dtd的引入雖然解決了xml文件的規範化問題,但它檔案格式型別和xml檔案格式型別不一致,同時dtd提供的資料型別有限有時候無法滿足行業的需求,所以引入了schema。schema模式可以確定xml文件的元素和屬性的結構、元素的順序、元素和屬性的資料值,根據範圍、列舉以及樣式匹配等。

xml schema語言也被稱為xml schema definition (xsd),它的作用是定義乙份xml文件的合法元件群(xml文件的結構),就像dtd的作用一樣。 xml schema以xml語言作為基礎,也可以說xml schema自身就是xml的一種應用。

xml schema和dtd的作用一樣,都是用來定義乙個xml文件的結構的模式,那麼為什麼有了dtd還要有xml schema呢?因為,xml schema比dtd作用更加強大。 

xml schema 比 dtd的優越性:

模式是可擴充套件的

模式比 dtd 功能更豐富且更有用

模式是用 xml 編寫的

模式支援資料型別

模式支援命名空間

不需要在學習其他的語言

可以直接使用xml編輯器來編寫xml schema

可以直接使用xml解析器來解析xml schema

可以使用xml dom來靈活的操作xml schema

可以使用xslt技術來轉換xml schema

兩者相同,都是定義了乙個xml文件的結構的模式。

兩者作用相同,但是語法上有些區別。schema是dtd的擴充套件,同樣支援元素和屬性的定義,並且定義的語法相似,但schema可以給元素和屬性新增相應的資料型別,同時還引入了全域性和區域性元素宣告的語法,另外根據元素和屬性的資料內容引入了簡單型別和複雜型別。

所謂的簡單型別(******type)和複雜型別(complextype),它們本身並不是具體的資料型別,它們只是對節點或者自定義型別的型別作乙個抽象的說明。

也就是說schema的引入使得模式的宣告更加類似於我們使用的程式語言。

清單1:user.xml文件結構

<?xml version="1.0"?>

《使用者列表》

《使用者》

《使用者名稱》xx

<?xml version='1.0' encoding='utf-8'?>

清單3:使用區域性形式定義schema,user.xsd

<?xml version='1.0' encoding='utf-8'?>

清單2和清單3的都定義了user.xsd,它們的作用是相同的,都是為了驗證xml文件的合法性,但定義的方法不同,清單2是使用全域性元件的形式定義,而清單3使用的區域性形式定義,具體的區別請看下文。

上文中我們分別從作用和用法上對schema和dtd進行了對比分析,schema和dtd最大的區別在於schema引入了資料型別,其它的如元素和屬性的宣告等類似於dtd,在下面討論時就不再詳述。

schema基本內容導圖:

當乙個模式檔案建立好以後,可以用它來驗證某乙個xml文件的有效性,也就是說檢驗某個xml文件是否遵循了模式檔案的定義。 那麼,xml文件怎麼來引用乙個模式文件呢? 

schema模型的引用更類似於前面所說的命名空間的應用方法,具體例項如下:

<?xml version='1.0' encoding='utf-8'?>

《使用者列表 xmlns:xsi= xsi:nonamespaceschemalocation='user.xsd'>

《使用者》

《使用者名稱》我是誰

(1)按照內容的不同分為簡單和複雜元素,分別使用******type和complextype標示。

簡單元素:元素中內容只能是文字,不包含其它的元素和屬性。

<?xml version='1.0' encoding='utf-8'?>

複雜元素:元素中包含其它的元素和屬性。它有四種型別,分別是空元素、只包含其他元素、只包含正文、包含正文又包含其他元素。

<?xml version='1.0' encoding='utf-8'?>

(2)按照定義位置可分為區域性和全域性元素。

全域性元素:元素的父元素必須是;

區域性元素:區域性元素宣告只能出現在複雜型別(元素)定義內部。即元素的父元素只能是、或元素。

<?xml version='1.0' encoding='utf-8'?>		

人生三部曲

人生三部曲 童年沙丁魚罐頭似的公共汽車在曬的發燙的柏油路上緩慢地爬著。我 瘦瘦小小的個子在擁擠的人群中喘不過氣來。還要多久呀?人們煩躁而沉悶的氣氛充斥著整個車廂。忽然,我看見一位打扮入時的西裝人士,正悄悄地把手伸入一位老人的口袋。我第一反應就是有小偷!於是大聲脫口而出,一車人都回頭驚悸地看著我,西裝...

XML三部曲之二 DTD

dtd document type definition 定義了 xml檔案的結構,為 xml檔案提供語法與規則。內容既可以在 xml檔案中,也可以在 xml檔案外。可以定義自己的 dtd.dtd 對於xml 是可選的內容。為了正確的交換資料,xml檔案需要確定的結構。劉偉 男乙個標籤只能包含乙個和...

報表三部曲之連線

我們了解和設計了報表之後,剩下的就要實現vb與報表的資料互連。首先要先新增相應的部件。ctrl t 部件 勾選grid report。1.在專案中加入對grid report 的引用 之後出現 2,在窗體中設計部件大小等等屬性。其次,是 1,例項化報表 dim withevents report a...