# XML復(fù)習(xí)
## 第一章
## 思考題
**什么是XML蜕企?**
XML是可擴(kuò)展性標(biāo)記語(yǔ)言,XML是標(biāo)準(zhǔn)通用標(biāo)記的子集
**XML的特性和優(yōu)點(diǎn):**
XML特性:XML的核心是數(shù)據(jù)没咙,數(shù)據(jù)具有自我描述性,并支持unicode字符集
優(yōu)點(diǎn):XML能夠?qū)崿F(xiàn)異構(gòu)數(shù)據(jù)之間的數(shù)據(jù)轉(zhuǎn)換曹步,XML具有良好的保值性糊饱,有嚴(yán)格的語(yǔ)法要求
**XML的處理過程:**
首先通過編輯器或應(yīng)用程序創(chuàng)建一個(gè)XML文檔,然后通過語(yǔ)法分析或處理程序?qū)ξ臋n進(jìn)行檢測(cè)并轉(zhuǎn)化為元素的樹狀結(jié)構(gòu)督禽,然后傳送給用戶端用程序進(jìn)行處理脆霎。
**XML的設(shè)計(jì)目標(biāo):**
1. XML應(yīng)支持各種應(yīng)用程序
2. XML應(yīng)直接可用于Internet
3. XML應(yīng)與SGML兼容
4. 編寫處理XML的應(yīng)用程序應(yīng)該很輕松
5. XML可選特性的數(shù)目應(yīng)盡可能少,最理想的情況是0個(gè)
6. XML文檔應(yīng)便于閱讀而且相當(dāng)清晰
7. XML的設(shè)計(jì)標(biāo)注應(yīng)該很快形成
8. XML的設(shè)計(jì)應(yīng)該是正式而簡(jiǎn)潔的
9. XML文檔應(yīng)當(dāng)時(shí)是易于創(chuàng)建的
10. XML標(biāo)記的簡(jiǎn)潔性是最不重要的
## 第二章
**序言**:
XML版本號(hào)狈惫、文檔的特征信息和文檔遵循的文檔類型
第一行必須是文件的聲明
<?xml version=“1.0” encoding=“UTF-8” standalone=“no”?>
**主體區(qū):**
1. 文檔的主體由一個(gè)或多個(gè)元素組成
2. 主體必須包含唯一一個(gè)根元素
3. 從數(shù)據(jù)結(jié)構(gòu)來說睛蛛,xml文檔的層次相當(dāng)于樹狀結(jié)構(gòu)
必須有唯一的根元素
元素不能交叉重疊
**元素的命名:**
1. 元素的名稱第一個(gè)字符必須是字母或者下劃線
2. 其他的可以為字母、數(shù)字胧谈、下劃線忆肾、連字符-、.
3. 英文大小寫敏感
4. 元素名稱不能有空格
**屬性名稱:**
1. 必須放置為開始標(biāo)記中菱肖,屬性值需用單引號(hào)或雙引號(hào)擴(kuò)起來
2. 屬性名稱需滿足元素命名規(guī)則
3. 同一個(gè)元素不能擁有相同的屬性名稱客冈,但是不同元素可以
**屬性值:**
1. 不能有<和>
**實(shí)體引用:**
注釋格式<!--正確的xml--> 不能有-->
<![CDATA[dasdasdasd]]>
**創(chuàng)建格式良好的XML文檔:**
1. 文檔的聲明
? 版本信息、編碼格式稳强、文檔的獨(dú)立性信息
2. 元素
? 唯一的根元素
? 所有的非空元素必須閉合
? 空元素的約定
? 元素的嵌套
3. 屬性
? 把子元素轉(zhuǎn)換為屬性
? 把相似的公有特性提取為屬性
? 區(qū)分大小寫
? 特殊字符
**JSON和XML對(duì)比**
**JSON:**
1.是一種輕量級(jí)的數(shù)據(jù)交換格式
2.和xml一樣场仲,基于純文本的的數(shù)據(jù)格式
3.可以表達(dá)多種數(shù)據(jù)格式
4.適用于服務(wù)器和與JS客戶端的交互
5.JSON實(shí)際上是基于JS語(yǔ)法的一個(gè)子集
**XML優(yōu)點(diǎn):**
1.格式統(tǒng)一和悦,內(nèi)容表示規(guī)范,符合標(biāo)準(zhǔn)
2.容易與其它系統(tǒng)進(jìn)行交互渠缕,數(shù)據(jù)共享比較簡(jiǎn)單
3.很多框架配置文件都是使用xml方式存儲(chǔ)
4.元語(yǔ)言鸽素、自描述、靈活亦鳞、可擴(kuò)展性強(qiáng)
**XML缺點(diǎn):**
1.文件龐大馍忽,文件格式復(fù)雜,傳輸占用帶寬
2.服務(wù)器和客戶端需要花費(fèi)大量時(shí)間來解析XML
3.客戶端瀏覽器之間解析XML的方式不一致蚜迅,需要重復(fù)編寫代碼
**JSON優(yōu)點(diǎn):**
1.數(shù)據(jù)格式簡(jiǎn)單舵匾,易于讀寫,格式壓縮谁不,占用帶寬小
2.易于解析
3.主持多種語(yǔ)言
4.能直接被服務(wù)器端代碼使用坐梯,簡(jiǎn)化了工作量
**JSON缺點(diǎn):**
1.不是元語(yǔ)言
2.不支持命名空間
3.JSON沒有XML一目了然
## 思考題:
**XML聲明都包含哪些內(nèi)容?哪些是必需的?哪些是可選的刹帕?**
答:
1.版本聲明:version吵血,指明采用哪個(gè)版本,必需的
2.編碼聲明:指明此文檔使用什么編碼偷溺,必需的
3.文檔獨(dú)立性聲明:指明文檔是否依賴于外部DTD蹋辅,可選的
**XML的屬性和HTML的屬性語(yǔ)法上有什么區(qū)別?**
XML屬性區(qū)分大小寫挫掏,并且要用雙引號(hào)或單引號(hào)括起侦另。
HTML屬性不區(qū)分大小寫,不用括起尉共。
**XML預(yù)定義了哪些實(shí)體引用褒傅?**
定義了五個(gè)實(shí)體引用
| 實(shí)體引用 | 對(duì)應(yīng)字符 |
| -------- | -------- |
| &;? | &? ? ? ? |
| <袄友;? ? | <? ? ? ? |
| >殿托;? ? | >? ? ? ? |
| ";? | "? ? ? ? |
| &apos剧蚣;? | '? ? ? ? |
**XML元素與屬性的區(qū)別:**
1.屬性值不能包括多重?cái)?shù)值支竹,但是元素可以
2.CSS不能指定屬性值演示樣式,但是元素可以
3.屬性值不能描述結(jié)構(gòu)內(nèi)容鸠按,但是元素可以
4.屬性值很難通過DTD進(jìn)行測(cè)試
**找出代碼錯(cuò)誤**
`<?XML version="1.0"?> `
<Teams>
? <Team>
? <Name>Germany</Name>
<Coach>Joachim Loew</Coach>
<Assistant>`<!-- Not sure about <--assistant-->-->`</Assistant> ? ? <Player Height="193">Manuel Neuer`<Player>`
<Player Height="170">Philipp Lahm</Player>
<Player Height="186">Thomas Muller</Player>
<Player Height="184">Miroslav Klose</Player>
? `</team>`
</Teams>
## 第三章
在DTD中礼搁,用戶可以控制文檔類型的所有元素、屬性以及實(shí)體等格式
**內(nèi)部DTD:**一個(gè)DTD可以在XML文檔中直接定義
**外部DTD:**獨(dú)立定義在一個(gè)DTD文檔中目尖,用于被其他的XML文檔調(diào)用
**一個(gè)簡(jiǎn)單的DTD實(shí)例**
```xml-dtd
<!ELEMENT Teams (Team*)>
<!ELEMENT Team (TeamName, Country, Member+)>
<!ELEMENT TeamName (#PCDATA)>
<!ELEMENT Country (#PCDATA)>
<!ELEMENT Member (#PCDATA)>
<!ATTLIST Member
Age CDATA #REQUIRED
Sex (Male | Female) "Male">
```
**DTD的調(diào)用:**
DTD的調(diào)用也稱作文檔類型聲明
**外部調(diào)用:**<!DOCTYPE Team SYSTEM "Team.dtd">
**內(nèi)部調(diào)用:**
```xml-dtd
<!DOCTYPE poem[?
<!ELEMENT poem (author,title,content) > <-----------子元素的名稱及順序
<!ELEMENT author (#PCDATA)> <------------------子元素的數(shù)據(jù)類型
<!ELEMENT title (#PCDATA)>?
<!ELEMENT content (#PCDATA)>
]>?
<poem>
<author>王維</author>
<title>鹿柴</title>
<content>空山不見人,但聞人語(yǔ)聲.
返景入深林,復(fù)照青苔上.
</content>
</poem>
```
**外部DTD聲明:**<!DOCTYPE Root_Element_name SYSTEM "URI">
> 該語(yǔ)句必須放在XML文檔的頭部叹坦,且XML文檔處理指令中要將standalone屬性值設(shè)定為“no”
引用公開DTD文件的基本語(yǔ)法為
<!DOCTYPE Root_Element_name PUBLIC "Public_Dtd_name" "Public_Dtd_URi">
Public_Dtd_name有4部分:
1. 發(fā)布者
2. 所有者名字
3. 這個(gè)DTD文件的主要內(nèi)容或類別的簡(jiǎn)要文本
4. 使用的語(yǔ)言
這4部分需要用//來隔開,RUI為公開DTD文件的相對(duì)路徑或絕對(duì)路徑
**DTD的結(jié)構(gòu):**
? DTD一般由元素聲明卑雁、屬性聲明募书、實(shí)體聲明等構(gòu)成绪囱,一個(gè)DTD文件并非都要用到這些
```xml-dtd
<!ELEMENT Teams (Team*)>
<!ELEMENT Team (TeamName, Country, Member+)>
<!ELEMENT TeamName (#PCDATA)> <!ELEMENT Country (#PCDATA)>
<!ELEMENT Member (#PCDATA)>
<!ATTLIST Member
Age CDATA #REQUIRED
Sex (Male | Female) "Male">
```
**元素聲明:**
? <!ELEMENT name type>
| 元素內(nèi)容類型說明 | 含義? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| ---------------- | ------------------------------------------------------------ |
| \#PCDATA? ? ? ? | 表示元素內(nèi)容只能是可解析的文本數(shù)據(jù)? ? ? ? ? ? ? ? ? ? ? ? ? |
| EMPYT? ? ? ? ? ? | 表示元素為空元素,但是元素中可以包含屬性? ? ? ? ? ? ? ? ? ? |
| ANY? ? ? ? ? ? ? | 表示元素內(nèi)容為任意內(nèi)容莹捡,可以是空元素鬼吵、可解析文本數(shù)據(jù)、子元素篮赢、混合型元素中的任意一種 |
| 子元素? ? ? ? ? | 表示元素的內(nèi)容只能是指定順序和出現(xiàn)次數(shù)的子元素? ? ? ? ? ? ? |
| 混合型內(nèi)容? ? ? | 表示元素的內(nèi)部可以是可解析的文本數(shù)據(jù)齿椅,也可以是子元素,甚至是兩者的結(jié)合 |
**子元素:**規(guī)定該元素中可以出現(xiàn)什么子元素启泣,子元素出現(xiàn)的順序涣脚,子元素出現(xiàn)的次數(shù)以及選擇什么時(shí)候出現(xiàn)何種子元素
<!ELEMENT 元素名 (子元素A,子元素B,...)>
**混合型:**可以出現(xiàn)可解析的文本數(shù)據(jù),也可以出現(xiàn)子元素
<!ELEMENT 元素名 (#PCDATA|子元素A|子元素B|···)*>
**ANY:**可以出現(xiàn)PCDATA寥茫、空元素遣蚀、子元素、混合型
將根元素設(shè)為ANY后纱耻,元素出現(xiàn)的次數(shù)和順序不受限制
**指示符的使用:**
*表示一個(gè)元素可以出現(xiàn)0次或多次
芭梯?表示元素可以出現(xiàn)0次或1次
+表示元素可以出現(xiàn)1次或多次
|表示在列表中選擇其一出現(xiàn)
無符號(hào):只能出現(xiàn)一次
**實(shí)體的聲明:**
? 簡(jiǎn)單而言就是一段代碼或者一堆數(shù)據(jù)的簡(jiǎn)寫
? 位置:分為內(nèi)部實(shí)體和外部實(shí)體
? 一般實(shí)體和參數(shù)實(shí)體
**內(nèi)部一般實(shí)體:**
<!ELEMENT 實(shí)體名 “實(shí)體內(nèi)容”>
引用:&實(shí)體名;
必須加“弄喘;”玖喘,不然就是語(yǔ)法錯(cuò)誤
**外部一般實(shí)體:**
<!ELEMENT 實(shí)體名 SYSTEM "被引用的實(shí)體的URI">
引用:&實(shí)體名;
**內(nèi)部參數(shù)實(shí)體:**
<!ENTITY %實(shí)體名 "實(shí)體內(nèi)容">
引用:%實(shí)體名蘑志;
**外部參數(shù)實(shí)體:**
<!ENTITY % 實(shí)體名 "外部實(shí)體的URI">
引用:%實(shí)體名累奈;
**屬性的聲明:**
<!ATTLIST 對(duì)應(yīng)的元素名 屬性名 屬性的類型 \[屬性特點(diǎn)] \[屬性默認(rèn)值]>
<!ATTLIST element-name
? attribute-name1 attribute-type default
? attribute-name2 attribute-type default
? ...
\>
一次為一個(gè)元素聲明多個(gè)屬性
> 可以多次我為一個(gè)標(biāo)記聲明其中所包含的屬性
>
> 屬性聲明的次序沒有嚴(yán)格的要求,可位于與其相連的元素聲明之前或之后
>
> 所有標(biāo)記的屬性急但,都要在各自所對(duì)應(yīng)的標(biāo)記中聲明
>
> 屬性可以有缺省值
| 屬性類型? | 含義? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| ---------- | ------------------------------------------ |
| CDATA? ? ? | 可解析的文本數(shù)據(jù)? ? ? ? ? ? ? ? ? ? ? ? ? |
| Enumerated | 枚舉列表中的一個(gè)值? ? ? ? ? ? ? ? ? ? ? ? |
| ENTITY? ? | 文檔中的一個(gè)實(shí)體? ? ? ? ? ? ? ? ? ? ? ? ? |
| ENTITIES? | 文檔中的一個(gè)實(shí)體列表? ? ? ? ? ? ? ? ? ? ? |
| ID? ? ? ? | 文檔中唯一的取值? ? ? ? ? ? ? ? ? ? ? ? ? |
| IDREF? ? ? | 文檔中某個(gè)元素ID屬性值? ? ? ? ? ? ? ? ? ? |
| IDREFS? ? | 文檔中若干個(gè)元素的ID屬性值? ? ? ? ? ? ? ? |
| NMTOKEN? ? | 合法的XML名稱? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| NMTOKENS? | 合法的XML名稱的列表<br />是CDATA的一個(gè)子集 |
| NOTATION? | DTD中聲明的記號(hào)名澎媒,P72? ? ? ? ? ? ? ? ? ? |
**屬性的默認(rèn)設(shè)置:**
| 元素內(nèi)容說明 | 含義? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| ------------ | ------------------------------------------------ |
| 只有默認(rèn)值? | 如果元素中不包含該屬性,解析器將默認(rèn)值作為屬性值 |
| \#REQUIRED? | 元素的每個(gè)實(shí)例都必須包含該屬性? ? ? ? ? ? ? ? ? |
| \#IMPLIED? ? | 元素的每個(gè)實(shí)例可以選擇是否包含該屬性? ? ? ? ? ? |
| \#FIXED? ? ? | 元素的屬性取值不能更改? ? ? ? ? ? ? ? ? ? ? ? ? |
### 思考題
**什么是DTD?DTD的作用是什么羊始?**
DTD是文檔類型定義旱幼,他定義了某種文檔類型的規(guī)則查描。對(duì)XML來說突委,他可以控制元素,屬性冬三,實(shí)體等的格式匀油,也可以規(guī)定那些可以在文檔中出現(xiàn),那些不可以勾笆。
**DTD的聲明方式有哪些敌蚜?**
內(nèi)部聲明和外部聲明,也可以同時(shí)使用窝爪。
**元素的內(nèi)容可以分為哪幾類弛车?**
PCDATA齐媒、EMPTY、ANY纷跛、子元素喻括、混合型元素
**屬性設(shè)置的默認(rèn)值有哪些?它們的含義各是什么贫奠?**
默認(rèn)值唬血、REQUIRED、IMPLIED唤崭、FIXED
默認(rèn)值就是默認(rèn)值拷恨,required就是必須出現(xiàn),implied是可選出現(xiàn)或不出現(xiàn)谢肾,fixed是固定腕侄,不能修改的屬性
**為一個(gè)XML文檔創(chuàng)建外部DTD。該XML文檔的結(jié)構(gòu)要求如下:**
(1)根元素名稱為L(zhǎng)ibrary勒叠。
(2)Library必須包含2個(gè)元素:Book和Member兜挨,分別表示書的詳細(xì)信息和發(fā)行人。
(3)Book必須包含一個(gè)BookId屬性眯分。所有其它的元素拌汇,例如Title、Author、Price、Publisher和Cost都只能作為Book的子元素胁住。
(4)元素Member包含Name和Address兩個(gè)子元素博肋。元素Name包含F(xiàn)irstName、MiddleName和LastName三個(gè)子元素距帅。元素Address包含HouseNumber、Street、City三個(gè)子元素纺座。
```xml-dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT Library (Book+, Member+)>
<!ELEMENT Book (Title, Author, Price, Publisher, Cost)>
<!ELEMENT Member (Name, Address)>
<!ATTLIST Book BookId CDATA "">
<!ELEMENT Name (FirstName, MiddleName, LastName)>
<!ELEMENT Address (HouseNumber, Street, City)>
<!ELEMENT Title (#PCDATA)>
<!ELEMENT Author (#PCDATA)>
<!ELEMENT Price (#PCDATA)>
<!ELEMENT Publisher (#PCDATA)>
<!ELEMENT Cost (#PCDATA)>
<!ELEMENT FirstName (#PCDATA)>
<!ELEMENT MiddleName (#PCDATA)>
<!ELEMENT LastName (#PCDATA)>
<!ELEMENT HouseNumber (#PCDATA)>
<!ELEMENT Street (#PCDATA)>
<!ELEMENT City (#PCDATA)>
```
給個(gè)數(shù)據(jù)應(yīng)用場(chǎng)景,能夠設(shè)計(jì)出XML表示 的文檔結(jié)構(gòu)溉潭,并用DTD設(shè)計(jì)出XML文檔模式;
## 第四章
**命名空間:**
**XML Schema與DTD:**
DTD的局限性:
1. 不支持命名空間净响、數(shù)據(jù)類型不夠細(xì)化、語(yǔ)法獨(dú)立于XML語(yǔ)法
XML Schema的格式與DTD的格式有著非常明顯的區(qū)別
XML Schema事實(shí)上也是XML的一種應(yīng)用喳瓣,也就是說XML Schema格式與XML格式完全相同
作為SGML DTD的一個(gè)子集馋贤,XML DTD的格式與XML格式完全不同。
q
Schema優(yōu)點(diǎn):
1. 一致性:借助XML自身的特性畏陕,利用XML基本語(yǔ)法規(guī)則定義XML文檔結(jié)構(gòu)
2. 擴(kuò)展性:對(duì)DTD進(jìn)行了擴(kuò)充配乓,引入了命名空間和數(shù)據(jù)類型
3. 互換性:能書寫XML文檔以及驗(yàn)證文檔的合法性。還可進(jìn)行不同Schema的轉(zhuǎn)換
4. 規(guī)范性:更具有規(guī)范性
XML Schema語(yǔ)法
```xml
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mynamespace/myschema"
elementFormDefault="unqualified">
<!--放入實(shí)際內(nèi)容 -->
</xs:schema>
```
**XML Schema語(yǔ)法-數(shù)據(jù)類型**
**內(nèi)置數(shù)據(jù)類型:**
字符串類型、數(shù)字類型犹芹、布爾類型 :string崎页、boolean、decimal腰埂、float实昨、double
XML數(shù)據(jù)類型 :anyURI、QName盐固、NOTATION
二進(jìn)制數(shù)據(jù)類型 :hexBinary荒给、base64Binary
時(shí)間類型 :持續(xù)時(shí)間 duration 、時(shí)間或者日期 date刁卜、time和dateTime 志电、循環(huán)的日期或者時(shí)間? gDay、gMonth蛔趴、gMonthDay挑辆、gYear和gYearMonth
## 思考題
**用xmlns屬性定義命名空間時(shí),前綴有什么作用孝情?**
可以在多個(gè)來源中混合使用不同的命名空間
**怎樣定義和使用默認(rèn)的命名空間鱼蝉?**
默認(rèn)命名空間聲明是一個(gè)屬性聲明,名稱是xmlns箫荡。其值為命名空間URI魁亦。
在其作用域中,所有不帶前綴的元素名稱都來自于聲明命名空間羔挡。
**XML Schema相比DTD有哪些優(yōu)勢(shì)洁奈?**
1. 繼承了XML的可擴(kuò)展性和自描述性。有嚴(yán)格的語(yǔ)法要求
2. XML Schema有更多的數(shù)據(jù)類型
3. 引入了命名空間绞灼,增強(qiáng)了XML Schema的通用型
4. XML Schema應(yīng)用更加廣泛
總之XML Schema有更強(qiáng)的表現(xiàn)行利术,能夠滿足不同領(lǐng)域的應(yīng)用需求。
**XML Schema提供哪兩種方式來實(shí)現(xiàn)數(shù)據(jù)類型的定義低矮?怎樣實(shí)現(xiàn)印叁?**
一種是簡(jiǎn)單類型。在XML Schema的內(nèi)置的數(shù)據(jù)類型的基礎(chǔ)上军掂,或由其它XML Schema繼承或定義的簡(jiǎn)單類型基礎(chǔ)上轮蜕,定義新的數(shù)據(jù)類型。另一種是復(fù)雜類型良姆,提供了一種功能強(qiáng)大的復(fù)雜數(shù)據(jù)類型定義機(jī)制肠虽,可以實(shí)現(xiàn)包括結(jié)構(gòu)描述在內(nèi)的復(fù)雜數(shù)據(jù)類型幔戏。
## 第五章
**簡(jiǎn)單地說玛追,DOM是一組獨(dú)立于語(yǔ)言和平 臺(tái)的應(yīng)用程序編程接口,它能夠描述如 何訪問和操縱存儲(chǔ)在結(jié)構(gòu)化XML和 HTML文檔中的信息 **
**XML文檔編程解析的兩種方法思路**
DOM和SAX
**理解SAX解析方式,及其與DOM的區(qū)別**
SAX是一個(gè)接口集合痊剖,它允許開發(fā)人員在自己的應(yīng)用中通過這個(gè)接口集合來讀取和分析XML文檔中的數(shù)據(jù)韩玩。
SAX處理涉及以下幾步:
1. 創(chuàng)建事件處理程序
2. 創(chuàng)建SAX解析器
3. 將事件處理程序分配給解析器官
4. 對(duì)文檔進(jìn)行解析,將每個(gè)事件發(fā)送給處理程序
SAX不需要在內(nèi)存中建立整個(gè)文檔的樹結(jié)構(gòu)陆馁,和DOM相比是一個(gè)輕量級(jí)的接口集合找颓。
因?yàn)檎麄€(gè)文檔沒有放到內(nèi)存中,SAX不能隨機(jī)的到達(dá)文檔的某一部分叮贩,同時(shí)击狮,開發(fā)人員必須在處理過程中按順序處理信息,所以SAX在處理包含很多內(nèi)部交叉引用的文檔時(shí)就會(huì)有一些困難益老,不能實(shí)現(xiàn)復(fù)雜的搜索彪蓬。
**理解DOM模型,DOM解析XML文檔的 思路捺萌,如何生成文檔對(duì)象?**
**DOM的工作方式:**
1. 將文檔一次性裝入內(nèi)存档冬,然后對(duì)文檔進(jìn)行解析,根據(jù)文檔中定義的元素桃纯、屬性酷誓、注釋、處理指令等不同的內(nèi)容進(jìn)行分解态坦,以節(jié)點(diǎn)樹的形式在內(nèi)存中創(chuàng)建XML文件的表示盐数,也就是一個(gè)文檔對(duì)象模型
2. 把文檔對(duì)象化
3. 文檔中的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)著模型中的一個(gè)對(duì)象
4. 根據(jù)對(duì)象提供的編程接口,在應(yīng)用程序中訪問XML文檔伞梯,進(jìn)而操作XML文檔
## 思考題
**什么是DOM娘扩?簡(jiǎn)述DOM的結(jié)構(gòu)和工作方式**
DOM是文檔對(duì)象模型,他是一組獨(dú)立于語(yǔ)言和平臺(tái)的應(yīng)用程序編程接口壮锻。
能夠描述如何訪問和操作存儲(chǔ)在結(jié)構(gòu)化XML和HTML中的信息琐旁。
DOM是樹狀結(jié)構(gòu),元素猜绣、屬性灰殴、注釋、處理程序都是DOM樹狀結(jié)構(gòu)的節(jié)點(diǎn)掰邢。
DOM的工作方式:首先將XML文件一次性讀入內(nèi)存牺陶,然后對(duì)文檔進(jìn)行解析,對(duì)其中的元素辣之、屬性掰伸、注釋、處理程序等不通內(nèi)容進(jìn)行分解怀估,形成DOM樹狀結(jié)構(gòu)狮鸭。文檔中的每個(gè)節(jié)點(diǎn)合搅,對(duì)應(yīng)著模型中的一個(gè)對(duì)象。然后根據(jù)節(jié)點(diǎn)提供的編程接口歧蕉,在應(yīng)用程序中對(duì)XML文檔進(jìn)行訪問和操作灾部。
**Node接口的appendChild()和insertChild()方法有什么不同?**
Node接口的appendChild()方法是在該節(jié)點(diǎn)的所有子節(jié)點(diǎn)之后追加一個(gè)子節(jié)點(diǎn)惯退,而insertChild()方法是在該節(jié)點(diǎn)的所有子節(jié)點(diǎn)前插入一個(gè)子節(jié)點(diǎn)赌髓。
**如何刪除XML文檔的節(jié)點(diǎn)?**
刪除節(jié)點(diǎn)可以使用node接口中的removechild()函數(shù)催跪。指定刪除某個(gè)子節(jié)點(diǎn)和他所有的子節(jié)點(diǎn)锁蠕。并沒有從內(nèi)存中delete,只是remove懊蒸。
## 第六章
XML強(qiáng)調(diào)形式描述與內(nèi)容描述的分離
XSL標(biāo)準(zhǔn)本質(zhì)上是一個(gè)指定如何翻譯/顯示一個(gè)XML文檔標(biāo)記的翻譯機(jī)制,包括:
? XSLT:將一個(gè)xml文檔準(zhǔn)換成另一個(gè)XML文檔匿沛,甚至可以是html文檔等其他格式的文檔
? XPath:一個(gè)在XML文檔中查找信息的語(yǔ)言,并且XQuery和XPointer都構(gòu)建在XPath之上
**XSLT匹配節(jié)點(diǎn)的模式**
1. 匹配根節(jié)點(diǎn)榛鼎、子節(jié)點(diǎn)以及其他后代節(jié)點(diǎn)用 /
2. 匹配元素名稱 match <xsl:template match="Matches">
3. 通配符 * 匹配所有元素
4. 使用ID匹配單個(gè)元素
<xsl:template match="id('g1')">
? <h1><xsl:value-of select="."></h1>
\< /xsl:template>
5. 使用@匹配屬性節(jié)點(diǎn)
<xsl:template match="@Type">
<h1><xsl:value-of select="."/></h1>
\</xsl:template>
6. 使用comments()匹配注釋節(jié)點(diǎn)
7. 用processing-instruction()匹配處理指令節(jié)點(diǎn)
8. 使用text()匹配文本節(jié)點(diǎn)
9. 使用或操作符“|”
10. 使用[]進(jìn)行測(cè)試
**XPath簡(jiǎn)介逃呼, XPath表達(dá)式含義與用法**
XPath表達(dá)式? ? /child::Match/child::City /Match/City
可用于match、select者娱、test屬性
位置步- 軸名稱::節(jié)點(diǎn)測(cè)試[謂詞]
child::book[price>35.00]
child::para[position()>1]
簡(jiǎn)略語(yǔ)法
- 簡(jiǎn)略語(yǔ)法{原語(yǔ)法}:描述
- ?? nodename{child::nodename}:選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)
- ?? //{descendant-or-self::node()/}:從匹配選擇的當(dāng)前節(jié)點(diǎn)選 擇文檔中的節(jié)點(diǎn)抡笼,而不考慮它們的位置
- ?? .{self::node()}:選取當(dāng)前節(jié)點(diǎn)
- ?? ..{parent::node()}:選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)
- ?? @{attribute::}:選取屬性
- ?? [n]{position()=n}:選取第n個(gè)節(jié)點(diǎn)
## 思考題
**什么事XSL?他包含哪幾部分黄鳍?**
XSL代表可擴(kuò)展樣式表語(yǔ)言推姻,包括XSLT、XPATH框沟、XML-FO藏古。
XSLT可將一個(gè)XML文檔轉(zhuǎn)換成另一個(gè)XML文檔,同時(shí)可以完全忽略格式化文檔忍燥。
XPath是一門XMl文檔中查找信息的語(yǔ)言拧晕,并且XQuery和XPointer都構(gòu)建在XPath之上。
XML-FO可根據(jù)數(shù)據(jù)的值對(duì)XML數(shù)據(jù)進(jìn)行格式化梅垄,可以精確設(shè)置屏幕打印格式厂捞,而沒有必要在XML上使用XSL轉(zhuǎn)換。
**xsl:value-of和xsl:for-each元素有什么異同队丝?**
兩者都會(huì)輸出模式匹配的節(jié)點(diǎn)靡馁,但如果匹配的節(jié)點(diǎn)多余一個(gè)。vlaue-of只會(huì)顯示第一個(gè)机久,for-each可以顯示所有匹配的節(jié)點(diǎn)臭墨。
**如何用XPath選擇上下文節(jié)點(diǎn)中除第一個(gè)以外的所有para子元素?寫出其完整形式膘盖。**
child::para[position()>1]
XPath提供了一系列節(jié)點(diǎn)軸胧弛,使用這些節(jié)點(diǎn)軸可以選取樹 中相對(duì)于當(dāng)前節(jié)點(diǎn)定位的其他節(jié)點(diǎn)尤误。例如,顯示當(dāng)前元 素的父元素叶圃、子元素或者其他后代元素。Xpath也提供了 很多函數(shù)返回節(jié)點(diǎn)集践图,這些節(jié)點(diǎn)集包含符合匹配條件的 所有節(jié)點(diǎn)掺冠。
## 第七章
**什么是XQuery?它與XPath、XSLT有什么關(guān)系?**
答:XQuery即XML Query码党,是W3C制定的一套標(biāo)準(zhǔn)德崭,用來從類XML文檔中提取信息的查詢語(yǔ)言。
XQuery與XPath和XSLT的關(guān)系十分密切揖盘。一方面眉厨,從XPath角度來看,XQuery被構(gòu)建在XPath表達(dá)式之上兽狭,XQuery和XPath使用相同的數(shù)據(jù)模型憾股,并支持相同的函數(shù)和運(yùn)算符,他們的語(yǔ)法和語(yǔ)言描述也是同源的以保證統(tǒng)一性箕慧。另一方面服球,從XSLT角度來看,XQuery和XSLT都是構(gòu)建在XPath之上颠焦,都可以用于提取XML中的數(shù)據(jù)斩熊,因此兩者在功能方面有許多重疊的地方。
XQuery和XSLT的關(guān)鍵區(qū)別:
1. XQuery主要用于從類XML文檔中提取數(shù)據(jù)伐庭,并可以將提取的數(shù)據(jù)放入任意的片段之中粉渠,XQuery采用全新的查詢語(yǔ)法
2. XSLT主要用于將XML轉(zhuǎn)換為其他文檔,具有內(nèi)置的遍歷引擎圾另,默認(rèn)情況下會(huì)處理整個(gè)文檔霸株,XSLT仍然采用XML語(yǔ)法。
**什么是FLWOR表達(dá)式集乔?**
FLWOR表達(dá)式是XQuery中最常用也是功能最強(qiáng)大的一種表達(dá)式淳衙,名字來自for、let饺著、where箫攀、order by和return等子句首字母。FLWOR表達(dá)式的完整語(yǔ)法格式如下幼衰。
for子句 | let子句
where子句
order by子句
return子句
其中for子句和let子句可以出現(xiàn)一次或多次靴跛,但必須至少出現(xiàn)一次,表示遍歷或者定義渡嚣。
where子句用于對(duì)結(jié)果進(jìn)行過濾
order by子句用于對(duì)結(jié)果進(jìn)行排序
return子句用于指定返回表達(dá)式
## 第八章
XML文檔中的任何元素均可成為XLink梢睛,包含鏈接的元素稱為“鏈接元素”
鏈接元素由xlink:type屬性定義肥印,取值如下:
simple,表示元素是簡(jiǎn)單鏈接
extended绝葡,表示元素是擴(kuò)展鏈接
locator深碱,表示是遠(yuǎn)程資源
arc,表示是鏈接資源的弧
resource藏畅,表示是本地資源
titile敷硅,表示是自然語(yǔ)言的鏈接描述
例子:
```xml
<Name
xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple"
xlink:href="Brazil.html" xlink:role="Brazil.html"
xlink:title="Brazil national football team" xlink:show="replace"
xlink:actuate="onRequest">
Brazil
</Name >
```
xlink:show屬性定義了激活鏈接時(shí)如何進(jìn)行顯示內(nèi)容。該屬性包含了下列五個(gè)值:replae愉阎、new绞蹦、embed、other榜旦、none幽七。
xlink:actuate屬性定義了如何激活鏈接,該屬性包含下列4個(gè)值:inRequest溅呢、onLoad澡屡、other、none
擴(kuò)展鏈接包含多向鏈接咐旧。
```xml
<Downloads xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="extended">
<Name xlink:type="resource">Local Download </Name>
? ? <Homesite xlink:type="locator" xlink:/>
<Mirror xlink:type="locator" xlink:/>
<Mirror xlink:type="locator" xlink:/>
</Downloads>
```
XPointer使超級(jí)鏈接可以指向 XML 文檔中更多具體的部分(片斷)
Xpointer指向訪問內(nèi)容定位方法
## 思考題
**XML中的鏈接分為哪個(gè)兩部分挪蹭?它們有什么區(qū)別?**
XML中的鏈接分為XLink和XPointer休偶。XLink定義了如何從一個(gè)文檔鏈接到另一個(gè)文檔梁厉,XPointer定義了如何對(duì)一個(gè)文檔中的不同部分進(jìn)行尋址和定位。XLink指向一個(gè)URI踏兜。這個(gè)URI指定了一項(xiàng)特定資源词顾,并且可以包含XPointer,用以更準(zhǔn)確地定位到目標(biāo)資源或者文檔的某一部分碱妆。
## 第十章
**NoSQL基本概念肉盹,BASE的含義**
## 第十一章
**MongoDB概述**:是一個(gè)開源的高性能無模式文檔型數(shù)據(jù)庫(kù)
**MongoDB特點(diǎn):**
1. 分布式文件存儲(chǔ)數(shù)據(jù)庫(kù),由C++編寫
2. 功能豐富疹尾,最像RDB的NoSQL產(chǎn)品
3. 提供了不同語(yǔ)言版本的api來使用數(shù)據(jù)庫(kù)
4. 提供原生shell
5. 支持的查詢語(yǔ)言非常強(qiáng)大
6. 查詢監(jiān)視:MongoDB 包含一系列監(jiān)視工具用于分 析數(shù)據(jù)庫(kù)操作的性能上忍。
7. 復(fù)制及自動(dòng)故障轉(zhuǎn)移:MongoDB 數(shù)據(jù)庫(kù)支持服務(wù) 器之間的數(shù)據(jù)復(fù)制,支持主-從模式及服務(wù)器之間 的相互復(fù)制纳本。復(fù)制的主要目標(biāo)是提供冗余及自動(dòng)故 障轉(zhuǎn)移窍蓝。
8. 高效的傳統(tǒng)存儲(chǔ)方式:支持二進(jìn)制數(shù)據(jù)及大型對(duì)象 (如照片或圖片) 。
9. 自動(dòng)分片以支持云級(jí)別的伸縮性:自動(dòng)分片功能支持水平的數(shù)據(jù)庫(kù)集群繁成,可動(dòng)態(tài)添加額外的機(jī)器吓笙。
## 第十二章
**Neo4j特點(diǎn)**
1. 優(yōu)越的性能:高效的讀寫能力
2. 設(shè)計(jì)的靈活性:無模式,自然擴(kuò)展
3. 迭代的敏捷性:適用頻繁迭代的敏捷開發(fā)方法
4. 安全可靠:支持事務(wù)管理巾腕,提供實(shí)時(shí)在線備份面睛、日 志恢復(fù)功能
5. 簡(jiǎn)單易用:支持多種程序設(shè)計(jì)語(yǔ)言開發(fā)絮蒿,特別是 Spring data Neo4j開發(fā)包;支持RESTAPI
6. 支持?jǐn)?shù)據(jù)導(dǎo)出JSON、xls
7. 豐富的學(xué)習(xí)資源
8. 大企業(yè)實(shí)踐應(yīng)用的考驗(yàn):擁有廣大實(shí)力派用戶群體 驗(yàn)證了其穩(wěn)定性叁鉴、健壯性
Neo4j數(shù)據(jù)特點(diǎn)
- 節(jié)點(diǎn)土涝、關(guān)系、屬性是構(gòu)成圖數(shù)據(jù)的三個(gè)基本元素
- 節(jié)點(diǎn)和關(guān)系的屬性是一個(gè)KV數(shù)據(jù)集合;
- 每個(gè)關(guān)系都有一個(gè)開始節(jié)點(diǎn)和一個(gè)結(jié)束節(jié)點(diǎn)互相連接;是有方向的;
- 大多數(shù)情況下關(guān)系可以不需要屬性;
Neo4j存儲(chǔ)的數(shù)據(jù)是一個(gè)屬性圖
- 節(jié)點(diǎn)對(duì)應(yīng)實(shí)體幌墓,可以是人但壮、事物或者任何一種業(yè)務(wù) 概念定義;
- 節(jié)點(diǎn)屬性是實(shí)體的描述內(nèi)容
- 實(shí)體間關(guān)聯(lián)表現(xiàn)為節(jié)點(diǎn)關(guān)系,如朋友克锣、從屬等關(guān)系
Neo4j數(shù)據(jù)模型:屬性圖抽象
Neo4j數(shù)據(jù)模型中用標(biāo)簽表示節(jié)點(diǎn)類別