2018-07-02

# 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í)體引用:**![image-20180629151227841](/var/folders/6l/0dvj6dpx5f7386x8rqdnfz900000gn/T/abnerworks.Typora/image-20180629151227841.png)

注釋格式<!--正確的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)字符 |

| -------- | -------- |

| &amp;? | &? ? ? ? |

| &lt袄友;? ? | <? ? ? ? |

| &gt殿托;? ? | >? ? ? ? |

| &quot;? | "? ? ? ? |

| &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)類別

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茵肃,一起剝皮案震驚了整個(gè)濱河市腔长,隨后出現(xiàn)的幾起案子袭祟,更是在濱河造成了極大的恐慌,老刑警劉巖捞附,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巾乳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鸟召,警方通過查閱死者的電腦和手機(jī)胆绊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來欧募,“玉大人压状,你說我怎么就攤上這事「蹋” “怎么了种冬?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)舔糖。 經(jīng)常有香客問我娱两,道長(zhǎng),這世上最難降的妖魔是什么金吗? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任十兢,我火速辦了婚禮,結(jié)果婚禮上摇庙,老公的妹妹穿的比我還像新娘旱物。我一直安慰自己,他們只是感情好卫袒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布异袄。 她就那樣靜靜地躺著,像睡著了一般玛臂。 火紅的嫁衣襯著肌膚如雪烤蜕。 梳的紋絲不亂的頭發(fā)上封孙,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音讽营,去河邊找鬼虎忌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛橱鹏,可吹牛的內(nèi)容都是我干的膜蠢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼莉兰,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼挑围!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起糖荒,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤杉辙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后捶朵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜘矢,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年综看,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了品腹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡红碑,死狀恐怖舞吭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情析珊,我是刑警寧澤羡鸥,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站唾琼,受9級(jí)特大地震影響兄春,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锡溯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一赶舆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧祭饭,春花似錦芜茵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春猪钮,著一層夾襖步出監(jiān)牢的瞬間品山,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工烤低, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肘交,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓扑馁,卻偏偏與公主長(zhǎng)得像涯呻,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子腻要,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. XML簡(jiǎn)介 以下內(nèi)容來自于http://www.w3school.com.cn/xml 基本知識(shí) XML 和...
    WebSSO閱讀 1,916評(píng)論 1 7
  • 課程內(nèi)容:XML 安裝MyEclipse開發(fā)工具 * 破解(看圖) * 配置 * 配置工作空間的編碼(UTF-...
    流年劃破容顏_cc55閱讀 1,189評(píng)論 0 2
  • 隨手翻翻微信公眾號(hào)复罐,朋友圈分享,大大小小的名人博主時(shí)不時(shí)都會(huì)寫一點(diǎn)雞湯是勵(lì)志短文來鼓舞年輕人雄家。大多數(shù)年輕人也...
    華米妮閱讀 616評(píng)論 0 1
  • 現(xiàn)在的人越來約焦慮效诅,如果社交網(wǎng)絡(luò)沒了小視頻沒了圖你還能讀完么?
    Hwamina閱讀 404評(píng)論 0 0
  • 《超級(jí)個(gè)體-伽藍(lán)214》373/500咳短,11.20打卡填帽,持續(xù)降溫 【三件事】 1. [ ] 第一要?jiǎng)?wù):功能原型完成...
    伽藍(lán)214閱讀 200評(píng)論 0 0