XML&DTD

XML:Extensible Markup Language, 可擴展標記語言html

 

特色:java

比起html, html是顯示/樣式與數據不分離,node

xml只顯示純數據,和樣式無關.數據庫

 

Html的標籤,  a,br, p,div,span等等app

Html的標籤是固定的xml的標籤呢,是自定義的. (自描述性)dom

每每定義的時候,是要體現內容的一個簡單描述,ide

所以,咱們說XML具備自描述性.測試

 

 

哪些場合容易見到XML?google

交換數據或傳輸數據時編碼

好比公共查詢接口,例如 豆瓣的書評查詢, google的天氣查詢

 

或者存儲數據時能夠當作小型數據庫用[在線詞典]

 

用來作配置文件


XML的語法規範

1:基本的XML能夠分紅3部分

文檔聲明[可選,可是強烈建議加上,並設置編碼爲utf-8]

  例: <?xml version="1.0" encoding="utf-8"?>,  version只能選1.0

DTD聲明[可選]

根結點:最頂層的元素,包含其餘全部元素/結點的根結點.

根結點必須有且只能有一個.

 

1.1 元素的語法規範

   標籤必須閉合

   標籤不容許相互嵌套

   標籤名稱區分大小寫

   單標籤的閉合

1.2 屬性的語法規範

   屬性必有值

   屬性值必用引號包起來

1.3 特殊字符與實體

   在XMLxhtml,對於實體的概念是同樣的,

對於 &,>,< ',"要用實體來代替,  & > < " '

 

1.4 註釋的語法

   註釋寫在 <!-- 註釋寫在這裏-->

   註釋內部不要出現 --

   註釋不能嵌套

   註釋能夠除了標記之內的任何地方寫

 

1.5 CDATA,  character data的縮寫,一大段字符數據

對於CDATA,原樣輸出,不用實體代替.

 

 

 

DTD用法

document type definition: 文檔類型定義

節點下面能夠子節點,子節點又能夠有子節點,子節點的名稱可能無限種可能.

可否對XML的節點的名稱,個數,類型等作一個限制?

:能夠,DTD就是用來規範節點的名稱,個數,類型.

能夠理解XML文檔的"說明書".

XML文檔的結構必須符合此說明書

 

XML是一種通用的規範,只要知足該規範都可以來解析XML文檔,

Javascript, ActionScript,PHP,java,都有解析XML的功能或庫.

Ff, IE也能來解析XML,可是用的不相同的引擎.

 

IE來幫咱們進行XML的解析和測試


DTD能夠用來規範XML的元素,屬性實體

2.0: DTD的基本寫法

<!DOCTYPE 根節點名稱 [

]>

 

2.1 DTD如何規範XML的元素?

:

<!ELEMENT 結點名稱 結點規範> ,結點規範的4種形式,見下:

規範形式1:    (子節點1,子節點2,子節點3....子節點N) ,規範的是子節點的名稱

規範形式2:    (#PCDATA)

規範形式3:    EMPTY

規範形式4     ANY, 若是是ANY,則結點能夠是空結點,能夠文本結點,也能夠是多層子節點,可是,若是是多層子節點,依然是要對子節點作說明.

               

2.2 DTD如何規範屬性

屬性名="屬性值"

該屬性是否必須有是否惟一是否只能選某幾個可能值之一?  是否有默認值?

<!ATTLIST 元素名稱

屬性1名稱  屬性類型 屬性特色

屬性2名稱  屬性類型 屬性特色

>

屬性類型:

ID  ----> 若是屬性爲ID類型,則屬性的值 必須惟一

IDREF/IDREFS ---> 這個屬性的值必是文檔內某個ID屬性的值

CDATA(文本)

Enumerated(枚舉類型)

 

屬性特色 ------------------------------>典型寫法

#REQUIRED : 要求屬性必須有 -->#REQUIRED 

#IMPLIED  :  屬性可有可沒有 ---> #IMPLIED

#FIXED    : 屬性值是固定的  ---> #FIXED "固定值"

Default_value : 默認值         ------> "默認值"

 

 

屬性類型 ----------------------------->典型寫法

ID  :要求該屬性值必須是惟一的--------> ID

CDATA: 屬性值爲普通字符串 ----------> CDATA

IDREF: 屬性值必爲ID類型屬性的一個值----> IDREF

IDREFS:屬性是ID類型屬性的一個,或多個值----> IDREFS, 多個值用空格隔開

Enumerated: 屬性的值改成如下幾個之一, ----------> (1|2|3|N)


2.3 DTD規範XML的實體

1實體聲明  

<!ENTITY 實體名 "實體值">

2: 引用實體

&實體名;

 

2.4 在對元素的聲明中修飾符的做用

()   包在子元素外面,把子元素合成組

夾在子元素名稱之間,限制子元素的順序

+ ,是修飾元素的"個數"用的, + 表明 1->N,

*, 是修改元素個數表明 0->N

?, 是修飾元素個數表明01

|, A|B|C ,A,B,C任取一個

 

3. 如何生成和解析XML

經過PHPDOM操做來生成和解析XML

 

3.1  , 如何實例化DOM操做類

: $dom = new DOMDocument(1.0,'utf-8');

 

3.2 如何載入XML文檔

: $dom->load('xml-path');

 

3.3: 若是查詢節點?

   3.3.1 根據id來查詢具體節點, (要求DTD中已聲明爲ID的屬性)

   例: $dom->getElementById('ID');

 

   3.3.2 根據已查到的節點,查其子節點返回的是"列表對象"

$node->childNodes 屬性就可讀到

 

   3.3.3 根據標籤名 來查詢節點列表返回值是一個"列表對象"

   $dom->getElementsByTagName('標籤名');

 

   3.3.4 根據節點列表對象,查詢列表中的任意一個子節點.

$list->length 屬性能夠讀出子節點的數量來

$list->item(index), 讀取列表中第index個節點來

 

   3.3.5 查到節點後,又如何讀取節點的值

      $node->nodeValue就能夠

   3.3.6 查到節點後,又如何讀取屬性的值

      $node->getAttribute(屬性名) ;// 讀到屬性的值


3.4 PHPDOM建立XML

3.4.1 建立節點

$xmldom->createElement('節點名'[,節點的文本內容]),

 

:->createElement('app','內容'); ---> <app>內容</app>

->crateELement('app') ---->  <app></app>


3.4.2 : 如何建立屬性節點?

$node->setAttribute('屬性名','屬性值');

 

3.4.3 如何建立CDATA

$dom->createCDATASection('內容');

 

 

3.4.4: 如何添加子節點

$node->appendChild(子節點);

 

 

3.5 如何刪除子節點

父節點->removeChild(子節點)

 

3.6: 如何修改子節點

父節點->replaceChild(新子節點,舊子節點)

 

 

 

XPATH, Xquery

宇宙霹靂無敵光速查詢技術  xpath

XPATH, 的基本寫法

從根節點經過節點的層次來定位.

1逐層定位

/cetsix/word/name -->找根節點下->word->全部name節點注意節點層次必須緊挨着.

 

2: 任意層次定位

//name  , 找任意層次的,name節點

 

// 用條件查詢按屬性做條件

/cetsix/word[@name="value"], cetsix下的word,而且wordname屬性的值是'value'

: <word name="value"></word>

 

// 用條件查詢按子元素的值作條件

/cetsix/word[name="value"], cetsix下的word,而且wordname子元素的值是'value'

: <word ><name>value</name></word>

 

 


討論

<book id="boo1">

</book>

 

<book>

   <id>b001</id>

</book>

 

什麼時間用屬性什麼時間用元素?

 

商品表爲例:

商品名商品價格庫存--->這些信息商品固有的信息.

每一行商品,又加了"id"信息

 

這個id信息,本來沒有由於商品信息太多,爲管理/區別商品的固有信息,另加的id.

 

這個id, '關於信息的信息', ---> "元信息"

 

通常而言,元信息,適合用屬性,實體信息適合用子元素,

相關文章
相關標籤/搜索