定義:XML是一種數(shù)據(jù)傳輸和存儲格式微姊,用標(biāo)簽保存數(shù)據(jù)內(nèi)容酸茴,利用標(biāo)簽嵌套關(guān)系保存數(shù)據(jù)之間關(guān)系
應(yīng)用場景:不同平臺間數(shù)據(jù)傳輸、程序配置文件
存在形式:XML文件兢交、也存在內(nèi)存或網(wǎng)絡(luò)中薪捍,不要把XML狹隘理解為XML文件
校驗(yàn):瀏覽器內(nèi)置Html和XML解析器,可以校驗(yàn)xml是否正確
一配喳、XML語法
1酪穿、聲明或處理指令PI(processing instruction),指定解析器如何解析顯示XML文檔
①聲明前不能有任何內(nèi)容(如注釋)
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
version必須存在,當(dāng)前xml所遵循規(guī)范版本1.0
encoding指定xml解析編碼,必須和xml文件保存編碼一致,默認(rèn)值iso8859-1(歐美拉丁字母符號晴裹,沒有中文)
standalone指明xml是否獨(dú)立,默認(rèn)值yes表明不依賴其他文檔,no表明依賴其他文檔(很多解析器都會忽略此屬性)
②處理指令PI
<?xml-stylesheet type="text/css" href="xxx.css"?>為XML指定樣式css顯示
2被济、元素(xml標(biāo)簽)
只能包含一個(gè)根標(biāo)簽
一個(gè)元素分為開始和結(jié)束標(biāo)簽<a>xxx</a>,其間有文本內(nèi)容(標(biāo)簽體)
一個(gè)元素不含任何內(nèi)容為自閉標(biāo)簽<a/>
區(qū)分大小寫如<A>和<a>是不同標(biāo)記
命名不能以數(shù)字涧团、標(biāo)點(diǎn)符號只磷、"_"、"xml"開頭,不能包含空格泌绣、冒號
3钮追、一個(gè)元素可以有多個(gè)屬性,屬性值用單引號或雙引號<a size="xxx" color="xxx"/>,屬性名遵循元素命名規(guī)則
4、<!-- 注釋內(nèi)容 -->阿迈,除了聲明前外可在任意位置元媚、不能嵌套注釋
5、轉(zhuǎn)義字符/CDATA苗沧,可以使解析器將轉(zhuǎn)義內(nèi)容當(dāng)作普通文本來處理
①轉(zhuǎn)義字符
&: &
<: <
>: >
": "
': '
②<![CDATA[內(nèi)容]]>
被括起來的內(nèi)容刊棕,會被瀏覽器當(dāng)作普通文本來處理
區(qū)別:
CDATA可以成段的進(jìn)行轉(zhuǎn)義,而轉(zhuǎn)義字符一次只能轉(zhuǎn)義一個(gè)字符
CDATA可以保存原始數(shù)據(jù)待逞,只通知解析器按普通文本去處理
轉(zhuǎn)義字符改變了原始數(shù)據(jù)甥角,用其他字符替代
二、XML約束
1识樱、DTD是XML約束文件(.dtd)蜈膨,約束xml寫法,并對xml校驗(yàn)
①外部引入,在外部文件中寫DTD,必須用utf-8編碼保存
<!DOCTYPE 根元素名稱 SYSTEM 文件位置>
SYSTEM表明dtd在當(dāng)前文件系統(tǒng)中,后面文件位置是當(dāng)前硬盤中的位置
<!DOCTYPE 根元素名稱 PUBLIC "DTD名稱" "DTD文件URL">
PUBLIC表明dtd在網(wǎng)絡(luò)公共位置中,后面指明dtd名字和所在網(wǎng)絡(luò)URL地址
②內(nèi)部引入,在xml中直接寫<!DOCTYPE 根元素名稱 [dtd約束的內(nèi)容]>
③約束元素 <!ELEMENT 元素名稱 元素約束>
元素約束:
ANY表示包含任意子元素
EMPTY表示不含子元素
()表示子元素
,表示子元素必須按順序并列出現(xiàn)
|表示子元素出現(xiàn)其中之一
#PCDATA表示包含標(biāo)簽體
+表示一次或多次
*表示0次或多次
?表示0次或一次
組合:<!ELEMENT 元素名稱 ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
④約束屬性 <!ATTLIST 元素名 屬性名 屬性類型 屬性約束>
屬性類型:
CDATA表明普通字符串
ENUMERATED表明取指定枚舉列表值
ID表明屬性值在文檔中唯一,只能以字母或下劃線開頭
屬性約束:
#REQUIRED表明當(dāng)前屬性必須存在
#IMPLIED表明當(dāng)前屬性可選
#FIXED表明當(dāng)前屬性具有固定值
'默認(rèn)值'表明當(dāng)前屬性具有默認(rèn)值
⑤實(shí)體ENTITY,對一段重復(fù)使用的內(nèi)容引用牺荠、復(fù)用
引用實(shí)體,在xml中引用的實(shí)體
定義實(shí)體:<!ENTITY 實(shí)體名稱 “實(shí)體內(nèi)容” >
使用實(shí)體:&實(shí)體名稱;
參數(shù)實(shí)體,在dtd中引用的實(shí)體
定義實(shí)體:<!ENTITY %實(shí)體名稱 "實(shí)體內(nèi)容">
使用實(shí)體:%實(shí)體名稱;
實(shí)例:
<?xml version = "1.0" encoding="utf-8" ?>
<!DOCTYPE 聯(lián)系人列表[
<!ELEMENT 聯(lián)系人列表 ANY>
<!ELEMENT 聯(lián)系人 (姓名,EMAIL)>
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT EMAIL (#PCDATA)>
<!ATTLIST 聯(lián)系人 編號 ID #REQUIRED>
]>
<聯(lián)系人列表>
<聯(lián)系人 編號="a1">
<姓名>張三</姓名>
<EMAIL>zhang@it315.org</EMAIL>
</聯(lián)系人>
<聯(lián)系人 編號="a2">
<姓名>李四</姓名>
<EMAIL>li@it315.org</EMAIL>
</聯(lián)系人>
</聯(lián)系人列表>
2翁巍、Schema也是xml約束文件(.xsd),目的是為了克服DTD缺陷
1)Schema本身符合xml語法,方便解析
2)對名稱空間支持有非常好
3)比DTD更多數(shù)據(jù)類型,并且自定義數(shù)據(jù)類型
4)語義約束更精確,強(qiáng)于DTD
5)比DTD復(fù)雜多,學(xué)習(xí)成本高
Schema文檔必須有一個(gè)根結(jié)點(diǎn)(稱為Schema)
名稱空間xmlns:全世界唯一標(biāo)識某個(gè)資源(通常是公司域名),僅是名稱,不是真實(shí)的資源地址
實(shí)例:
XSD文件(book.xsd)
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="www.xxx.com"
elementFormDefault="qualified">
<xs:element name='書架' >
<xs:complexType>
<xs:sequence maxOccurs='unbounded' >
<xs:element name='書' >
<xs:complexType>
<xs:sequence>
<xs:element name='書名' type='xs:string' />
<xs:element name='作者' type='xs:string' />
<xs:element name='售價(jià)' type='xs:string' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML文件(.xml)
xmlns:w3指定名稱空間(http://www.w3.org/2001/XMLSchema-instance)別名為w3
w3:schemaLocation指定名稱空間(www.xxx.com)來源于book.xsd文件(可以是網(wǎng)絡(luò)地址)
xmlns:my指定名稱空間(www.xxx.com)別名為my
<my:書架 xmlns:w3="http://www.w3.org/2001/XMLSchema-instance"
w3:schemaLocation="www.xxx.com book.xsd"
xmlns:my="www.xxx.com">
<my:書>
<my:書名>JavaScript網(wǎng)頁開發(fā)</my:書名>
<my:作者>張孝祥</my:作者>
<my:售價(jià)>28.00元</my:售價(jià)>
</my:書>
</my:書架>
XML文件(.xml)
xmlns="www.xxx.com"可以忽略my 沒有前綴默認(rèn)使用這個(gè)空間
<書架 xmlns:w3="http://www.w3.org/2001/XMLSchema-instance"
w3:schemaLocation="www.xxx.com book.xsd"
xmlns="www.xxx.com">
<書>
<書名>JavaScript網(wǎng)頁開發(fā)</書名>
<作者>張孝祥</作者>
<售價(jià)>28.00元</售價(jià)>
</書>
</書架>
簡書: http://www.reibang.com/p/a0aaef0900f9
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/54355152
GitHub博客:http://lioil.win/2017/01/11/Xml-DTD-Schema.html
Coding博客:http://c.lioil.win/2017/01/11/Xml-DTD-Schema.html