Schema

Schema

數據庫中的Schema
Schema,即XML Schema,XSD(XML Schema Definition)是W3C于2001年5月發布的推薦标準,指出如何形式描述XML文檔的元素[1]。XSD是許多XML Schema語言中的一支。XSD是首先分離于XML本身的schema語言,故獲取W3C的推薦地位。像所有XML Schema語言一樣,XSD用來描述一組規則──一個XML文件必須遵守這些規則,才能根據該schema‘合法(Valid)’。
  • 中文名:
  • 外文名:schema
  • 所屬學科:
  • 對應關系:一個用戶一般對應一個schema
  • 釋義:數據庫對象的集合
  • 全稱:XML Schema
  • 發布時間:2001年5月
  • 發布組織:W3C
  • 意義:如何形式描述XML文檔的元素

簡介

Schema,即XML Schema,XSD(XML Schema Definition)是W3C于2001年5月發布的推薦标準,指出如何形式描述XML文檔的元素。XSD是許多XML Schema語言中的一支。XSD是首先分離于XML本身的schema語言,故獲取W3C的推薦地位。

像所有XML Schema語言一樣,XSD用來描述一組規則──一個XML文件必須遵守這些規則,才能根據該schema‘合法(Valid)’。

然而,與其他XML Schema語言不同,XSD意圖設計為在确認一個文檔的有效性時,将會産生滿足特定數據類型的一個信息集合。這種後驗證的XML信息集可用來開發XML文件處理軟件。

名稱來源

因為有其他XML schema語言存在,故在引用這W3C建議的語言時,使用XML Schema或W3C XML Schema,Schema永遠前綴大寫。

“XML Schema”在2001年5月成為W3C推薦标準。由于“XML Schema”作為一種W3C的推薦标準的名字與廣義的XML Schema語言存在名稱上的混淆,用戶社區的一部分人采用了“WXS”來稱呼它,用戶社區的另一部分人采用“XSD”(XMLSchemaDefinition首字母縮略字)來稱呼它。W3C發布的1.1标準采用了“XSD”作為官方稱呼。

曆史

在官方文檔的參考附錄裡,XSD标準承認受到[文件類型描述|DTD]]和其他早期XML schema語言的影響,如DDML、SOX、XML-Data、以及XDR。XSD從中吸收了一些特性,然而也在這些特性中有所折衷。這些早期schema語言中的XDR與SOX在XML Schema發布後仍繼續使用了一段時間。不少微軟的産品支持XDR直到2006年十二月MSXML6.0的發布(MSXML6.0抛棄了XDR改用XSD)。Commerce One,Inc支持它自己的SOX schema語言直到該公司于2004年末破産。2004年十二月,Novell,Inc.購買了該公司,包括那些與SOX相關的專利,據報導是盡力防止被某些不相關的、以打專利相關官司為生的公司剝削圖利。

著名的XSD建議的内容但在XML自己的DTD中不可用的特性是名字空間感知(namespace awareness)與數據類型。

2012年4月,XSD1.1成為W3C推薦标準。April 2012

Schema與其文檔

技術上說schema是元數據的一個抽象集合,包含一套schema component:主要是元素與屬性的聲明、複雜與簡單數據類型的定義。這些schema component通常是在處理一批schema document時被創建。schema文檔包含着schema component的源語言定義。在日常使用中,一個schema文檔常被稱作一個schema。

Schema文檔通過名字空間組織起來:所有的被命名的schema component屬于一個目标名字空間;這個目标名字空間是schema文檔作為整體的一個屬性。schema文檔可以包含進來(include)使用同一名字空間的其它schema文檔,也可以導入(import)使用不同名字空間的schema文檔。

當一個實例文檔針對一個schema來驗證有效性時(這一過程稱為assessment),用來驗證有效性的schema可以作為參數提供過驗證器,也可以在實例文檔中作為兩種特殊屬性之一直接提供:

xsi:schemaLocation

xsi:noNamespaceSchemaLocation.這種機制要求客戶啟動驗證以充分相信這個文檔,知道文檔對正确的schema是有效的。

"xsi"是名字空間"http://www.w3.org/2001/XMLSchema-instance"的傳統前綴。

XML Schema Documents通常有文件擴展名".xsd".XSD還沒有專門的互聯網媒體類型,因此按照RFC3023使用"application/xml"或"text/xml".

Schema component

主要的schema component有:

元素聲明(Element declaration),定義了元素的性質。包括:元素名字、目标名字空間;一個非常重要的性質是元素的類型,它限制了元素包含哪些屬性與子元素。在XSD1.1标準中,可以根據屬性的值來有條件定義元素類型。一個元素可以屬于一個替換群(substitution group),如果元素E在元素H的替換群中,那麼schema許可H出現的地方E都可以出現。元素可以有完整性(integrity)約束:唯一性(uniqueness)約束确定特定值在該元素為根的子樹中是獨一無二的;引用(referential)約束确定值必須匹配一些其它元素的标識符。元素聲明可以是全局的或局部的,允許同一個名字被用于一個實例文檔的不同部分的不相關的元素。屬性聲明(Attribute declaration),定義了屬性的性質。包括:屬性名字、目标名字空間,屬性類型限制了屬性可以取哪些值,也可以指出屬性的缺省值或固定值(fixed value,即屬性隻能取這個值)。簡單與複雜數據類型(Simple and complex type).詳見下節模型群(model group)與屬性群(attribute group)定義。這實際上是宏(macro):被命名的元素的群與屬性的群,可在許多數據類型定義中被重用。屬性使用(attribute use)表示複雜數據類型與屬性聲明的關系,指出屬性是必需的還是可選的,在什麼時候使用這種數據類型。元素粒子(element particle)類似于表示複雜類型與元素的關系,指出元素在上下文中出現的最大與最小次數。類似于元素粒子,内容模型可以包括模型群粒子,在語法上相當于非終結符:定義了允許的元素序列的選擇與重複的單位。此外,通配符粒子表示了一套元素或元素序列。

其它更專門的schema component包括annotations,assertions,notations,以及包含了schema整體信息的schema component.

數據類型

簡單數據類型(simple type)包含了可以出現在元素或屬性的文本值。這是XSD與DTD的最大區别。

XSD提供了一套19個基本數據類型:

anyURIbase64BinarybooleandatedateTimedecimaldoubledurationfloathexBinarygDaygMonthgMonthDaygYeargYearMonthNOTATIONQNamestringtime).

可以從這些基本數據類型通過三種機制構建三種數據類型:

restriction(減少值集的範圍),list(允許一個值的序列),union(允許從幾個數據類型中選擇值).

XSD規範定義了25個導出數據類型。用戶可以在schema中進一步定義自己的導出類型。

Restriction機制包括指出最大最小值、正則表達式、限制字符串的長度、限制十進制數的位數等。XSD1.1又增加了assertions,即通過一個[XPath2.0]]表達式給出任意約束的能力。

複雜數據類型描述了一個元素的許可内容。包括這個元素、屬性、子元素的許可内容。複雜類型定義由一套屬性使用與一個内容模型組成。内容模型可以是:

隻有元素的内容(element-only content),不允許有文本(但可以有空白符或者子元素可以有文本);簡單内容(simple content), 許有文本,不允許有子元素;空内容(empty content),文本與子元素都不被允許;混合内容(mixed content),文本與子元素都可以有.

複雜數據類型可以從别的複雜類型導出:

restriction方法,不允許基類型允許的一些元素、屬性或者值extension方法,允許額外的屬性或元素出現。

XSD1.1又增加了assertion方法來約束複雜類型,即通過一個[XPath2.0]]表達式必須求值為真

驗證信息集

經過XML Schema為基的驗證後,可以依照驗證所隐含的數據模型來表達文檔的結構與内容。XML Schema數據模型包括:

字彙(元素與屬性名稱集)内容模型(關系與結構)數據類型

這些消息集成又叫後Schema驗證信息集(Post-Schema-Validation Infoset(PSVI))。PSVI賦予合法XML文件它的"類型"并促進以對象般處理文件,如使用面向對象程序設計(OOP)變化型般操作。

這種對XML數據訪問的特别的面向對象程序設計實現主要為微軟──對XML Schema發展的主要貢獻者──所倡導。轉換一份XML文件到自行數據類型感知對象在某些軟件設計部分相當有利。然而批評家争論這同時暗中破壞了開放性──XML的主要特征──并且它偏向于兼容原生于微軟偏好的編程語言的資源類型。

另,從XML Schema數據類型繼承出去的(以及肇因于XML Schema數據類型的)限制、這些數據類型與其他XML Schema間受限的搭配、以及在其他W3C規格裡這些數據類型的相依性,是許多XML軟件發展師的争論焦點。

XML Schema

XML Schema的主要用途是形式描述XML文檔,然而最終的schema除了簡單驗證文檔外還有許多其他用途。

代碼生成

Schema可用于生成代碼,這稱作{[tsl|en|XML Data Binding}}。這些代碼允許XML文檔的内容作為編程環境中的對象。

XML文件結構文檔的生成

Schema可用于産生人可讀的文檔來描述一個XML文件的結構。這在作者利用了标記元素(annotation element)時非常有用。

批評

雖然XML Schema獲取了廣泛的成功應用,但也受到了大量嚴厲的批評,遠超出其他W3C推薦标準。下述研究者很好地總結了這些批評:James Clark,Anders Møller與Michael Schwartzbach,Rick Jelliffe,David Webber.

一般問題

推薦标準數百頁,語句非常技術化,對于非專業的用戶來說過于複雜難讀。很多人發現W3Cs XML Schema Primer更易于理解.XSD缺少形式化數學規範,這使得關于schema的自動推理很困難,例如證明一個修改過的schema是向後兼容的。語言中有很多例外,如元素的限制(restriction)不同于屬性的限制。

表達能力的實踐限制

XSD對無序内容提供了極少支持XSD不能要求提供root element(因而要求額外的信息來驗證即使最簡單的文檔).在描述mixed content,沒有任何方式約束字符内容(甚至沒辦法指定一個有效字符集).内容與屬性聲明不能依賴于元素或屬性上下文(這也是DTD的一個大問題).不是100%自描述(上一點就是個例子),即使有這樣的初始設計需求.默認不能被獨立于聲明被指定(這使其不能給出一族schema盡在默認值上不同);元素默認隻能是字符數據(不包含markup).

技術問題

雖然從技術上遵從名字空間,但看起來并不追随名字空間的精神原則。(例如"unqualified locals").XSD1.0不提供機制,使得一個屬性的值或者存在依賴于另一個屬性的值或存在(被稱為co-occurrence constraints).XSD1.1解決了這個問題.XSD數據類型的範圍非常随意.驗證與擴增(augmentation,增加類型信息與默認值)應該保持分離。

參見

RELAX NG-另一種XML綱要語言(ISO國際标準)通常用在XML Schema數據類型上XML信息集

相關詞條

相關搜索

其它詞條