DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML基礎 >> XML Schema用法
XML Schema用法
編輯:XML基礎     

 

你現在應該知道XML只說明數據的結構而並不關心數據是如何具體描述的、數據是否正確。XML文檔的強制性結構化需求是通過DTD(文檔類型說明)來實現的。那就是本系列文章中先前講述的主題。在本文裡,我們概要介紹DTD所存在的缺點,討論新型的更為強大的標准XML Schema。
    其他文章
  以下是本系列的另兩篇文章:
  XML的基本語法
  DTD文檔格式
  
  DTD的麻煩
  
  使用DTD雖然在指定許可的元素、需要的元素以及給定XML文檔中如何組織元素等方面給我們以較大的方便,但是,一旦你想針對特定元素施加數據類型就會遇到麻煩了。DTD規范嚴格地定義了結構,但只支持相對功能較弱的內容類型規范,而對強制性結構化卻無計可施,比如名為Date 的數據如何規定它必須包含有效值呢?
  
  這就要指望XML Schema了,XML Schema目前作為建議已經於2001年提交給了W3C ,這意味著它最終將成為一般用途的建議標准。假如你對此感興趣,你不妨到W3C網站找些官方文檔和內容簡介之類的材料來看看。注意,其他schema定義也是有的,包括日本的標准RELAX 和微軟公司的XDR。可是,XML Schema是唯一受到W3C成為的建議標准,所以我在這篇文章中只對它進行闡述。
  
  XML Schema不僅可以讓你定義XML文檔的結構而且還允許你約束文檔的內容,這就不同於DTD了。另外,一個 XML Schema自身就是一個XML文檔,其基於標簽的語法比DTD中的特殊字符要清楚多了。
     
  Schema概述
  
  XML Schema是用一套預先規定的XML元素和屬性創建的,這些元素和屬性定義了文檔的結構和內容模式。相應的一套精巧的規則(這些規則卻很有意思的用DTD來表示)指定了每個Schema元素或者屬性的合法用途。如果違反這些規則解析器就會拒絕解析你的Schema以及任何同它相聯系的文檔。
  
  現在讓就讓我們來看看清單A中顯示的XML Schema示例,該例對我們以前在清單B中用到的圖書目錄進行了說明。清單B有了點小改動:作為根元素的catalog現在有了兩個新屬性,它們通過清單A中的catalog schema與之關聯。
  
  你再看catalog schema,很快你就會注意到它包含了標准的XML頭<?xml version = "1.0"?>,這表示schema自己就是一個XML文檔。而任何schema的根元素都必須是schema,它有一個或者多個說明自己的屬性。在這種情況下,schema的namespace定義屬性(xmlns)會定義名稱空間為xs,它將用作文檔中所有元素的根名稱空間。
  
  什麼是名稱空間
  XML把名稱空間定義為包裝XML元素在一起供以後重用的方式。為了使用XML文檔的名稱空間中定義的元素,你必須通過xmlns屬性聲明你希望采用名稱空間。你還必須為該名稱空間定義快捷方式的前綴(例如xs:)作為你文檔中的根元素,從而使得名稱空間在文檔中都可用。前綴是用於文檔的任何導入名稱空間的元素的標識符。這一過程就如同在Visual Basic中給庫加索引或者導入模塊;C++、Java或者.NET下的名稱空間也具有同樣的含義。
    
  我們的schema示例中接下來的元素是annotation,它的作用是代表同其父元素有關的文檔。annotation可以包含兩個子元素之一,或者是documentation或者是appinfo,或者兩者都包含進去。前者用於可讀的文檔,而後者則用來保存供應用程序處理的指令。
  
  接下來我們定義了兩個主要的元素(根元素catalog及其子元素book),它們用在書目文檔內,後者采用了兩個element元素。這些元素都包含了定義名字的屬性和各個元素准許的內容。在這種情況下,catalog元素被定義為catalogtype類型,而book元素則被定義為elementtype類型;這兩種類型以後還要在schema文檔中被定義。
  什麼是類型?
  我已經說過了,XML Schema可以讓你把XML文檔中的元素聲明為特定的類型,准許解析器檢查文檔的內容及其結構。XML Schem定義了兩種主要的數據類型:預定義簡單類型和復雜類型。這兩種數據類型之間的主要區別是復雜類型可以象數據一樣包含其他元素而簡單類型則只能包含數據。簡單類型給予了XML Schema低級類型檢查能力,允許你把元素定義為圖A中的任何類型之一。
  
  圖A
  
  簡單類型
   定義
  
  string
   字符串數據。
  
  boolean
   二元類型的True或者False。
  
  date
   歷法日期,格式是CCYY-MM-DD。
  
  dateTime
   歷法日期和時間。
  
  time
   24小時格式的時間可根據時區調節。
  
  decimal
   任意精度和位數的十進制數。
  
  integer
   整數
  
 &nbs

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved