像全部XML Schema 語言同樣,XSD用來描述一組規則──一個XML文件必須遵照這些規則,才能根據該schema‘合法(Valid)’。php
然而,與其餘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」(XML Schema Definition首字母縮略字)來稱呼它。W3C發佈的1.1標準採用了「XSD」做爲官方稱呼。app
在官方文檔的參考附錄裏,XSD標準認可受到[文件類型描述|DTD]]和其餘早期XML schema 語言的影響,如DDML、SOX、XML-Data、以及XDR。XSD從中吸取了一些特性,然而也在這些特性中有所折衷。這些早期schema 語言中的XDR與SOX在XML Schema發佈後仍繼續使用了一段時間。很多微軟的產品支持XDR直到2006年十二月MSXML 6.0的發佈(MSXML 6.0拋棄了XDR改用XSD)[1] 。Commerce One, Inc支持它本身的SOX schema 語言直到該公司於2004年底破產。2004年十二月,Novell, Inc.購買了該公司,包括那些與SOX相關的專利,據報導是盡力防止被某些不相關的、以打專利相關官司爲生的公司剝削圖利[2] 。ide
著名的XSD建議的內容但在XML本身的DTD中不可用的特性是名字空間感知(namespace awareness)與數據類型。spa
2012年4月, XSD 1.1成爲W3C推薦標準。April 2012設計
技術上說schema是元數據的一個抽象集合,包含一套schema component: 主要是元素與屬性的聲明、複雜與簡單數據類型的定義。這些schema component一般是在處理一批schema document時被建立。schema文檔包含着schema component的源語言定義。在平常使用中,一個schema文檔常被稱做一個schema。rest
Schema文檔經過名字空間組織起來:全部的被命名的schema component屬於一個目標名字空間;這個目標名字空間是schema文檔做爲總體的一個屬性。schema文檔能夠包含進來(include)使用同一名字空間的其它schema文檔,也能夠導入(import)使用不一樣名字空間的schema文檔。code
當一個實例文檔針對一個schema來驗證有效性時(這一過程稱爲assessment),用來驗證有效性的schema能夠做爲參數提供給驗證器,也能夠在實例文檔中做爲兩種特殊屬性之一直接提供:component
xsi:schemaLocation
xsi:noNamespaceSchemaLocation
.這種機制要求客戶啓動驗證以充分相信這個文檔,知道文檔對正確的schema是有效的。"xsi"是名字空間"http://www.w3.org/2001/XMLSchema-instance"的傳統前綴。
XML Schema Documents一般有文件擴展名".xsd". XSD尚未專門的互聯網媒體類型,所以按照 RFC 3023使用"application/xml"或"text/xml" .
主要的schema component有:
其它更專門的schema component包括annotations, assertions, notations, 以及包含了schema總體信息的schema component.
簡單數據類型(simple type)包含了能夠出如今元素或屬性的文本值。這是XSD與DTD的最大區別。
XSD提供了一套19個基本數據類型:
anyURI
base64Binary
boolean
date
dateTime
decimal
double
duration
float
hexBinary
gDay
gMonth
gMonthDay
gYear
gYearMonth
NOTATION
QName
string
time
).能夠從這些基本數據類型經過三種機制構建三種數據類型:
XSD規範定義了25個導出數據類型。用戶能夠在schema中進一步定義本身的導出類型。
Restriction機制包括指出最大最小值、正則表達式、限制字符串的長度、限制十進制數的位數等。XSD 1.1又增長了assertions, 即經過一個[XPath 2.0]]表達式給出任意約束的能力。
複雜數據類型描述了一個元素的許可內容。包括這個元素、屬性、子元素的許可內容。複雜類型定義由一套屬性使用與一個內容模型組成。內容模型能夠是:
複雜數據類型能夠從別的複雜類型導出:
XSD 1.1又增長了assertion方法來約束複雜類型, 即經過一個[XPath 2.0]]表達式必須求值爲真
基於 Schema 的驗證完成後,能夠按照 Schema 所隱含的數據模型來表達文檔的結構與內容。XML Schema 數據模型包括:
這些信息的集合即爲 Schema 既驗信息集(Post-Schema-Validation Infoset (PSVI))。對於有效的 XML,PSVI 給它賦以特定的「類型」,從而便於以對象方式來處理整個文檔,並應用面向對象程序設計(OOP)範式。
XML Schema的主要用途是形式描述XML文檔,然而最終的schema除了簡單驗證文檔外還有許多其餘用途。
Schema可用於生成代碼,這稱做{[tsl|en|XML Data Binding}}。這些代碼容許XML文檔的內容做爲編程環境中的對象。
Schema可用於產生人可讀的文檔來描述一個XML文件的結構。這在做者利用了標記元素(annotation element)時很是有用。
雖然XML Schema獲取了普遍的成功應用,但也受到了大量嚴厲的批評,遠超出其餘W3C推薦標準。下述研究者很好地總結了這些批評:James Clark,[1] Anders Møller與Michael Schwartzbach,[2] Rick Jelliffe[3],David Webber.[4]
通常問題:
表達能力的實踐限制:
技術問題:
一個Schema的簡易示例,描述某個指定的國家,是這樣的:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="country" type="Country"> <xs:complexType name="Country"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="population" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
一份聽從這個視圖的XML文件:
<country xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="country.xsd"> <name>France</name> <population>59.7</population> </country>