2018-07-02

# XML復(fù)習(xí)

## 第一章

## 思考題

**什么是XML?**

XML是可擴展性標記語言,XML是標準通用標記的子集

**XML的特性和優(yōu)點:**

XML特性:XML的核心是數(shù)據(jù),數(shù)據(jù)具有自我描述性,并支持unicode字符集

優(yōu)點:XML能夠?qū)崿F(xiàn)異構(gòu)數(shù)據(jù)之間的數(shù)據(jù)轉(zhuǎn)換,XML具有良好的保值性,有嚴格的語法要求

**XML的處理過程:**

首先通過編輯器或應(yīng)用程序創(chuàng)建一個XML文檔,然后通過語法分析或處理程序?qū)ξ臋n進行檢測并轉(zhuǎn)化為元素的樹狀結(jié)構(gòu),然后傳送給用戶端用程序進行處理。

**XML的設(shè)計目標:**

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個

6. XML文檔應(yīng)便于閱讀而且相當清晰

7. XML的設(shè)計標注應(yīng)該很快形成

8. XML的設(shè)計應(yīng)該是正式而簡潔的

9. XML文檔應(yīng)當時是易于創(chuàng)建的

10. XML標記的簡潔性是最不重要的

## 第二章

**序言**:

XML版本號、文檔的特征信息和文檔遵循的文檔類型

第一行必須是文件的聲明

<?xml version=“1.0” encoding=“UTF-8” standalone=“no”?>

**主體區(qū):**

1. 文檔的主體由一個或多個元素組成

2. 主體必須包含唯一一個根元素

3. 從數(shù)據(jù)結(jié)構(gòu)來說,xml文檔的層次相當于樹狀結(jié)構(gòu)

必須有唯一的根元素

元素不能交叉重疊

**元素的命名:**

1. 元素的名稱第一個字符必須是字母或者下劃線

2. 其他的可以為字母、數(shù)字、下劃線、連字符-、.

3. 英文大小寫敏感

4. 元素名稱不能有空格

**屬性名稱:**

1. 必須放置為開始標記中,屬性值需用單引號或雙引號擴起來

2. 屬性名稱需滿足元素命名規(guī)則

3. 同一個元素不能擁有相同的屬性名稱,但是不同元素可以

**屬性值:**

1. 不能有<和>

**實體引用:**![image-20180629151227841](/var/folders/6l/0dvj6dpx5f7386x8rqdnfz900000gn/T/abnerworks.Typora/image-20180629151227841.png)

注釋格式<!--正確的xml--> 不能有-->

<![CDATA[dasdasdasd]]>

**創(chuàng)建格式良好的XML文檔:**

1. 文檔的聲明

? 版本信息、編碼格式、文檔的獨立性信息

2. 元素

? 唯一的根元素

? 所有的非空元素必須閉合

? 空元素的約定

? 元素的嵌套

3. 屬性

? 把子元素轉(zhuǎn)換為屬性

? 把相似的公有特性提取為屬性

? 區(qū)分大小寫

? 特殊字符

**JSON和XML對比**

**JSON:**

1.是一種輕量級的數(shù)據(jù)交換格式

2.和xml一樣,基于純文本的的數(shù)據(jù)格式

3.可以表達多種數(shù)據(jù)格式

4.適用于服務(wù)器和與JS客戶端的交互

5.JSON實際上是基于JS語法的一個子集

**XML優(yōu)點:**

1.格式統(tǒng)一,內(nèi)容表示規(guī)范,符合標準

2.容易與其它系統(tǒng)進行交互,數(shù)據(jù)共享比較簡單

3.很多框架配置文件都是使用xml方式存儲

4.元語言、自描述、靈活、可擴展性強

**XML缺點:**

1.文件龐大,文件格式復(fù)雜,傳輸占用帶寬

2.服務(wù)器和客戶端需要花費大量時間來解析XML

3.客戶端瀏覽器之間解析XML的方式不一致,需要重復(fù)編寫代碼

**JSON優(yōu)點:**

1.數(shù)據(jù)格式簡單,易于讀寫,格式壓縮,占用帶寬小

2.易于解析

3.主持多種語言

4.能直接被服務(wù)器端代碼使用,簡化了工作量

**JSON缺點:**

1.不是元語言

2.不支持命名空間

3.JSON沒有XML一目了然

## 思考題:

**XML聲明都包含哪些內(nèi)容?哪些是必需的?哪些是可選的?**

答:

1.版本聲明:version,指明采用哪個版本,必需的

2.編碼聲明:指明此文檔使用什么編碼,必需的

3.文檔獨立性聲明:指明文檔是否依賴于外部DTD,可選的

**XML的屬性和HTML的屬性語法上有什么區(qū)別?**

XML屬性區(qū)分大小寫,并且要用雙引號或單引號括起。

HTML屬性不區(qū)分大小寫,不用括起。

**XML預(yù)定義了哪些實體引用?**

定義了五個實體引用

| 實體引用 | 對應(yīng)字符 |

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

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

| &lt;? ? | <? ? ? ? |

| &gt;? ? | >? ? ? ? |

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

| &apos;? | '? ? ? ? |

**XML元素與屬性的區(qū)別:**

1.屬性值不能包括多重數(shù)值,但是元素可以

2.CSS不能指定屬性值演示樣式,但是元素可以

3.屬性值不能描述結(jié)構(gòu)內(nèi)容,但是元素可以

4.屬性值很難通過DTD進行測試

**找出代碼錯誤**

`<?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中,用戶可以控制文檔類型的所有元素、屬性以及實體等格式

**內(nèi)部DTD:**一個DTD可以在XML文檔中直接定義

**外部DTD:**獨立定義在一個DTD文檔中,用于被其他的XML文檔調(diào)用

**一個簡單的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">

```

**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>空山不見人,但聞人語聲.

返景入深林,復(fù)照青苔上.

</content>

</poem>

```

**外部DTD聲明:**<!DOCTYPE Root_Element_name SYSTEM "URI">

> 該語句必須放在XML文檔的頭部,且XML文檔處理指令中要將standalone屬性值設(shè)定為“no”

引用公開DTD文件的基本語法為

<!DOCTYPE Root_Element_name PUBLIC "Public_Dtd_name" "Public_Dtd_URi">

Public_Dtd_name有4部分:

1. 發(fā)布者

2. 所有者名字

3. 這個DTD文件的主要內(nèi)容或類別的簡要文本

4. 使用的語言

這4部分需要用//來隔開,RUI為公開DTD文件的相對路徑或絕對路徑

**DTD的結(jié)構(gòu):**

? DTD一般由元素聲明、屬性聲明、實體聲明等構(gòu)成,一個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ù)以及選擇什么時候出現(xiàn)何種子元素

<!ELEMENT 元素名 (子元素A,子元素B,...)>

**混合型:**可以出現(xiàn)可解析的文本數(shù)據(jù),也可以出現(xiàn)子元素

<!ELEMENT 元素名 (#PCDATA|子元素A|子元素B|···)*>

**ANY:**可以出現(xiàn)PCDATA、空元素、子元素、混合型

將根元素設(shè)為ANY后,元素出現(xiàn)的次數(shù)和順序不受限制

**指示符的使用:**

*表示一個元素可以出現(xiàn)0次或多次

?表示元素可以出現(xiàn)0次或1次

+表示元素可以出現(xiàn)1次或多次

|表示在列表中選擇其一出現(xiàn)

無符號:只能出現(xiàn)一次

**實體的聲明:**

? 簡單而言就是一段代碼或者一堆數(shù)據(jù)的簡寫

? 位置:分為內(nèi)部實體和外部實體

? 一般實體和參數(shù)實體

**內(nèi)部一般實體:**

<!ELEMENT 實體名 “實體內(nèi)容”>

引用:&實體名;

必須加“;”,不然就是語法錯誤

**外部一般實體:**

<!ELEMENT 實體名 SYSTEM "被引用的實體的URI">

引用:&實體名;

**內(nèi)部參數(shù)實體:**

<!ENTITY %實體名 "實體內(nèi)容">

引用:%實體名;

**外部參數(shù)實體:**

<!ENTITY % 實體名 "外部實體的URI">

引用:%實體名;

**屬性的聲明:**

<!ATTLIST 對應(yīng)的元素名 屬性名 屬性的類型 \[屬性特點] \[屬性默認值]>

<!ATTLIST element-name

? attribute-name1 attribute-type default

? attribute-name2 attribute-type default

? ...

\>

一次為一個元素聲明多個屬性

> 可以多次我為一個標記聲明其中所包含的屬性

>

> 屬性聲明的次序沒有嚴格的要求,可位于與其相連的元素聲明之前或之后

>

> 所有標記的屬性,都要在各自所對應(yīng)的標記中聲明

>

> 屬性可以有缺省值

| 屬性類型? | 含義? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

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

| CDATA? ? ? | 可解析的文本數(shù)據(jù)? ? ? ? ? ? ? ? ? ? ? ? ? |

| Enumerated | 枚舉列表中的一個值? ? ? ? ? ? ? ? ? ? ? ? |

| ENTITY? ? | 文檔中的一個實體? ? ? ? ? ? ? ? ? ? ? ? ? |

| ENTITIES? | 文檔中的一個實體列表? ? ? ? ? ? ? ? ? ? ? |

| ID? ? ? ? | 文檔中唯一的取值? ? ? ? ? ? ? ? ? ? ? ? ? |

| IDREF? ? ? | 文檔中某個元素ID屬性值? ? ? ? ? ? ? ? ? ? |

| IDREFS? ? | 文檔中若干個元素的ID屬性值? ? ? ? ? ? ? ? |

| NMTOKEN? ? | 合法的XML名稱? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

| NMTOKENS? | 合法的XML名稱的列表<br />是CDATA的一個子集 |

| NOTATION? | DTD中聲明的記號名,P72? ? ? ? ? ? ? ? ? ? |

**屬性的默認設(shè)置:**

| 元素內(nèi)容說明 | 含義? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

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

| 只有默認值? | 如果元素中不包含該屬性,解析器將默認值作為屬性值 |

| \#REQUIRED? | 元素的每個實例都必須包含該屬性? ? ? ? ? ? ? ? ? |

| \#IMPLIED? ? | 元素的每個實例可以選擇是否包含該屬性? ? ? ? ? ? |

| \#FIXED? ? ? | 元素的屬性取值不能更改? ? ? ? ? ? ? ? ? ? ? ? ? |

### 思考題

**什么是DTD?DTD的作用是什么?**

DTD是文檔類型定義,他定義了某種文檔類型的規(guī)則。對XML來說,他可以控制元素,屬性,實體等的格式,也可以規(guī)定那些可以在文檔中出現(xiàn),那些不可以。

**DTD的聲明方式有哪些?**

內(nèi)部聲明和外部聲明,也可以同時使用。

**元素的內(nèi)容可以分為哪幾類?**

PCDATA、EMPTY、ANY、子元素、混合型元素

**屬性設(shè)置的默認值有哪些?它們的含義各是什么?**

默認值、REQUIRED、IMPLIED、FIXED

默認值就是默認值,required就是必須出現(xiàn),implied是可選出現(xiàn)或不出現(xiàn),fixed是固定,不能修改的屬性

**為一個XML文檔創(chuàng)建外部DTD。該XML文檔的結(jié)構(gòu)要求如下:**

(1)根元素名稱為Library。

(2)Library必須包含2個元素:Book和Member,分別表示書的詳細信息和發(fā)行人。

(3)Book必須包含一個BookId屬性。所有其它的元素,例如Title、Author、Price、Publisher和Cost都只能作為Book的子元素。

(4)元素Member包含Name和Address兩個子元素。元素Name包含F(xiàn)irstName、MiddleName和LastName三個子元素。元素Address包含HouseNumber、Street、City三個子元素。

```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)>

```

給個數(shù)據(jù)應(yīng)用場景,能夠設(shè)計出XML表示 的文檔結(jié)構(gòu),并用DTD設(shè)計出XML文檔模式;

## 第四章

**命名空間:**

**XML Schema與DTD:**

DTD的局限性:

1. 不支持命名空間、數(shù)據(jù)類型不夠細化、語法獨立于XML語法

XML Schema的格式與DTD的格式有著非常明顯的區(qū)別

XML Schema事實上也是XML的一種應(yīng)用,也就是說XML Schema格式與XML格式完全相同

作為SGML DTD的一個子集,XML DTD的格式與XML格式完全不同。

q

Schema優(yōu)點:

1. 一致性:借助XML自身的特性,利用XML基本語法規(guī)則定義XML文檔結(jié)構(gòu)

2. 擴展性:對DTD進行了擴充,引入了命名空間和數(shù)據(jù)類型

3. 互換性:能書寫XML文檔以及驗證文檔的合法性。還可進行不同Schema的轉(zhuǎn)換

4. 規(guī)范性:更具有規(guī)范性

XML Schema語法

```xml

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://mynamespace/myschema"

elementFormDefault="unqualified">

<!--放入實際內(nèi)容 -->

</xs:schema>

```

**XML Schema語法-數(shù)據(jù)類型**

**內(nèi)置數(shù)據(jù)類型:**

字符串類型、數(shù)字類型、布爾類型 :string、boolean、decimal、float、double

XML數(shù)據(jù)類型 :anyURI、QName、NOTATION

二進制數(shù)據(jù)類型 :hexBinary、base64Binary

時間類型 :持續(xù)時間 duration 、時間或者日期 date、time和dateTime 、循環(huán)的日期或者時間? gDay、gMonth、gMonthDay、gYear和gYearMonth

## 思考題

**用xmlns屬性定義命名空間時,前綴有什么作用?**

可以在多個來源中混合使用不同的命名空間

**怎樣定義和使用默認的命名空間?**

默認命名空間聲明是一個屬性聲明,名稱是xmlns。其值為命名空間URI。

在其作用域中,所有不帶前綴的元素名稱都來自于聲明命名空間。

**XML Schema相比DTD有哪些優(yōu)勢?**

1. 繼承了XML的可擴展性和自描述性。有嚴格的語法要求

2. XML Schema有更多的數(shù)據(jù)類型

3. 引入了命名空間,增強了XML Schema的通用型

4. XML Schema應(yīng)用更加廣泛

總之XML Schema有更強的表現(xiàn)行,能夠滿足不同領(lǐng)域的應(yīng)用需求。

**XML Schema提供哪兩種方式來實現(xiàn)數(shù)據(jù)類型的定義?怎樣實現(xiàn)?**

一種是簡單類型。在XML Schema的內(nèi)置的數(shù)據(jù)類型的基礎(chǔ)上,或由其它XML Schema繼承或定義的簡單類型基礎(chǔ)上,定義新的數(shù)據(jù)類型。另一種是復(fù)雜類型,提供了一種功能強大的復(fù)雜數(shù)據(jù)類型定義機制,可以實現(xiàn)包括結(jié)構(gòu)描述在內(nèi)的復(fù)雜數(shù)據(jù)類型。

## 第五章

**簡單地說,DOM是一組獨立于語言和平 臺的應(yīng)用程序編程接口,它能夠描述如 何訪問和操縱存儲在結(jié)構(gòu)化XML和 HTML文檔中的信息 **

**XML文檔編程解析的兩種方法思路**

DOM和SAX

**理解SAX解析方式,及其與DOM的區(qū)別**

SAX是一個接口集合,它允許開發(fā)人員在自己的應(yīng)用中通過這個接口集合來讀取和分析XML文檔中的數(shù)據(jù)。

SAX處理涉及以下幾步:

1. 創(chuàng)建事件處理程序

2. 創(chuàng)建SAX解析器

3. 將事件處理程序分配給解析器官

4. 對文檔進行解析,將每個事件發(fā)送給處理程序

SAX不需要在內(nèi)存中建立整個文檔的樹結(jié)構(gòu),和DOM相比是一個輕量級的接口集合。

因為整個文檔沒有放到內(nèi)存中,SAX不能隨機的到達文檔的某一部分,同時,開發(fā)人員必須在處理過程中按順序處理信息,所以SAX在處理包含很多內(nèi)部交叉引用的文檔時就會有一些困難,不能實現(xiàn)復(fù)雜的搜索。

**理解DOM模型,DOM解析XML文檔的 思路,如何生成文檔對象?**

**DOM的工作方式:**

1. 將文檔一次性裝入內(nèi)存,然后對文檔進行解析,根據(jù)文檔中定義的元素、屬性、注釋、處理指令等不同的內(nèi)容進行分解,以節(jié)點樹的形式在內(nèi)存中創(chuàng)建XML文件的表示,也就是一個文檔對象模型

2. 把文檔對象化

3. 文檔中的每個節(jié)點對應(yīng)著模型中的一個對象

4. 根據(jù)對象提供的編程接口,在應(yīng)用程序中訪問XML文檔,進而操作XML文檔

## 思考題

**什么是DOM?簡述DOM的結(jié)構(gòu)和工作方式**

DOM是文檔對象模型,他是一組獨立于語言和平臺的應(yīng)用程序編程接口。

能夠描述如何訪問和操作存儲在結(jié)構(gòu)化XML和HTML中的信息。

DOM是樹狀結(jié)構(gòu),元素、屬性、注釋、處理程序都是DOM樹狀結(jié)構(gòu)的節(jié)點。

DOM的工作方式:首先將XML文件一次性讀入內(nèi)存,然后對文檔進行解析,對其中的元素、屬性、注釋、處理程序等不通內(nèi)容進行分解,形成DOM樹狀結(jié)構(gòu)。文檔中的每個節(jié)點,對應(yīng)著模型中的一個對象。然后根據(jù)節(jié)點提供的編程接口,在應(yīng)用程序中對XML文檔進行訪問和操作。

**Node接口的appendChild()和insertChild()方法有什么不同?**

Node接口的appendChild()方法是在該節(jié)點的所有子節(jié)點之后追加一個子節(jié)點,而insertChild()方法是在該節(jié)點的所有子節(jié)點前插入一個子節(jié)點。

**如何刪除XML文檔的節(jié)點?**

刪除節(jié)點可以使用node接口中的removechild()函數(shù)。指定刪除某個子節(jié)點和他所有的子節(jié)點。并沒有從內(nèi)存中delete,只是remove。

## 第六章

XML強調(diào)形式描述與內(nèi)容描述的分離

XSL標準本質(zhì)上是一個指定如何翻譯/顯示一個XML文檔標記的翻譯機制,包括:

? XSLT:將一個xml文檔準換成另一個XML文檔,甚至可以是html文檔等其他格式的文檔

? XPath:一個在XML文檔中查找信息的語言,并且XQuery和XPointer都構(gòu)建在XPath之上

**XSLT匹配節(jié)點的模式**

1. 匹配根節(jié)點、子節(jié)點以及其他后代節(jié)點用 /

2. 匹配元素名稱 match <xsl:template match="Matches">

3. 通配符 * 匹配所有元素

4. 使用ID匹配單個元素

<xsl:template match="id('g1')">

? <h1><xsl:value-of select="."></h1>

\< /xsl:template>

5. 使用@匹配屬性節(jié)點

<xsl:template match="@Type">

<h1><xsl:value-of select="."/></h1>

\</xsl:template>

6. 使用comments()匹配注釋節(jié)點

7. 用processing-instruction()匹配處理指令節(jié)點

8. 使用text()匹配文本節(jié)點

9. 使用或操作符“|”

10. 使用[]進行測試

**XPath簡介, XPath表達式含義與用法**

XPath表達式? ? /child::Match/child::City /Match/City

可用于match、select、test屬性

位置步- 軸名稱::節(jié)點測試[謂詞]

child::book[price>35.00]

child::para[position()>1]

簡略語法

- 簡略語法{原語法}:描述

- ?? nodename{child::nodename}:選取此節(jié)點的所有子節(jié)點

- ?? //{descendant-or-self::node()/}:從匹配選擇的當前節(jié)點選 擇文檔中的節(jié)點,而不考慮它們的位置

- ?? .{self::node()}:選取當前節(jié)點

- ?? ..{parent::node()}:選取當前節(jié)點的父節(jié)點

- ?? @{attribute::}:選取屬性

- ?? [n]{position()=n}:選取第n個節(jié)點

## 思考題

**什么事XSL?他包含哪幾部分?**

XSL代表可擴展樣式表語言,包括XSLT、XPATH、XML-FO。

XSLT可將一個XML文檔轉(zhuǎn)換成另一個XML文檔,同時可以完全忽略格式化文檔。

XPath是一門XMl文檔中查找信息的語言,并且XQuery和XPointer都構(gòu)建在XPath之上。

XML-FO可根據(jù)數(shù)據(jù)的值對XML數(shù)據(jù)進行格式化,可以精確設(shè)置屏幕打印格式,而沒有必要在XML上使用XSL轉(zhuǎn)換。

**xsl:value-of和xsl:for-each元素有什么異同?**

兩者都會輸出模式匹配的節(jié)點,但如果匹配的節(jié)點多余一個。vlaue-of只會顯示第一個,for-each可以顯示所有匹配的節(jié)點。

**如何用XPath選擇上下文節(jié)點中除第一個以外的所有para子元素?寫出其完整形式。**

child::para[position()>1]

XPath提供了一系列節(jié)點軸,使用這些節(jié)點軸可以選取樹 中相對于當前節(jié)點定位的其他節(jié)點。例如,顯示當前元 素的父元素、子元素或者其他后代元素。Xpath也提供了 很多函數(shù)返回節(jié)點集,這些節(jié)點集包含符合匹配條件的 所有節(jié)點。

## 第七章

**什么是XQuery?它與XPath、XSLT有什么關(guān)系?**

答:XQuery即XML Query,是W3C制定的一套標準,用來從類XML文檔中提取信息的查詢語言。

XQuery與XPath和XSLT的關(guān)系十分密切。一方面,從XPath角度來看,XQuery被構(gòu)建在XPath表達式之上,XQuery和XPath使用相同的數(shù)據(jù)模型,并支持相同的函數(shù)和運算符,他們的語法和語言描述也是同源的以保證統(tǒng)一性。另一方面,從XSLT角度來看,XQuery和XSLT都是構(gòu)建在XPath之上,都可以用于提取XML中的數(shù)據(jù),因此兩者在功能方面有許多重疊的地方。

XQuery和XSLT的關(guān)鍵區(qū)別:

1. XQuery主要用于從類XML文檔中提取數(shù)據(jù),并可以將提取的數(shù)據(jù)放入任意的片段之中,XQuery采用全新的查詢語法

2. XSLT主要用于將XML轉(zhuǎn)換為其他文檔,具有內(nèi)置的遍歷引擎,默認情況下會處理整個文檔,XSLT仍然采用XML語法。

**什么是FLWOR表達式?**

FLWOR表達式是XQuery中最常用也是功能最強大的一種表達式,名字來自for、let、where、order by和return等子句首字母。FLWOR表達式的完整語法格式如下。

for子句 | let子句

where子句

order by子句

return子句

其中for子句和let子句可以出現(xiàn)一次或多次,但必須至少出現(xiàn)一次,表示遍歷或者定義。

where子句用于對結(jié)果進行過濾

order by子句用于對結(jié)果進行排序

return子句用于指定返回表達式

## 第八章

XML文檔中的任何元素均可成為XLink,包含鏈接的元素稱為“鏈接元素”

鏈接元素由xlink:type屬性定義,取值如下:

simple,表示元素是簡單鏈接

extended,表示元素是擴展鏈接

locator,表示是遠程資源

arc,表示是鏈接資源的弧

resource,表示是本地資源

titile,表示是自然語言的鏈接描述

例子:

```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屬性定義了激活鏈接時如何進行顯示內(nèi)容。該屬性包含了下列五個值:replae、new、embed、other、none。

xlink:actuate屬性定義了如何激活鏈接,該屬性包含下列4個值:inRequest、onLoad、other、none

擴展鏈接包含多向鏈接。

```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使超級鏈接可以指向 XML 文檔中更多具體的部分(片斷)

Xpointer指向訪問內(nèi)容定位方法

## 思考題

**XML中的鏈接分為哪個兩部分?它們有什么區(qū)別?**

XML中的鏈接分為XLink和XPointer。XLink定義了如何從一個文檔鏈接到另一個文檔,XPointer定義了如何對一個文檔中的不同部分進行尋址和定位。XLink指向一個URI。這個URI指定了一項特定資源,并且可以包含XPointer,用以更準確地定位到目標資源或者文檔的某一部分。

## 第十章

**NoSQL基本概念,BASE的含義**

## 第十一章

**MongoDB概述**:是一個開源的高性能無模式文檔型數(shù)據(jù)庫

**MongoDB特點:**

1. 分布式文件存儲數(shù)據(jù)庫,由C++編寫

2. 功能豐富,最像RDB的NoSQL產(chǎn)品

3. 提供了不同語言版本的api來使用數(shù)據(jù)庫

4. 提供原生shell

5. 支持的查詢語言非常強大

6. 查詢監(jiān)視:MongoDB 包含一系列監(jiān)視工具用于分 析數(shù)據(jù)庫操作的性能。

7. 復(fù)制及自動故障轉(zhuǎn)移:MongoDB 數(shù)據(jù)庫支持服務(wù) 器之間的數(shù)據(jù)復(fù)制,支持主-從模式及服務(wù)器之間 的相互復(fù)制。復(fù)制的主要目標是提供冗余及自動故 障轉(zhuǎn)移。

8. 高效的傳統(tǒng)存儲方式:支持二進制數(shù)據(jù)及大型對象 (如照片或圖片) 。

9. 自動分片以支持云級別的伸縮性:自動分片功能支持水平的數(shù)據(jù)庫集群,可動態(tài)添加額外的機器。

## 第十二章

**Neo4j特點**

1. 優(yōu)越的性能:高效的讀寫能力

2. 設(shè)計的靈活性:無模式,自然擴展

3. 迭代的敏捷性:適用頻繁迭代的敏捷開發(fā)方法

4. 安全可靠:支持事務(wù)管理,提供實時在線備份、日 志恢復(fù)功能

5. 簡單易用:支持多種程序設(shè)計語言開發(fā),特別是 Spring data Neo4j開發(fā)包;支持RESTAPI

6. 支持數(shù)據(jù)導(dǎo)出JSON、xls

7. 豐富的學(xué)習(xí)資源

8. 大企業(yè)實踐應(yīng)用的考驗:擁有廣大實力派用戶群體 驗證了其穩(wěn)定性、健壯性

Neo4j數(shù)據(jù)特點

- 節(jié)點、關(guān)系、屬性是構(gòu)成圖數(shù)據(jù)的三個基本元素

- 節(jié)點和關(guān)系的屬性是一個KV數(shù)據(jù)集合;

- 每個關(guān)系都有一個開始節(jié)點和一個結(jié)束節(jié)點互相連接;是有方向的;

- 大多數(shù)情況下關(guān)系可以不需要屬性;

Neo4j存儲的數(shù)據(jù)是一個屬性圖

- 節(jié)點對應(yīng)實體,可以是人、事物或者任何一種業(yè)務(wù) 概念定義;

- 節(jié)點屬性是實體的描述內(nèi)容

- 實體間關(guān)聯(lián)表現(xiàn)為節(jié)點關(guān)系,如朋友、從屬等關(guān)系

Neo4j數(shù)據(jù)模型:屬性圖抽象

Neo4j數(shù)據(jù)模型中用標簽表示節(jié)點類別

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容