# 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. 不能有<和>
**實體引用:**
注釋格式<!--正確的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)字符 |
| -------- | -------- |
| &;? | &? ? ? ? |
| <;? ? | <? ? ? ? |
| >;? ? | >? ? ? ? |
| ";? | "? ? ? ? |
| &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é)點類別