XML 總結(jié)

一、概述

  • XML是一種通用的數(shù)據(jù)交換格式
  • 許多系統(tǒng)配置文件(記錄應(yīng)用程序的配置信息)
  • JSP文檔逐步向XML語法格式過渡
  • 與HTML
  • ** 與數(shù)據(jù)庫**
  • XML文檔的組成單元
    XML聲明(declaration)
    DOCTYPE聲明語句
    處理指令(processing instruction)
    元素(element)
    注釋(comment)
    CDATA區(qū)

二、基本語法

2.1 文檔聲明

必須的,第一行

前后'?xml'與'<'間不能有空格,目前只有版本1.0,但必須寫
<?xml version="1.0" ?>   

encoding屬性說明文檔的字符編碼,如果沒有則默認(rèn)UTF-8(UTF-16),GB2312是國標(biāo)的,實(shí)際保存和此處要統(tǒng)一,不然會(huì)報(bào)錯(cuò)
<?xml version="1.0" encoding="GB2312" ?>

standalone屬性說明文檔是否獨(dú)立
<?xml version="1.0" encoding="GB2312" standalone="yes" ?>

2.2 元素定義

使用'<>'和'</>'定義,一個(gè)元素可以嵌套多個(gè)元素,第一個(gè)元素為根元素,只能有一個(gè),
空元素如<img />,標(biāo)簽之間不允許交叉

規(guī)范,區(qū)分大小寫,不能以數(shù)字下劃線開頭,不能含有xml組合字符,不能包含‘:’
建議,不要用點(diǎn)、下劃線,盡量簡短,大小寫統(tǒng)一,使用中文需謹(jǐn)慎

2.3 屬性定義

屬性值必須用雙引號或單引號,可以改寫成子元素描述,遵循元素相同的命名規(guī)范

2.4 注釋

和HTML完全一樣
xml聲明之前不能有注釋
注釋符號不能相互包含
注釋同樣要注意編碼

2.5 空格和換行處理

標(biāo)簽以外的所有空格和換行,都要交給下游程序處理

2.6 CDATA區(qū)

“<![CDATA[” 開始,“ ]]>”結(jié)束

<script type="text/javascript">
<![CDATA[       for(var x=0;x<3;x++)
                         {
                                  alert(x);
                         }
]]>
</script>

2.7 特殊字符

特殊字符 替代符號
& &
< <
> >
" "
' '

2.8 處理指令

簡稱PI,用來為處理XML文檔的應(yīng)用程序提供指示信息
處理指令以“<?”開頭,以"?>"結(jié)尾,XMl聲明語句就是常見的處理指令
XML分析器會(huì)把處理指令原封不動(dòng)的傳給應(yīng)用程序,由應(yīng)用程序來解釋這個(gè)指令

例如:book.xml

<?xml version="1.0" encoding="GB2312" ?>
<?xml-stylesheet type="text/css" href="book.css" ?>
             <bookstore>
                  <book>
                         <bookname>Java教程</bookname>
                         <author>李華</author>
                         <price>99元</price>
                  </book>
            </bookstore>

book.css

    bookname{display:block; color:red}
    author{display:block; font-style:italic}
    price{display:block; color:olive}

三、XML約束模式

3.1 格式良好的XML

解析器Parser

3.2 XML的約束模式

雖然解析不會(huì)出錯(cuò),但不符合真實(shí)的邏輯,所以要有約束模式
定義文檔中允許出現(xiàn)的元素名、屬性、內(nèi)容以及嵌套關(guān)系和出現(xiàn)順序

定義Xml文檔的詞匯表,尊徐的結(jié)構(gòu)
xml文檔看做數(shù)據(jù)庫中的表,則約束模式相當(dāng)于表結(jié)構(gòu)的定義

3.3 XML的約束語言

定義另一種語言的語言為元語言,單獨(dú)的文件,模式文檔,xml文檔實(shí)例文檔
約束模式語言,XML DTD、XML Schema、XDR、SOX等,前兩種最廣泛

3.4 有效的XML

遵守XML基本的語法規(guī)則,而且符合指定的約束模式,稱為Valid XML
解析器程序檢查是否符合約束模式稱為校驗(yàn),因此非校驗(yàn)類解析器和校驗(yàn)類解析器,IE是非校驗(yàn)類解析器

3.5 DTD

Document Type Definition,早期的約束模式語言

  • DTD初步認(rèn)識

包含元素,元素之間關(guān)系,屬性、實(shí)體以及符號的定義
book.dtd,可以使用正則表達(dá)式,使用UTF-8,unicod編碼

 <!ELEMENT 書架 (書+)>                  
   <!ELEMENT 書 (書名,作者,售價(jià))>
   <!ELEMENT 書名 (#PCDATA)>
   <!ELEMENT 作者 (#PCDATA)>
   <!ELEMENT 售價(jià) (#PCDATA)>
PCDATA代表普通的字符串,(書名,作者,售價(jià))按這個(gè)順序, (書+)出現(xiàn)多次
  • 在xml文檔中引入外部的DTD
    DOCTYPE文檔類型定義語句,緊跟xml文檔聲明語句后面,兩種格式
自定義:SYSTEM組織內(nèi)部,或自定義
<!DOCTYPE 文檔類型名稱 SYSTEM "DTD文件的的URL">
公共的:PUBLIC權(quán)威機(jī)構(gòu)公開的文件
<!DOCTYPE 文檔類型名稱 PUBLIC “DTD名稱” "DTD文件的的URL">

例如:
<!DOCTYPE 書架 SYSTEM "book.dtd">
<!DOCTYPE web-app PUBLIC “-//Sun Miorosystems, Inc.//DTD Web Application 2.3//EN” "http://java.sun.com/dtd/web-app_2.3.dtd">
“-”表示未被改進(jìn)的非ISO標(biāo)準(zhǔn)的DTD,“+”表示被改進(jìn)的非ISO標(biāo)準(zhǔn)的DTD

例如book.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 書架 SYSTEM "book.dtd">
<書架>
.....
</書架>
standalone即使為no,只要DOCTYPE聲明,也會(huì)去校驗(yàn)
  • xml文檔中直接嵌入DTD
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 根元素名 [
     DTD定義語句
    ...
]>

四、相關(guān)定義

4.1 元素定義

  • 語法格式:
    <!ELEMENT 元素名稱 使用規(guī)則>
  • 舉例:
    <!ELEMENT 書架 (書名,作者,售價(jià))>
    <!ELEMENT 書名 (#PCDATA)>
  • 使用規(guī)則:
    (#PCDATA) 是parsed character data簡寫,表示可以是普通字符串
    (書名,作者,售價(jià))
    (書名,#PCDATA)
    EMPTY 內(nèi)容為空,如<HR />
    ANY 元素內(nèi)容任何形式

PS:
a、DTD注釋和XML文檔一樣
b、每條元素定義語句順序隨意
c、具有不同用途的元素不能使用相同的元素名
d、一個(gè)元素的各個(gè)組成成分之間可以有各種關(guān)系
<!ELEMENT MYFILE (TITLE AUTHOR EMAIL)> 三個(gè)子元素順序任意
<!ELEMENT MYFILE (TITLE, AUTHOR ,EMAIL)> 三個(gè)有序的子元素
<!ELEMENT MYFILE (TITLE |AUTHOR| EMAIL)> 三個(gè)中的任意一個(gè)
e、在元素的使用規(guī)則中可以定義子元素出現(xiàn)的次數(shù)
(書+)一次或者多次,(書?)一次或者不出現(xiàn),(書)不出現(xiàn)或者一次多次,(書)只能一次
f、一對圓括號可用于將括在其中的內(nèi)容組合成一個(gè)可統(tǒng)一操作的分組,分組中可以嵌套更小的分組
<!ELEMENT MYFILE ((TITLE
, AUTHOR?,EMAIL)*|COMMENT)>

4.2 屬性定義

  • 語法格式
    <!ATTLIST 元素名
    屬性名1 屬性類型 設(shè)置說明
    屬性名2 屬性類型 設(shè)置說明
    ...
  • 舉例
    <!ATTLIST 商品
    類別 CDATA #REQUIRED
    顏色 CDATA #IMPLIED
  • 設(shè)置說明
    REQUIRED 必須設(shè)置
    IMPLIED 可有可無
    FIXED 設(shè)為固定值,如:CDATA #FIXED “頁面作者”
    直接使用默認(rèn)值 如:CDATA “上網(wǎng)”
  • 屬性類型
    CDATA 普通文本字符串,特殊字符用轉(zhuǎn)義字符串
    ENUMERATED 枚舉類型
    ID用于標(biāo)示唯一的,相當(dāng)于KEY
    IDREF、IDERFS、NMTOKEN、NMTOKENSNOTATION、ENTITY、ENTITYS

4.3 實(shí)體定義

  • 作用 為一段文本內(nèi)容創(chuàng)建一個(gè)別名,,在XML中多次引用這個(gè)別名,解析器會(huì)自動(dòng)把別名轉(zhuǎn)為對應(yīng)的文本
  • 定義 DTD中用<!ENTITY...>定義,兩種類型:引用實(shí)體和參數(shù)實(shí)體

引用實(shí)體:DTD中定義,xml中引用
<!ENTITY 實(shí)體名稱 “實(shí)體內(nèi)容”>
<!ENTITY 實(shí)體名稱 SYSTEM "外部XML文檔的URL">
引用方式:&實(shí)體名稱;

參數(shù)實(shí)體:DTD中定義,DTD中引用
<!ENTITY % 實(shí)體名稱 “實(shí)體內(nèi)容”>
引用方式:&實(shí)體名稱;

五、XML Schema

5.1 XML Schema與DTD的比較

和DTD一樣,定義xml文檔結(jié)構(gòu),比DTD更有發(fā)展前途。

  1. 自身符合xml語法結(jié)構(gòu)
  2. DOM 、SAX等XML API更容易解析
  3. 采用和xml文檔同樣的合法性驗(yàn)證機(jī)制
  4. 對名稱空間更好的支持
    5.比DTD支持更多的數(shù)據(jù)類型,并支持用戶自定義數(shù)據(jù)類型
  5. 定義約束的能力更強(qiáng)大
  6. 基本上滿足了關(guān)系模式在數(shù)據(jù)描述上的需要
    缺點(diǎn):不能像DTD定義實(shí)體,很多細(xì)節(jié)比DTD更復(fù)雜

5.2 通過一個(gè)例子初步認(rèn)識XML Schema

5.3 名稱空間的概念

5.4 名稱空間的聲明

5.5 默認(rèn)名稱空間

5.6 屬性的名稱空間問題

5.7 引入XML Schema文檔

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

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

  • 1. XML簡介 以下內(nèi)容來自于http://www.w3school.com.cn/xml 基本知識 XML 和...
    WebSSO閱讀 2,092評論 1 7
  • 經(jīng)過兩天的奮戰(zhàn),終于把xml簡略的過了一遍。 1.1XML介紹 xml是Extensible Markup lan...
    Ystrator閱讀 1,043評論 0 2
  • 什么是約束? 在XML技術(shù)里,可以編寫一個(gè)文檔來約束一個(gè)XML文檔的書寫規(guī)范,這就是XML約束。約束定義了文檔的結(jié)...
    tobe_superman閱讀 1,221評論 0 3
  • 我的鋼琴調(diào)音師是個(gè)臺灣人,名叫王文星,看這個(gè)名字,大概是沒有文化的父母,希望孩子讀點(diǎn)書,擺脫貧窮。他今年五十六歲了...
    一條小魚兩條小魚閱讀 1,130評論 4 4
  • 幼兒園開學(xué)第一天,一對父子在幼兒園門口極有吸引力。父親拍拍兒子的頭聲音細(xì)膩的說:“好好聽課,別讓你爸爸擔(dān)心?!薄爸?..
    邯夙閱讀 289評論 2 5

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