一、XML的概述
XML的全名為可擴展標記語言(Extensible Markup Language),XML的作用為:1、傳輸,2、存取數(shù)據(jù),3、軟件的配置文件。傳輸現(xiàn)在都用更輕量的Json,而存儲則用數(shù)據(jù)庫。所以軟件的配置文件是現(xiàn)在的XML的主要用途?,F(xiàn)在的一些主流框架都是使用XML進項配置的。
(一)XML的基本語法
1、XML的文檔聲明:通常出現(xiàn)在XML的第一行第一列的位置!
寫法:
<?xml 屬性名=”屬性值” 屬性名=”屬性值” ...?>
* version :必須的. 使用”1.0”
* encoding :字符集. 是使用瀏覽器打開的時候采用的默認的字符集的編碼.
* standalone :描述XML文檔是否需要依賴其他的文件.
舉例:<?xml version="1.0" encoding="UTF-8"?>
2、XML的注釋
寫法:
3、XML的元素:xml中的元素其實就是一個個的標簽 - a: 包含標簽體(<>成對兒出現(xiàn)),b: 不包含標簽體
(<元素名 屬性/>)
舉例:
a:
1 <student>
2 <name>zhangsan</name>
3 <age>18</age>
4 </student>
b:
1 <student
2 name="zhangsan"
3 age="18"
4 />
元素的命名規(guī)范:
* 嚴格區(qū)分大小寫;<a><A>
* 只能以字母或下劃線開頭;abc _abc
* 不能以xml(或XML、Xml等)開頭;
* 名稱字符之間不能有空格或制表符;
* 名稱字符之間不能使用冒號;
4、XML元素中的屬性:一個元素可以有多個屬性,每個屬性都有它自己的名稱和取值。
寫法:
* 屬性值一定要用引號(單引號或雙引號)引起來。
* 屬性名稱的命名規(guī)范與元素的命名規(guī)范相同
* 元素中的屬性是不允許重復的
5、XML的特殊字符和CDATA區(qū)
特殊字符:

CDATA區(qū)的寫法:
<![CDATA[ 內(nèi)容 ]]>
二、XML的約束
在XML中都是用戶自定義的標簽,若出現(xiàn)小小的錯誤,軟件程序?qū)⒉荒苷_地獲取文件中的內(nèi)容而報錯。
(如:Tomcat),所以就可以編寫一個文檔來約束一個XML的書寫規(guī)范,這個文檔稱之為約束。XML的約束就是
用來約束XML的文檔中可以出現(xiàn)哪些標簽,不能出現(xiàn)哪些標簽,標簽中是否有順序,出現(xiàn)的次數(shù)。XML的約束
包括2種:1、DTD,2、Schema。
兩者的區(qū)別:
* 語法的不同,DTD的語法自成一體而Schema的語法則和XML類似。
* Schema具有命名空間
* Schema具有更強強的語義和約束
* Schema能夠更好地被解析器解析
(一)DTD約束
1、DTD中定義元素:在DTD文檔中使用ELEMENT關鍵字來聲明一個XML元素。
語法:
<!ELEMENT 元素名稱 使用規(guī)則>
元素的一些約束規(guī)則:
* (#PCDATA):指示元素的主體內(nèi)容只能是普通的文本.(Parsed Character Data)
* EMPTY:用于指示元素的主體為空。比如
* ANY:用于指示元素的主體內(nèi)容為任意類型。
* (子元素):指示元素中包含的子元素
* 如果子元素用逗號分開,說明必須按照聲明順序去編寫XML文檔
* 如果子元素用"|"分開,說明任選其一。
* 用+(至少一次)、
(可有可無,零次、一次或多次)、
?(可以有也可以無,有的話只能有一次。零次或一次)來表示元素出現(xiàn)的次數(shù)
2、DTD中定義屬性:在DTD文檔中使用ATTLIST關鍵字來為一個元素聲明屬性。
寫法:
<!ATTLIST 元素名
屬性名1 屬性值類型 設置說明
屬性名2 屬性值類型 設置說明
......
>
屬性的類型和約束:
CDATA:表示屬性的取值為普通的文本字符串
* ENUMERATED (DTD沒有此關鍵字):表示枚舉,只能從枚舉列表中任選其一
* ID:表示屬性的取值不能重復
* #REQUIRED:表示該屬性必須出現(xiàn)
* #IMPLIED:表示該屬性可有可無
* #FIXED:表示屬性的取值為一個固定值。語法:#FIXED "固定值"
例子:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--根元素有且只能有一個 -->
3 <!ELEMENT 例子 (數(shù)+)>
4 <!ELEMENT 數(shù) (1,2,3,4)>
5 <!ELEMENT 1 (#PCDATA)>
6 <!ELEMENT 2 (#PCDATA)>
7 <!ELEMENT 3 (#PCDATA)>
8 <!ELEMENT 4 (#PCDATA)>
3、DTD的引用方式
- 內(nèi)部引用DTD:
<!DOCTYPE persons [
]>
- 外部引用DTD:
* 本地DTD:
<!DOCTYPE persons SYSTEM ".dtd">
網(wǎng)絡DTD:
<!DOCTYPE persons PUBLIC "url" "*.dtd">
(二)Schema約束
一個XML Schema文檔通常稱之為模式文檔(約束文檔),遵循這個文檔書寫的xml文件稱之為實例文檔。
Schema約束自身就是一個XML文件,但它的擴展名通常為.xsd。Schema支持名稱空間。名稱空間:可以理
解為JAVA里的package,約束文檔:可以理解為一個JAVABean類,實例文檔:就是通過JAVABean類創(chuàng)建的實
例對象。
可以通過命名空間來分辨出約束文檔
舉例:
*Schema文件
1 <?xml version="1.0" encoding="UTF-8"?>
2 <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.xmldemo.com"
3 elementFormDefault="qualified">
4 <element name="persons">
5 <!-- 復雜元素 -->
6 <complexType>
7 <!-- 有序的,最大值不限定,最小值為一 -->
8 <sequence maxOccurs="unbounded" minOccurs="1">
9 <element name="person">
10 <complexType>
11 <sequence>
12 <!-- 簡單表簽 -->
13 <element name="name" type="string"></element>
14 <element name="age" type="int"></element>
15 <element name="sex" type="string"></element>
16 </sequence>
17 <!-- 屬性,在有序和復雜元素之間 -->
18 <attribute name="id" type="int" />
19 </complexType>
20 </element>
21 </sequence>
22 </complexType>
23 </element>
24 </schema>
*實例文檔
1 <?xml version="1.0" encoding="UTF-8"?>
2 <p:persons xmlns:p="http://www.xmldemo.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://www.xmldemo.com schame.xsd ">
4 <p:person>
5 <p:name>p:name</p:name>
6 <p:age>0</p:age>
7 <p:sex>p:sex</p:sex>
8 </p:person>
9 </p:persons>
寫的好約束文件可以使用eclipse自動引入:

