1.1 XML語言的概述
1.1.1 XML介紹
xml語言是具有結(jié)構(gòu)性的標記語言, 可以靈活的存儲一對多的數(shù)據(jù)關(guān)系.
- 舉例:
graph TD
A[中國]-->B[北京]
A[中國]-->C[山東]
A[中國]-->D[湖北]
B-->E[豐臺]
B-->F[海淀]
C-->J[濟南]
C-->H[青島]
D-->D1[武漢]
D-->D2[荊州]
??以上這種數(shù)據(jù), 如果通過我們學習的集合來存儲的話, 需要通過多個集合的嵌套使用.
那么很顯然, 數(shù)據(jù)存儲的過程就非常麻煩, 但是我們今天所學習的xml文件就可以很簡單的存儲這種一對多的數(shù)據(jù)
至于怎樣存儲, 我們稍后會詳細講解, 目前需要掌握的是關(guān)于xml的使用場景
用來存儲一對多的數(shù)據(jù)
另外, xml還有一些其他的應用方面:
??之前學習過properties配置文件, 通過這種配置文件, 可以使代碼的編寫更加靈活.
但是這種配置文件也只能存儲一個鍵值對的映射關(guān)系, 如果需要存儲多個呢?
沒錯, 可以使用xml , 所以xml的另一方面應用就展示出來了
用來當做配置文件存儲數(shù)據(jù)
1.1.2 問題: xml文件是用來做什么的
核心思想:
答:存儲數(shù)據(jù)
延伸問題: xml是怎樣存儲數(shù)據(jù)的呻拌?
答:以標簽的形式存儲
例: <name>Jack</name>
1.2 XML的文檔聲明
1.2.1 XML文件的組成部分
- 文檔聲明
- 元素
- 元素的屬性
- 注釋
- CDATA區(qū)
- 特殊字符
- 處理指令(PI:Processing Instruction):了解
1.2.2 文檔聲明
- 什么是文檔聲明?
- 在編寫XML文檔時获枝,需要先使用文檔聲明來聲明XML文檔。且必須出現(xiàn)在文檔的第一行
這就好比我們在寫java文件的時候需要聲明class一樣, 就是個硬性的規(guī)定.
- 在編寫XML文檔時获枝,需要先使用文檔聲明來聲明XML文檔。且必須出現(xiàn)在文檔的第一行
格式
<?xml version='1.0' encoding='UTF-8'?>
xml表示標簽的名字
version表示當前文件的版本號
encoding表示當前編碼, 需要跟文件的編碼產(chǎn)生對應關(guān)系
ps: standalone表示標記此文檔是否獨立
了解即可
1.3 XML的元素
1.3.1 什么是元素? 元素該如何編寫?
- xml中的元素其實就是一個個的標簽
- 標簽分為兩種
- 包含標簽體
理解: 簡括號全部成對兒出現(xiàn), 所有的數(shù)據(jù)都用一對兒簡括號存儲 - 舉例
<student>
<name>zhangsan</name>
<age>18</age>
</student>
- 不包含標簽體
理解: 只有最外層的一個簡括號,括號用/標識結(jié)束, 內(nèi)部的數(shù)據(jù)都用屬性來編寫
<student name="zhangsan" age="18"/>
??兩種方式都需要掌握, 但是第二種編寫起來會更加方便
1.3.2 標簽(元素的書寫規(guī)范)
- 嚴格區(qū)分大小寫坦辟;<p><P>
- 只能以字母或下劃線開頭讼稚;abc _abc
- 不能以xml(或XML、Xml等)開頭----W3C保留日后使用;
- 名稱字符之間不能有空格或制表符挂据;
- 名稱字符之間不能使用冒號 : (有特殊用途)
1.3.3 元素中屬性的注意事項
- 一個元素可以有多個屬性胖喳,每個屬性都有它自己的名稱和取值泡躯。
- 屬性值一定要用引號(單引號或雙引號)引起來。
- 屬性名稱的命名規(guī)范與元素的命名規(guī)范相同
- 元素中的屬性是不允許重復的
- 在XML技術(shù)中丽焊,標簽屬性所代表的信息也可以被改成用子元素的形式來描述
舉例
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student name="zhangsan" age="18" />
<student>
<name>zhangsan</name>
<age>18</age>
</student>
</students>
1.4 XML的注釋
1.4.1 格式編寫
格式
<!—被注釋的內(nèi)容 -- >
1.4.2 注意事項
- 注意: 注釋不能嵌套定義
1.5 引入CDATA區(qū)
1.5.1 概述
-
為什么要使用CDATA區(qū)域?
- 如果我們在標簽中寫入的內(nèi)容, 想要帶有標簽的標記符號的話, 就需要對這段內(nèi)容進行轉(zhuǎn)義较剃,就好比java中的打印語句,想要打印出”這個字符就必須用/進行轉(zhuǎn)義.
- 標簽也是一樣, 想要將<itheima>當做內(nèi)容存儲的話, 就需要對他進行轉(zhuǎn)義.
如何轉(zhuǎn)義?
特殊字符 | 替代字符 |
---|---|
& | & |
< | < |
> | > |
" | " |
' | ' |
注意:
- 這種轉(zhuǎn)移可以達到效果, 但是如果操作的數(shù)據(jù)過多, 編寫起來會非常痛苦, 所以, 可以使用CDATA區(qū)來解決此問題
1.5.2 實例代碼
<?xml version="1.0" encoding="UTF-8"?>
<!--
如果有一個包含標簽體的標簽技健,
他的標簽體是一個普通文本写穴,不是子標簽,
而普通文本中包含了一個標簽雌贱,那這樣可以嗎啊送?
-->
<students>
<student>
<name>zhangsan</name>
<url>
<![CDATA[
<itheima>www.itheima.com</itheima>
<itcast>www.itcast.cn</itcast>
]]>
</url>
</student>
<student>
<name>zhangsan</name>
<url>
<itheima>www.itheima.com</itheima>
</url>
</student>
</students>
1.6 DTD書寫規(guī)范
1.6.1 為什么要有約束 (DTD)?
- XML都是用戶自定義的標簽,若出現(xiàn)小小的錯誤欣孤,軟件程序?qū)⒉荒苷_地獲取文件中的內(nèi)容而報錯馋没。(如:Tomcat)
- XML技術(shù)中,可以編寫一個文檔來約束一個XML的書寫規(guī)范降传,這個文檔稱之為約束
1.6.2 DTD約束文件的使用
- 編寫DTD文件
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT 書架(書+)>
<!ELEMENT 書 (書名,作者,售價)>
<!ELEMENT 書名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售價 (#PCDATA)>
- 在xml文件中引入DTD文件
<!DOCTYPE 書架 SYSTEM "book.dtd">
??引入了寫好的DTD文件后, 格式就必須跟DTD文件保持一致
1.6.3 DTD 語法細節(jié)
在DTD文檔中使用ELEMENT關(guān)鍵字來聲明一個XML元素篷朵。
- 語法:<!ELEMENT 元素名稱 使用規(guī)則>
- 使用規(guī)則:
- (#PCDATA):指示元素的主體內(nèi)容只能是普通的文本.(Parsed Character Data)
- EMPTY:用于指示元素的主體為空。比如
- ANY:用于指示元素的主體內(nèi)容為任意類型婆排。
- (子元素):指示元素中包含的子元素
- 使用規(guī)則:
- 定義子元素及描述它們的關(guān)系:
- 如果子元素用逗號分開声旺,說明必須按照聲明順序去編寫XML文檔。
- 如: <!ELEMENT FILE (TITLE,AUTHOR,EMAIL)
- 如果子元素用"|"分開段只,說明任選其一腮猖。
- 如:<!ELEMENT FILE (TITLE|AUTHOR|EMAIL)
- 用+、*翼悴、缚够?來表示元素出現(xiàn)的次數(shù)
- 如果元素后面沒有+*?:表示必須且只能出現(xiàn)一次
- +:表示至少出現(xiàn)一次,一次或多次
- *:表示可有可無鹦赎,零次谍椅、一次或多次
- ?:表示可以有也可以無,有的話只能有一次古话。零次或一次
- 如果子元素用逗號分開声旺,說明必須按照聲明順序去編寫XML文檔。
1.6.4 DTD 定義屬性
- 在DTD文檔中使用ATTLIST關(guān)鍵字來為一個元素聲明屬性雏吭。
- 語法:
<!ATTLIST 元素名
屬性名1 屬性值類型 設置說明
屬性名2 屬性值類型 設置說明
…
>
- 屬性值類型:
- CDATA:表示屬性的取值為普通的文本字符串
- ENUMERATED (DTD沒有此關(guān)鍵字):表示枚舉,只能從枚舉列表中任選其一陪踩,如(雞肉|牛肉|豬肉|魚肉)
- ID:表示屬性的取值不能重復
- 設置說明
-
REQUIRED:表示該屬性必須出現(xiàn)
-
IMPLIED:表示該屬性可有可無
-
FIXED:表示屬性的取值為一個固定值杖们。語法:#FIXED "固定值"
- 直接值:表示屬性的取值為該默認值
-
1.6.5 實例代碼
<!ATTLIST 商品
類別 CDATA #REQUIRED
顏色 CDATA #IMPLIED
>
<?xml version = "1.0" encoding="GB2312" standalone="yes"?>
<商品 類別="服裝"顏色="黃色" />
<?xml version = "1.0" encoding="GB2312" standalone="yes"?>
<!DOCTYPE 購物籃 [
<!ELEMENT 購物籃 (肉+)>
<!ELEMENT 肉 EMPTY>
<!ATTLIST 肉 品種 ( 雞肉 | 牛肉 | 豬肉 | 魚肉 ) "雞肉">
]>
<購物籃>
<肉 品種="魚肉"/>
<肉 品種="牛肉"/>
<肉/>
</購物籃>
1.7 Schema的概述
1.7.1 Schema
??Schema約束自身就是一個XML文件悉抵,但它的擴展名通常為.xsd
??一個XML Schema文檔通常稱之為模式文檔(約束文檔),遵循這個文檔書寫的xml文件稱之為實例文檔摘完。
??XML Schema對名稱空間支持得非常好
- 理解:
名稱空間: 相當于package - 約束文檔: 編寫好的Person類
實例文檔: 通過Person類創(chuàng)建對象
1.7.2 Schema入門案例
約束文檔:
<?xml version='1.0' encoding='UTF-8' ?>
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'
//標準的名稱空間
targetNamespace='http://www.itheima.com'
//將該schema文檔綁定到http://www.itheima.com名稱空間
>
<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='售價' type='xs:string' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
實例文檔:
<?xml version="1.0" encoding="UTF-8"?>
<itheima:書架 xmlns:itheima="http://www.itheima.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itheima.com book.xsd">
<itheima:書>
<itheima:書名>JavaScript網(wǎng)頁開發(fā)</itheima:書名>
<itheima:作者>張孝祥</itheima:作者>
<itheima:售價>28.00元</itheima:售價>
</itheima:書>
</itheima:書架>
名稱空間:
<itheima:書架 xmlns:itheima="http://www.itheima.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itheima.com book.xsd">
1.7.3 使用默認名稱空間
?基本格式:
xmlns="URI"
?舉例:
<書架 xmlns="http://www.it315.org/xmlbook/schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.it315.org/xmlbook/schema book.xsd">
<書>
<書名>JavaScript網(wǎng)頁開發(fā)</書名>
<作者>張孝祥</作者>
<售價>28.00元</售價>
</書>
<書架>