XML 總結

一、概述

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

二、基本語法

2.1 文檔聲明

必須的,第一行

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

encoding屬性說明文檔的字符編碼,如果沒有則默認UTF-8(UTF-16),GB2312是國標的,實際保存和此處要統一,不然會報錯
<?xml version="1.0" encoding="GB2312" ?>

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

2.2 元素定義

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

規范,區分大小寫,不能以數字下劃線開頭,不能含有xml組合字符,不能包含‘:’
建議,不要用點、下劃線,盡量簡短,大小寫統一,使用中文需謹慎

2.3 屬性定義

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

2.4 注釋

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

2.5 空格和換行處理

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

2.6 CDATA區

“<![CDATA[” 開始,“ ]]>”結束

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

2.7 特殊字符

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

2.8 處理指令

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

例如: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的約束模式

雖然解析不會出錯,但不符合真實的邏輯,所以要有約束模式
定義文檔中允許出現的元素名、屬性、內容以及嵌套關系和出現順序

定義Xml文檔的詞匯表,尊徐的結構
xml文檔看做數據庫中的表,則約束模式相當于表結構的定義

3.3 XML的約束語言

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

3.4 有效的XML

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

3.5 DTD

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

  • DTD初步認識

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

 <!ELEMENT 書架 (書+)>                  
   <!ELEMENT 書 (書名,作者,售價)>
   <!ELEMENT 書名 (#PCDATA)>
   <!ELEMENT 作者 (#PCDATA)>
   <!ELEMENT 售價 (#PCDATA)>
PCDATA代表普通的字符串,(書名,作者,售價)按這個順序, (書+)出現多次
  • 在xml文檔中引入外部的DTD
    DOCTYPE文檔類型定義語句,緊跟xml文檔聲明語句后面,兩種格式
自定義:SYSTEM組織內部,或自定義
<!DOCTYPE 文檔類型名稱 SYSTEM "DTD文件的的URL">
公共的:PUBLIC權威機構公開的文件
<!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">
“-”表示未被改進的非ISO標準的DTD,“+”表示被改進的非ISO標準的DTD

例如book.xml:

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

四、相關定義

4.1 元素定義

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

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

4.2 屬性定義

  • 語法格式
    <!ATTLIST 元素名
    屬性名1 屬性類型 設置說明
    屬性名2 屬性類型 設置說明
    ...
  • 舉例
    <!ATTLIST 商品
    類別 CDATA #REQUIRED
    顏色 CDATA #IMPLIED
  • 設置說明
    REQUIRED 必須設置
    IMPLIED 可有可無
    FIXED 設為固定值,如:CDATA #FIXED “頁面作者”
    直接使用默認值 如:CDATA “上網”
  • 屬性類型
    CDATA 普通文本字符串,特殊字符用轉義字符串
    ENUMERATED 枚舉類型
    ID用于標示唯一的,相當于KEY
    IDREFIDERFSNMTOKENNMTOKENSNOTATIONENTITYENTITYS

4.3 實體定義

  • 作用 為一段文本內容創建一個別名,,在XML中多次引用這個別名,解析器會自動把別名轉為對應的文本
  • 定義 DTD中用<!ENTITY...>定義,兩種類型:引用實體和參數實體

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

參數實體:DTD中定義,DTD中引用
<!ENTITY % 實體名稱 “實體內容”>
引用方式:&實體名稱;

五、XML Schema

5.1 XML Schema與DTD的比較

和DTD一樣,定義xml文檔結構,比DTD更有發展前途。

  1. 自身符合xml語法結構
  2. DOM 、SAX等XML API更容易解析
  3. 采用和xml文檔同樣的合法性驗證機制
  4. 對名稱空間更好的支持
    5.比DTD支持更多的數據類型,并支持用戶自定義數據類型
  5. 定義約束的能力更強大
  6. 基本上滿足了關系模式在數據描述上的需要
    缺點:不能像DTD定義實體,很多細節比DTD更復雜

5.2 通過一個例子初步認識XML Schema

5.3 名稱空間的概念

5.4 名稱空間的聲明

5.5 默認名稱空間

5.6 屬性的名稱空間問題

5.7 引入XML Schema文檔

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,441評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,475評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,834評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,009評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,559評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,306評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,516評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,728評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,249評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,484評論 2 379

推薦閱讀更多精彩內容

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