1. 程式人生 > >XML檔案詳解以及解析

XML檔案詳解以及解析

例子:


注:xml宣告一般是xml文件的第一行;xml宣告由以下幾個部分組成:

4、根元素

它是xml文件裡面唯一的;它的開始是放在最前面,結束是放在最後面。

5、元素:

(1) 所有的xml元素都必須有結束標籤;

(2) xml標籤對大小寫敏感;

(3)  xml必須正確地巢狀;

(4)元素的命名規則:

名稱中可以包含字母、數字或者其他的字元;

名稱不能以數字或者標點符號開始;

名稱中不能包含空格。

(5)空元素

6、屬性

(1)語法

<元素名 屬性名=“屬性值”/>

例:<Student ID=“S100”>

       <Name>Tom</Name>

</Student>

(2)注意:

屬性值用雙引號包裹;一個元素可以有多個屬性,它的基本格式為:

<元素名 屬性名=“屬性值” 屬性名=“屬性值”>;

屬性值中不能夠直接包含<.”,&。

7、實體:

在xml中,一些字元擁有特殊的意義。如果把字元“<”放在xml元素中,會發生錯誤,這是因為解析器會把它當作新元素的開始,這樣會產生xml錯誤:

為了避免這個錯誤,請用實體引用來代替“<”字元:

xml中5個預定義實體

8註釋

注:註釋內容中不要出現”--”;不要把註釋放在標籤中間;註釋不能巢狀。

9、總結:

(1)xml描述的是文件的內容與語義,而不是文件應當如何顯示;

(2)格式正規(well formed)的xml文件

遵循如下規則的xml文件稱為格式正規的xml文件:

v 必須有xml宣告語句;

v 必須有且僅有一個根元素;

v 標籤大小寫敏感;

v 屬性值用雙引號;

v 標籤成對;

v 空標籤關閉;

v 元素正確巢狀。

(3)有效的(valid)xml文件。首先xml文件是個格式正規的xml文件,然後又需要滿足DTD的要求,這樣的xml文件稱為有效的xml文件;

10、解析器

11、名稱空間

11.1、xml名稱空間(xml Namespaces)

(1)xml名稱空間提供避免元素命名衝突的方法。

(2)在xml中,元素名稱是由開發者定義的,當兩個不同的文件使用相同的元素名時,就會發生命名衝突。

11.2、xml名稱空間示例

(1)使用字首示例

與僅僅使用字首不同,我們為標籤添加了一個xmlns屬性,這樣就為字首賦予了一個與某個名稱空間相關聯的限定名稱。

二、DTD技術——xml檔案的驗證機制

1、DTD概述:

文件型別定義——Document Type Definition

DTD用來描述xml文件的結構,一個DTD文件包含:  

元素的定義規則;元素之間的關係規則;屬性的定義規則。

2、為什麼要用DTD呀

v 有了DTD,每個xml檔案可以攜帶一個自身格式的描述,所謂格式描述就是我的xml文件裡面可以寫哪些東西,比如元素、屬性;

v 有了DTD,不同組織的人可以使用一個通用DTD用來交換資料,xml是隨意定義的,有了DTD,我們可以限制多個公司之間按照這種DTD的規則來編寫xml文件,由於DTD都是統一格式,所以不同的公司之間,不同的組織之間就可以用這種通用的xml文件格式進行互動資料了;

v 應用程式可以使用一個標準DTD校檢從外部接收的xml資料是否有效。

3、如何編寫一個DTD

DTD分成三大類,第一是內部DTD,第二是外部DTD,第三是內外結合的DTD。

(1)內部DTD文件(Students.xml):

(2)就是說這個xml文件裡面既包含xml定義,又包含DTD的定義。

這個[]裡面是DTD的定義的內容,就是第一個叫內部DTD文件。

(3)外部DTD文件(Students.xml  Students.dtd):

所謂外部就是DTD的定義和我們的xml文件是在不同的檔案裡面。

那麼外部的DTD如何使用呢?那就需要在前面的xml文件的根元素的上面這個位置跟剛才內部的是一樣的,要寫上

這類年改革文件在同一個資料夾下面,就可以了。

有內部DTD了,為什麼還要學習外部DTD呢??

內部的DTD,它只能驗證當前的這個xml文件。那假如說,我們有一個DTD需要驗證多個xml文件的話,那就直接使用外部DTD就行。

(4)內外部DTD文件結合

4、DTD的具體定義——元素的定義

元素名稱:是指xml文件裡面的元素名稱

元素型別:


(1)EMPTY

示例第一個是對的,第二個是錯誤的,因為它有內容了。

(2)#PCDATA

第一個是對的,第二個是錯誤的。

(3)純元素型別的DTD語法


(4)ANY

5、定義屬性的語法結構

xml文件攜帶資料的方式,不僅僅是xml的元素的內容,還可以是元素的屬性。

所以說在DTD裡面我們有必要對屬性進行限制。

(1)編寫屬性驗證的語法規則:

(2)屬性型別——CDATA

CDATA是表示屬性的值,可以是任何字元,這裡包括數字和中文。

問題一:屬性的CDATA與元素的CDATA節有何區別呢??

屬性的CDATA表示屬性值是任何的字元,元素裡的CDATA節是表示在CDATA節裡面的內容不被xml文件進行解析。

問題二:#PCDATA與CDATA有何區別??

#PCDATA是限制元素裡面的內容是字元型別的,而這個CDATA是限制屬性裡面的內容是字元型別。

(3)屬性型別——ID

表明該屬性的取值必須是唯一的。

(4)屬性型別——IDREF/IDREFS

v IDREF是指它的值要指向文件當中其它地方宣告的ID。把IDREF當成資料庫的外來鍵,把ID當成主鍵理解就行;

v IDREFS同IDREF,但是可以具有由空格分開的多個引用;

(5)屬性型別——Enumerated

預先定義了一些值,屬性的值必須在所列出的值的範圍內

(6)屬性特點——#REQUIRED

它表示元素的所有的例項都必須有該屬性的值(NOT NULL)

(7)屬性特點——#IMPLIED

這就表示該屬性的值是可以被忽略的。

(8)屬性特點——#FIXED

元素中該屬性的值必須為指定的固定值。

(9)屬性特點——Default

為屬性提供一個預設的值。

三、實體

1、實體概述

實體,簡單理解就是C#中的常量,我們在DTD裡面定義,在xml文件裡面去使用。(實際上就是自定義實體,與前面的預定義實體差不多是一回事)。

2、實體的定義


四、xml之Schema技術

1、Schema概述:xml Schema是用一套預先規定的xml元素和屬性建立的,這些元素和屬性定義了xml文件的結構和內容模式。Xml Shema規定xml文件例項的結構和每個元素/屬性的資料型別。

理解:對於Schema來講,我們可以將shema比喻成為是表結構。在表結構裡,定義一些資料的限制要求。然後我們xml文件呢就相當於是資料表將來要儲存的資料u,也就是資料庫裡面的資料表資料了,所以整體來講的話schema它就是用於驗證xml文件的。

2、有了DTD,為什麼要用Schema呢?

(1)DTD的侷限性

DTD不遵守xml語法(寫xml文件例項時用一種語法,寫DTD的時候用另外一種語法);DTD資料型別有限(與資料庫資料型別不一致);DTD不可擴充套件;DTD不支援名稱空間(命名衝突)。

(2)Schema的新特性

Shema基於xml語法的;Shema可以用能處理xml文件的工具處理;Schema大大擴充了資料型別,可以自定義資料型別;Schema支援元素的繼承——Object-Oriented;Shema支援屬性組。

3、Shema(模式):其作用與DTD一樣,也是用於驗證xml文件的有效性,只不過它提供了比DTD更強大的功能和更細粒度的資料型別,另外Schema還可以自定義資料型別。此外,Schema也是一個xml檔案,而DTD則不是。

4、所有的Schema文件,其根元素必須為Schema。

5、Schema的文件結構

6、Schema的資料型別

6.1、Schema的資料型別概述

6.2、簡單型別:

(1)內建的資料型別:

基本的資料型別;

擴充套件的資料型別;

(2)使用者自定義簡單型別(通過simpleType定義)。

6.3、複合型別(通過complexType定義)

6.4、資料型別的特徵

7、Schema的元素型別

7.1、Schema根元素

作用:包含已經定義的Schema

用法:<xs:schema>

屬性:xmlns/targetNamespace/elementFormDefault

例子:

7.2、element元素

作用:宣告一個元素

屬性:name/type/ref/minOccurs/maxOccurs

例子:

7.3、group元素

作用:把一組元素宣告組合在一起

屬性:name

例子:

7.4、attribute元素

作用:宣告一個屬性

屬性:name/type/use/default/fixed

例子:

7.5、attributeGroup元素

作用:把一組屬性宣告組合在一起

屬性:name/ref

例子:

7.6、simpleType元素

作用:定義一個簡單型別,它決定了元素和屬性值的約束和相關資訊

屬性:name

常用的兩種方式:restriction——>一個約束;list——>從列表中選擇。

(1)simpleType元素的子元素——>restriction

子元素為:<xs:restriction>——>定義一個約束條件

例子:

(2)simpleType元素的子元素——>list

子元素為:<xs:list>——>從一個特定資料型別的集合中選擇定義一個簡單型別元素。

例子:

7.7、complexType元素

作用:定義一個複合型別,它決定了一組元素和屬性值的約束和相關資訊。

屬性:name

常用的兩種方式:sequence——>一個序列;choice——>設定選擇項。

(1)complexType元素——sequence

作用:給一組元素一個特定的序列

例子:

(2)complexType元素——choice

作用:把一組屬性宣告組合在一起,以便可以被複合型別應用

屬性:name/ref

例子:

7.8、complexType與simpleType區別

simpleType型別的元素中不能包含元素或者屬性;

當需要宣告一個元素的子元素和或屬性時,用complexType;

當需要基於內建的基本資料型別定義一個新的資料型別時,用simpleType。