1、xml基礎詳解:mysql
一、概述:sql
xml:便可擴展標記語言,xml是互聯網數據傳輸的重要工具,它能夠跨越互聯網任何的平臺,不受編程語言和操做系統的限制,能夠說它是一個擁有互聯網最高級別通行證的數據攜帶者。xml是當前處理結構化文檔信息中至關給力的技術,xml有助於在服務器之間穿梭結構化數據,這使得開發人員更加駕輕就熟的控制數據的存儲和傳輸。數據庫
Xml用於標記電子文件使其具備結構性的標記語言,能夠用來標記數據、定義數據類型,是一種容許用戶對本身的標記語言進行定義的源語言。Xml是標準通用標記語言(SGML)的子集,很是適合Web傳輸。XML提供統一的方法來描述和交換獨立於應用程序或供應商的結構化數據。編程
二、xml的特色及做用:服務器
特色:網絡
v xml與操做系統、編程語言的開發平臺都無關;編程語言
v 實現不一樣系統之間的數據交互。工具
做用:學習
v 配置應用程序和網站;網站
v 數據交互;
v Ajax基石。
在配置文件裏邊全部的配置文件都是以XMl的格式來編寫的。
跨平臺進行數據交互,它能夠跨操做系統,也能夠跨編程語言的平臺。
Ajax是如今目前比較流行的一個網絡交互的技術。Ajax裏面最後一個x實際上就是xml的縮寫。Xml(Extensible Markup Language)是可擴展標記語言
一個xml文檔必需要有第一行的聲明和它的文檔元素的描述信息就能夠了。
三、xml聲明
例子:
注:xml聲明通常是xml文檔的第一行;xml聲明由如下幾個部分組成:
四、根元素
它是xml文檔裏面惟一的;它的開始是放在最前面,結束是放在最後面。
五、元素:
(1) 全部的xml元素都必須有結束標籤;
(2) xml標籤對大小寫敏感;
(3) xml必須正確地嵌套;
(4)元素的命名規則:
名稱中能夠包含字母、數字或者其餘的字符;
名稱不能以數字或者標點符號開始;
名稱中不能包含空格。
(5)空元素
六、屬性
(1)語法
<元素名 屬性名=「屬性值」/>
例:<Student ID=「S100」>
<Name>Tom</Name>
</Student>
(2)注意:
屬性值用雙引號包裹;一個元素能夠有多個屬性,它的基本格式爲:
<元素名 屬性名=「屬性值」 屬性名=「屬性值」>;
屬性值中不可以直接包含<.」,&。
七、實體:
在xml中,一些字符擁有特殊的意義。若是把字符「<」放在xml元素中,會發生錯誤,這是由於解析器會把它看成新元素的開始,這樣會產生xml錯誤:
爲了不這個錯誤,請用實體引用來代替「<」字符:
xml中5個預約義實體
八、註釋
注:註釋內容中不要出現」--」;不要把註釋放在標籤中間;註釋不能嵌套。
九、總結:
(1)xml描述的是文檔的內容與語義,而不是文檔應當如何顯示;
(2)格式正規(well formed)的xml文檔
遵循以下規則的xml文檔稱爲格式正規的xml文檔:
v 必須有xml聲明語句;
v 必須有且僅有一個根元素;
v 標籤大小寫敏感;
v 屬性值用雙引號;
v 標籤成對;
v 空標籤關閉;
v 元素正確嵌套。
(3)有效的(valid)xml文檔。首先xml文檔是個格式正規的xml文檔,而後又須要知足DTD的要求,這樣的xml文檔稱爲有效的xml文檔;
十、解析器
十一、命名空間
11.一、xml命名空間(xml Namespaces)
(1)xml命名空間提供避免元素命名衝突的方法。
(2)在xml中,元素名稱是由開發者定義的,當兩個不一樣的文檔使用相同的元素名時,就會發生命名衝突。
11.二、xml命名空間示例
(1)使用前綴示例
與僅僅使用前綴不一樣,咱們爲標籤添加了一個xmlns屬性,這樣就爲前綴賦予了一個與某個命名空間相關聯的限定名稱。
2、DTD技術——xml文件的驗證機制
一、DTD概述:
文檔類型定義——Document Type Definition
DTD用來描述xml文檔的結構,一個DTD文檔包含:
元素的定義規則;元素之間的關係規則;屬性的定義規則。
二、爲何要用DTD呀
v 有了DTD,每一個xml文件能夠攜帶一個自身格式的描述,所謂格式描述就是個人xml文檔裏面能夠寫哪些東西,好比元素、屬性;
v 有了DTD,不一樣組織的人可使用一個通用DTD用來交換數據,xml是隨意定義的,有了DTD,咱們能夠限制多個公司之間按照這種DTD的規則來編寫xml文檔,因爲DTD都是統一格式,因此不一樣的公司之間,不一樣的組織之間就能夠用這種通用的xml文檔格式進行交互數據了;
v 應用程序可使用一個標準DTD校檢從外部接收的xml數據是否有效。
三、如何編寫一個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文檔結合
四、DTD的具體定義——元素的定義
元素名稱:是指xml文檔裏面的元素名稱
元素類型:
(1)EMPTY
示例第一個是對的,第二個是錯誤的,由於它有內容了。
(2)#PCDATA
第一個是對的,第二個是錯誤的。
(3)純元素類型的DTD語法
(4)ANY
五、定義屬性的語法結構
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
爲屬性提供一個默認的值。
3、實體
一、實體概述
實體,簡單理解就是C#中的常量,咱們在DTD裏面定義,在xml文檔裏面去使用。(實際上就是自定義實體,與前面的預約義實體差很少是一回事)。
二、實體的定義
4、xml之Schema技術
一、Schema概述:xml Schema是用一套預先規定的xml元素和屬性建立的,這些元素和屬性定義了xml文檔的結構和內容模式。Xml Shema規定xml文檔實例的結構和每一個元素/屬性的數據類型。
理解:對於Schema來說,咱們能夠將shema比喻成爲是表結構。在表結構裏,定義一些數據的限制要求。而後咱們xml文檔呢就至關因而數據表未來要存儲的數據u,也就是數據庫裏面的數據表數據了,因此總體來說的話schema它就是用於驗證xml文檔的。
二、有了DTD,爲何要用Schema呢?
(1)DTD的侷限性
DTD不遵照xml語法(寫xml文檔實例時用一種語法,寫DTD的時候用另一種語法);DTD數據類型有限(與數據庫數據類型不一致);DTD不可擴展;DTD不支持命名空間(命名衝突)。
(2)Schema的新特性
Shema基於xml語法的;Shema能夠用能處理xml文檔的工具處理;Schema大大擴充了數據類型,能夠自定義數據類型;Schema支持元素的繼承——Object-Oriented;Shema支持屬性組。
三、Shema(模式):其做用與DTD同樣,也是用於驗證xml文檔的有效性,只不過它提供了比DTD更強大的功能和更細粒度的數據類型,另外Schema還能夠自定義數據類型。此外,Schema也是一個xml文件,而DTD則不是。
四、全部的Schema文檔,其根元素必須爲Schema。
五、Schema的文檔結構
六、Schema的數據類型
6.一、Schema的數據類型概述
6.二、簡單類型:
(1)內置的數據類型:
基本的數據類型;
擴展的數據類型;
(2)用戶自定義簡單類型(經過simpleType定義)。
6.三、複合類型(經過complexType定義)
6.四、數據類型的特徵
七、Schema的元素類型
7.一、Schema根元素
做用:包含已經定義的Schema
用法:<xs:schema>
屬性:xmlns/targetNamespace/elementFormDefault
例子:
7.二、element元素
做用:聲明一個元素
屬性:name/type/ref/minOccurs/maxOccurs
例子:
7.三、group元素
做用:把一組元素聲明組合在一塊兒
屬性:name
例子:
7.四、attribute元素
做用:聲明一個屬性
屬性:name/type/use/default/fixed
例子:
7.五、attributeGroup元素
做用:把一組屬性聲明組合在一塊兒
屬性:name/ref
例子:
7.六、simpleType元素
做用:定義一個簡單類型,它決定了元素和屬性值的約束和相關信息
屬性:name
經常使用的兩種方式:restriction——>一個約束;list——>從列表中選擇。
(1)simpleType元素的子元素——>restriction
子元素爲:<xs:restriction>——>定義一個約束條件
例子:
(2)simpleType元素的子元素——>list
子元素爲:<xs:list>——>從一個特定數據類型的集合中選擇定義一個簡單類型元素。
例子:
7.七、complexType元素
做用:定義一個複合類型,它決定了一組元素和屬性值的約束和相關信息。
屬性:name
經常使用的兩種方式:sequence——>一個序列;choice——>設置選擇項。
(1)complexType元素——sequence
做用:給一組元素一個特定的序列
例子:
(2)complexType元素——choice
做用:把一組屬性聲明組合在一塊兒,以即可以被複合類型應用
屬性:name/ref
例子:
7.八、complexType與simpleType區別
simpleType類型的元素中不能包含元素或者屬性;
當須要聲明一個元素的子元素和或屬性時,用complexType;
當須要基於內置的基本數據類型定義一個新的數據類型時,用simpleType。