javaWeb 之 XML基礎(二)

1、XML約束模式->綱要

● 格式良好的(Well-formed)XMLjava

● XML的約束模式web

● XML約束模式語言數據庫

● 有效的(Valid)XML瀏覽器

一、格式良好的(Well-formed)XML

● 計算機程序在處理XML文檔以前,首先必須可以解析出XML文檔內容中的各個元素的相關信息。app

● 用於解析XML文檔的解析器程序對應的英文術語叫Parser。google

● 要讓計算機程序解析出XML文檔內容所表達的信息,spa

XML文檔更應該嚴格遵循必定的語法。.net

● 遵照XML基本語法規則和規範的XML文檔就能夠稱之爲「Well-formed XML」,中文意思就是「格式良好的XML」。設計

二、XML的約束模式

● 爲何要有約束模式?orm

      舉例:

      <書架>

            <書>

                 <書名>Java程序設計</書名>

                 <做者 姓名=「 」></做者>

                 <售價 單位=「元」>38</售價>

                 <售價單位=「元」>28</售價>

          </書>

       </書架>

● 約束模式定義了XML文檔中容許出現的元素名(也就是標記名)、元素中的屬性、元素中的內容類型以及元素之間的嵌套關係和出現順序。

● XML約束模式不只定義了XML文檔的詞彙表,它還定義了一個XML文檔必須遵循什麼樣的結構。

● 若是把一個XML文件看做是數據庫中的一個表,那麼XML約束模式就至關於數據庫表結構的定義。

● 若是沒有爲一個XML文檔指定約束模式,那麼該文檔中能夠包含任何類型的標記:若是爲一個XML文檔指定了約束模式,那麼它必須需知足約束模式所規定的結構、數據類型和數據關聯等內容。

三、XML的約束模式語言

● 用做XML約束模式的內容也須要遵循必定的語法規則,這些語法規則就造成了XMl約束模式語言。

● XML約束模式語言是用來創造XML標記語言的語言,這種用於定義另外一種語言的語言被稱爲元語言。

● 約束模式一般都是在一個單獨的文件中進行定義,這個文件被稱做模式文檔。

● 與模式文檔的概念相對應,一招模式文檔編寫的XML文檔被稱爲實力文檔。

● 前後出現的XML約束模式語言有XML DTD、XDR、SOX、XML Schema等等,其中應用最普遍和具備表明意義的是XML DTD和XML Schema。

四、有效的(Valid)XML

● 一個遵照XML的基本語法規則、且符合爲它所指定的某個

XML約束模式的XML文檔就能夠稱之爲「Valid XML」

文檔,中文意思就是「有效的XML」文檔。

● 一個XML文檔並不必定須要是有效的,但必須是格式良好的。

● 將一個XML文檔和它所引用的XML約束模式進行比較分析,看其中的內容是否符合XML約束模式的過程叫校驗(validation),校驗過程也是經過解析器程序軟件(Parser)來處理的。

● 根據可否對XML文檔進行約束模式校驗,能夠將XML解析器分爲兩類:非校驗類解析器(IE瀏覽器)和校驗類解析器。

2、DTD(Document Type Definition)

● 對DTD的初步認識

● 在XML文檔中引入外部DTD文件

● 在XML文檔中直接嵌入DTD定義語句

● 元素定義

● 屬性定義

● 實體定義

一、對DTD的初步認識

QQ截圖20140310202334

二、在XML文檔中引入外部DTD文件

● XML文檔經過使用DOCTYPE聲明語句(文檔類型定義語句)來指明它所遵循的DTD文件,DOCTYPE聲明語句緊跟在XML文檔聲明語句後面,有來年各類格式:

    1)<!DOCTYPE 文檔類型名稱 SYSTEM 「DTD文件的URL」>

      2)<!DOCTYPE 文檔類型名稱 PUBLIC 「DTD名稱」「 DTD文件的URL」>

例如:

      1)<!DOCTYPE 書架 SYSTEM 「book.dtd」>

      2)<!DOCTYPE web-app PUBLIC 「-//Sun Microsystems, Inc. //DTD Web Application 2.3//EN」「 http://java.sun.com/dtd/web-app_2.3.dtd」>

● DTD標識名稱應符合一些標準的規定,對於ISO標準的DTD一ISO三個字母開頭;被改進的非ISo標準的DTD以加號「+」開頭;未被改進的非ISO標準的DTD以減號「-」開頭。

● 對於一些已經制定成爲了行業標準的DTD文件,一些相應的解析器程序可能已經將它們內嵌進去,因此在解析時並不必定要到從指定的URL上進行下載。

範例:

QQ截圖20140310210010

三、在XML文檔中直接嵌入DTD定義語句

在XML文檔中直接嵌入DTD定義語句:

QQ截圖20140310211837

引入外部DTD文件的同時加入DTD定義語句:

QQ截圖20140310211903

例子:

QQ截圖20140310212135

XML文檔的組成單元

● XML聲明(declaration)

● DOCTYPE聲明語句

● 處理指令(processinginstruction)

● 元素(elements)

● 註釋(comment)

● CDATA區

四、元素定義

● 語法格式:

       <!ELEMENT 元素名稱 使用規則>

● 舉例:

       <!ELEMENT 書架(書名,做者,售價)>

       <!ELEMENT 書名(#PCDATA)>

● 使用規則:

  1. (#PCDATA)是parsed character data的簡寫
  2. (書名,做者,售價)
  3. (書名,#PCDATA)
  4. EMPTY    例如,<!ELEMENT HR EMPTY>定義的元素形式爲<HR />
  5. ANY

細節

● DTD使用與XML文檔一樣的註釋方式:<!--註釋內容—>

● 每條元素定義語句的順序是可有可無的

● 具備不一樣用途的元素不能使用相同的元素名

● 一個元素的各個組成成份之間能夠有各類關係:

      <!ELEMENT MYFILE (TITLE AUTHOR EMAIL)>

      <!ELEMENT MYFILE (TITLE,AUTHOR,EMAIL)>

      <!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)>

● 在元素的使用規則中能夠定義子元素出現的次數:

       (書+)--一次或以上、(書?)--零次或一次、(書*)--零次或以上、(書)—必須僅且只能一次

● 一對圓括號()可用於將括在其中的呢絨組合成一個可統一操做的分組,分組中能夠嵌套更小的分組。

        <!ELEMENT MYFILE ((TITLE*,AUTHOR?,EMAIL)*|COMMENT)>

五、屬性定義

● 語法格式:

      <!ATTLIST 元素名

              屬性名1 屬性類型 設置說明

              屬性名2 屬性類型 設置說明

              ……

      >

● 舉例:

      <!ATTLIST 商品

              類別 CDATA #REQUIRED

              顏色 CDATA #IMPLIED

      >

● 應用:

      <商品 類別=「服裝」 顏色=「黃色」>…</商品>

      <商品 類別=「服裝」>…</商品>

設置說明:

  1. #REQUIRED(必須設置)
  2. #IMPLIED(無關緊要)
  3. #FIXED(取值固定爲某一個值)
  4. 直接使用默認值

類型:

  1. CDATA
  2. ENUMBERATED
  3. ID
  4. IDREF和IDREFS
  5. NMTOKEN和NMTOKENS
  6. NOTATION
  7. ENTITY和ENTITYS

六、實體定義

● 實體的根本做用是爲了一段文本內容建立一個別名,之後在XML文檔中就能夠屢次引用這個別名,XML解析器程序將把XML文檔中出現的別名引用轉換變成起所對應的文本內容。

● 在DTD定義中,一條<!ENTITY …>語句用於定義一個實體。

● 實體可分爲來年各類類型:引用實體和參數實體。

引用實體:

● 語法格式:

  • <!ENTITY 實體名稱 「實體內容」>
  • <!ENTITY 實體名稱 SYSTEM 「外部XML文檔的URL」>

● 引用方式:

      &實體名稱;

● 舉例:

     <!DOCTYPE copyright [

     <!ENTITY copyright SYSTEM 「http://www.baidu.com/copyright.xml」>

     ]>

     ……

     &copyright;

參數實體:

● 語法格式:

      <!ENTITY % 實體名稱 「實體內容」>

● 引用方式:

      %實體名稱;

● 舉例1:

     <!ENTITY % TAG_NAMES 「姓名|EMAIL|電話|地址」>

     <!ENTITY 我的信息 (%TAG_NAMES;|生日)>

     <!ENTITY 客戶信息 (%TAG_NAMES;|公司名)>

● 舉例2:

     <!ENTITY % common.attributes

             ‘id ID #IMPLIED

               account CDATA #REQUIRED’

     >

     …

     <!ATTLIST purchaseOrder %common.attributes;>

     <!ATTLIST item %common.attributes;>

3、XML Schema

● XML Schema 與DTD的比較

● 經過一個例子初步認識XML Schema

● 名稱空間的概念

●默認名稱空間

● 屬性的名稱空間問題

● 引入XML Schema文檔

一、XML Schema 與DTD的比較

● XMLSchema符合XML語法結構

● DOM、SAX等XML API很容易解析出XML Schema文檔中的內容。

● XML Schema則採用與XML文檔一樣的合法性驗證機制。

● XML Schema對名稱空間支持很是好。

● XML Schema比XML DTD 支持更多的數據類型,並支持用戶自定義心得數據類型。

● XML Schema定義約束的能力很是強大,能夠對XML實力文檔做出細緻的語義限制。

● XML Schema 基本上知足了關係模式在數據描述上的須要。

● XML Schema不能像DTD同樣定義實體,比DTD更復雜。

二、名稱空間的概念

● 遇到的問題

   在不一樣的約束模式文檔中,出現表示不一樣含義的相同標記名稱是徹底有可能的。

● 解決

  1. 每一個約束模式文檔被賦予一個惟一的名稱空間,每一個名稱空間都用一個惟一的URI(統一資源標識符)表示。
  2. 在XMl實力文檔中來自不一樣模式文檔的元素增長不一樣的前綴部分,元素名稱前增長的各個前綴部分分別表明各個模式文檔的名稱空間。

● 舉例:

   <xs:schema xmlna:xs=http://www.w3.org/2001/XML Schema」>

          <xs:element name=」書架」>

          …

名稱空間的聲明

● 基本格式:

       xmlns:前綴名稱=「URI」

● 舉例:

QQ截圖20140311105950

● 在任何元素中聲明的名稱空間,只對該元素及其中嵌套的全部子孫元素有效,聲明名稱空間的元素自身上也可使用表明該名稱空間的前綴。

● QName(Qualified Name,限定名)是指用冒號(:)把前綴與本地部分進行分隔的名稱,即被限定在了某個名稱空間中的名稱。

三、默認名稱空間

● 基本格式:

   xmlns=「URI」

● 舉例:

QQ截圖20140311123641

四、屬性的名稱空間問題

● XML實例文檔中一般只須要將元素限定於該模式文檔的名稱空間中,而不須要將該元素的屬性限定在名稱空間中。

    例子:

       <xi:include xmlns:xi=」http://www.w3org/2001/XInclude」 href=」http://example.com/std/defs parse=」xml」 />

● 若是屬性名稱中有一個前綴部分,該屬性將被限定在該前綴所指定的名稱空間中。若是屬性名稱中沒有前綴部分,那麼該屬性就不屬於任何名稱空間。屬性不收默認名稱空間的影響。

    例子:

       <x xmlns=」http://www.w3.org 「 xmlns:n1=」http://www/w3/org」>

             <good a=」1」 n1:a=」2」 />

      </x>

xml:space和xml:lang屬性

● 前綴名「xml」已經被隱式的綁定到了一個名稱空間上,內置屬性名稱以xml:做爲前綴。自定義的屬性名不能以xml:做爲前綴。

● xml:space屬性用於設置下游應用程序應該如何處理解析器傳遞的空格等字符,設置值只能是「default」或「preserve」。

       <網址 xml:space=」preserve」>     www.google.com   </網址>

● xml:lang屬性用於設置元素的本地化語言信息,ISO-639規範中規定了表明各個國家和地區的本地化語言的名稱,例如」en「表示英文、」la「表示拉丁文、」zh「表示中文、「zh-CN」表示中文(中國)、「zh-TW」表示中文(臺灣地區)。

   例子:

     <product xml:lang=」zh-CN」 release-date=」2002-08-18」 />

     <product xml:lang=」en-US」 release-date=」0-18-2002」 />

● 在某個元素中設置了xml:space和xml:lang屬性,嵌套在該元素總的子孫元都將沿襲起設置的結果。

五、引入XML Schema文檔

使用名稱空間 引入XML Schema文檔

QQ截圖20140311123641

● schemaLocation 屬性的設置值包含有兩個部分,第一部分就是名稱空間的URI,第二部分就是該名稱空間所標識的XML Schema文件的位置或URL地址,這兩個部分之間用空格分隔。

使用名稱空間引入多個XML Schema文檔

QQ截圖20140311142824

不使用名稱空間引用XML Schema文檔

QQ截圖20140311143240

相關文章
相關標籤/搜索