無廢話XML XML約束(schema)

2021-06-27 19:00:40 字數 4316 閱讀 2358

dtd 作為 xml 1.0 規範的重要組成部分, 對於 xml 文件的結構起到很好的描述作用。 但是,它也具有一些缺點,比如,它採用了非 xml 的語法規則、不支援資料型別、擴充套件性較差等等。schema 正好解決了這些問題。從總體上講,schema 具有以下優點:

•  一致性:schema 使得對 xml 的定義不必再利用一種特定的形式化的語言,而是直接借助 xml 自身的特性,利用 xml 的基本語法規則來定義 xml 文件的結構,使得xml 達到了從內到外的完美統一,也為 xml 的進一步發展奠定了堅實的基礎。

•  擴充套件性:schema 對 dtd 進行了擴充,引入了資料型別、命名空間,從而使其具備較強的可擴充套件性。

•  互換性:利用 schema,我們能夠書寫 xml 文件以及驗證文件的合法性。另外,通過特定的對映機制,還可以將不同的 schema 進行轉換,以實現更高層次的資料交換。

•  規範性:同 dtd 一樣,schema 也提供了一套完整的機制以約束 xml 文件中置標的使用,但相比之下,後者基於 xml,更具有規範性。schema 利用元素的內容和屬性來定義 xml 文件的整體結構,如哪些元素可以出現在文件中、元素間的關係是什麼、每個元素有哪些內容和屬性、以及元素出現的順序和次數等等,都可一目了然。

schema 是伴隨著 xml1.0 規範的制訂而推出的,從 schema 的第乙個方案到現在為止,w3c 成員共提交了五個 schema 規範,分別是 xml-data、dcd(document contentdescription for xml)、sox(schema for object-oriented xml)、ddml(document definitionmarkup language)和 xml schema。直到現在,關於 schema 還沒有乙個正式推薦標準,它仍處於不斷修改完善的過程當中。

下面以乙個簡單的示例對 schema 進行介紹:

1. <?xml version="1.0" encoding="gb2312" ?>

2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.

15. 16. 17. 18. 19.

20.

----第 1 行是 xml 型別宣告語句,指明該文件是乙個 xml 文件,並且符合版本 1.0 規範;該文件採用 gb2312 編碼。

----第 2 行是 schema 宣告語句,它包含了 schema 命名空間的宣告。本例中用到了兩個命名空間:一是xmlns="urn:schemas-microsoft-com:xml-data",它指定本文件是乙個 xmlschema 文件;另乙個是xmlns:dt="urn:schemas-microsoft-com:datatypes",它定義了在本文件中可以使用的資料型別。

----第 3、4 行是屬性定義語句,它定義了兩個屬性:序號和性別。

----第 15-19 行定義了本 xml schema 的頂級元素:通訊錄,指明該元素包含乙個子元素:聯絡人,以及兩個屬性:序號、性別。

----第 20 行是結束標記語句,它表明該 xml schema 的描述到此為止。

schema 有著自己的一套完整的語法,涉及到的關鍵元素包括:schema、elementtype、element、attributetype、attribute、group、datatype、description。

1,schema元素是xml schema中第乙個出現的元素, 用於宣告該xml文件是乙個schema文件。schema 具有兩個屬性:name 指定該 schema 的名稱,而 xmlns 則指定該 schema包含的命名空間。

2,elementtype 元素是 xml schema 中重要元素之一,用於定義該 xml schema 文件中出現的元素。 通過屬性 content 來表明 elementtype 所宣告的元素是否為空、 是否包含文字、是否包含子元素、還是既包含文字又包含子元素,通過 dt:type 指定該元素的資料型別,通過 order 指定該元素的子元素的排列規則,相應取值有:one、seq、many。element 元素是用於宣告在 elementtype 中出現的元素,它需要同elementtype 配合使用。

3,attributetype 元素用於定義在 schema 文件中出現的屬性型別。其屬性 dt:type 指定所宣告屬性型別的資料型別, 可支援的資料型別包括: entity, entities, enumeration, id, idref,idrefs, nmtoken, nmtokens, notation, 和 string。default 屬性可用於指定該屬性型別的預設取值。required 屬性指定該屬性對於引用它的元素是否是必須的。 attribute 元素實際上是對 attributetype 宣告的屬性的引用,它也需要同 attributetype 配合使用。

4,group 元素是用於將 xml 文件中的元素分組。通過屬性 order 可指定該分組中的元素或子分組的順序, 通過 minoccurs 和 maxoccurs 分別指定該分組在 xml 例項文件中出現的最少和最多次數。

5,datatype 是 xml schema 中乙個重要元素,也是 xml schema 的一大特色,它用於為elementtype 和 attributetype 指定資料型別。 xml schema 支援兩種資料型別, 一種是 xml1.0 標準中定義的十種基本資料型別:entity, entities, enumeration, id, idref, idrefs,nmtoken, nmtokens, notation, 和 string; 另外, 還支援一些擴充套件資料型別, 包括: bin.base64,bin.hex, boolean, char, date, datetime, datetime.tz, fixed.14.4, float, int, number, time,time.tz, i1, i2, i4, r4, r8, ui1, ui2, ui4, uri, uuid。

6,description 只能算是 xml schema 中乙個配角,它的主要作用是為 elementtype 和attributetype 元素提供描述資訊。

由於 xml schema 的種種優點,現在 schema 取代 dtd 已成大勢所趨。在這種情況下,國際上一些知名企業和組織審時度勢紛紛在戰略上向 xml schema 傾斜,提供對 xmlschema 的支援。其中最為典型的當然要數微軟的 biztalk 和 xml.org 組織的註冊/資源庫。更加值得一提的是,微軟在其瀏覽器軟體 internet explorer 5.0 中率先提供對 schema 的支援,當然,因為最終的 xml schema 標準尚未正式推出,因此微軟支援的 schema 也只是過渡性"標準",今後還會不斷修改。

我們在使用框架寫xml的時候,使用的就是schema。說下我理解最深的一點,為什麼框架這裡要使用schema,框架要放好多不同的包進來,那麼這個是就會有乙個命名衝突的問題。為了解決這個問題,那麼我們寫xml標籤的時候就要宣告不同的命名空間,比如說這個標籤是那個命名空間下的。schema很好的解決了這個問題,而且直接一看就可以直接這份xml中,我們那些可以使用,那些不可以使用,要想只用特定的命名空間的標籤那麼我們必須要引入特定的schema。

以下是乙份具體的springmvc層的配置檔案的schema:

1,xmlns: 命名空間預設定義方式

2,xmlns:xsi:宣告xml schema例項命名空間並將xsi字首與該命名空間繫結,這樣模式處理器就可以識別xsi:schemalocation屬性。xml schema例項命名空間的字首通常使用xsi。

如果沒有那句話,下邊的xsi:schemalocation這個屬性不起作用。

3,xsi:schemalocation:這個schema檔案的位址。

在j2ee中,上面這3個東西都是存在的,所以就不用管了。比如說web.xml裡面也有這3句話的:

xmlns:xsi="" version="2.4"

我們要想使用這種指定命名空間的標籤,就必須匯入上面xmlns:mvc="" ,意思就是告訴這個xml說:這個xml可以使用這個mvc標籤了,然後裡面的東西都是定義在mvc這個命名空間下的。此外還要把這個schema的位址引入進來,也就是 ,/spring-mvc-3.0.xsd 這2個位址,這樣子就可以使用這個mvc標籤了。

命名空間宣告有兩種方式,即直接定義方式和預設定義方式:

直接定義方式: xmlns: [命名空間字首] = [命名空間名]

預設定義方式: xmlns = [命名空間名]

XML(XML概述 XML約束 XML解析)

1 xml 可擴充套件的標記語言。2 xml的作用 3 xml語法 注釋 元素 element 標籤 tag 格式化良好的xml文件,必須只有乙個根元素 屬性 attribute 轉義字元 cdata區 1 xml約束 2 根據dtd約束寫xml文件 3 三種dtd約束 4 schema約束 1 x...

無廢話專案經理

1專案經理五個關鍵環節 a專案核心要解決的問題 專案邊界。it公司認為把軟體安裝好,功能培訓給客戶業務部門會操作,驗收就ok了,這就是專案目標。而企業一般認為把erp軟體用起來就是專案目標。但這兩種目標都是錯誤的。企業到底想在這一次專案中解決什麼核心問題,哪些是erp擅長解決的,哪些是軟體不擅長解決...

無廢話學習Haskell 語言基礎

讓我們從如下的 開始介紹語言基礎 相信和我一樣,你看到haskell的語法時候,肯定以為自己到了火星了 list makelist 如果在類似於c c 語言的 中,建立乙個列表可能會有這樣的函式。不過顯然這樣的函式在執行中會出現死迴圈 或者會生成乙個無限長的列表。然而,在haskell中,可以這樣來...