天天看點

xml schema

XML Schema入門

XML Schema 也是一種用于定義和描述 XML 文檔結構與内容的模式語言,其出現是為了克服 DTD 的局限性

XML Schema VS DTD:

XML Schema符合XML文法結構。 

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

XML Schema對名稱空間支援得非常好。 

XML Schema比XML DTD支援更多的資料類型,并支援使用者自定義新的資料類型。 

XML Schema定義限制的能力非常強大,可以對XML執行個體文檔作出細緻的語義限制。

XML Schema不能像DTD一樣定義實體,比DTD更複雜,但Xml Schema現在已是w3c組織的标準,它正逐漸取代DTD。

Schema限制快速入門:

XML Schema 檔案自身就是一個XML檔案,但它的擴充名通常為.xsd。

一個XML Schema文檔通常稱之為模式文檔(限制文檔),遵循這個文檔書寫的xml檔案稱之為執行個體文檔。

和XML檔案一樣,一個XML Schema文檔也必須有一個根結點,但這個根結點的名稱為Schema。

編寫了一個XML Schema限制文檔後,通常需要把這個檔案中聲明的元素綁定到一個URI位址上,在XML Schema技術中有一個專業術語來描述這個過程,即把XML Schema文檔聲明的元素綁定到一個名稱空間上,以後XML檔案就可以通過這個URI(即名稱空間)來告訴解析引擎,xml文檔中編寫的元素來自哪裡,被誰限制。

Schema入門案例:

book.xsd檔案

<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
					  targetNamespace="http://www. itcast.cn"
					  elementFormDefault="qualified">
	<xs:element name='書架' >
		<xs:complexType>
			<xs:sequence maxOccurs='unbounded' >
				<xs:element name='書' >
					<xs:complexType>
						<xs:sequence>
							<xs:element name='書名' type='xs:string' />
							<xs:element name='作者' type='xs:string' />
							<xs:element name='售價' type='xs:string' />
						</xs:sequence>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>
           
<?xml version="1.0" encoding="UTF-8"?>

<itcast:書架 xmlns:itcast="http://www.itcast.cn"
				xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
				xsi:schemaLocation=“http://www.itcast.cn book.xsd">

	<itcast:書>
		<itcast:書名>JavaScript網頁開發</itcast:書名>
		<itcast:作者>張孝祥</itcast:作者>
		<itcast:售價>28.00元</itcast:售價>
	</itcast:書>
</itcast:書架>
           

在XML Schema中,每個限制模式文檔都可以被賦以一個唯一的名稱空間,名稱空間用一個唯一的URI(Uniform Resource Identifier,統一資源辨別符)表示。 在Xml檔案中書寫标簽時,可以通過名稱空間聲明(xmlns),來聲明目前編寫的标簽來自哪個Schema限制文檔。如:

<itcast:書架 xmlns:itcast=“http://www.itcast.cn”>

<itcast:書>……</itcast:書>

</itcast:書架>

 此處使用itcast來指向聲明的名稱,以便于後面對名稱空間的引用。

注意:名稱空間的名字文法容易讓人混淆,盡管以 http:// 開始,那個 URL 并不指向一個包含模式定義的檔案。事實上,這個 URL:http://www.itcast.cn根本沒有指向任何檔案,隻是一個配置設定的名字。

為了在一個XML文檔中聲明它所遵循的Schema檔案的具體位置,通常需要在Xml文檔中的根結點中使用schemaLocation屬性來指定,例如:

<itcast:書架 xmlns:itcast="http://www.itcast.cn"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation=“http://www.itcast.cn book.xsd">

schemaLocation此屬性有兩個值。第一個值是需要使用的命名空間。第二個值是供命名空間使用的 XML schema 的位置,兩者之間用空格分隔。

注意,在使用schemaLocation屬性時,也需要指定該屬性來自哪裡。

使用預設名稱空間 :

基本格式:

xmlns="URI"  

舉例:

<書架 xmlns="http://www.it315.org/xmlbook/schema"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation=“http://www.itcast.cn book.xsd">
		<書>
		<書名>JavaScript網頁開發</書名>
		<作者>張孝祥</作者>
		<售價>28.00元</售價>
		</書>
	<書架>
           

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

檔案清單:xmlbook.xml

<?xml version="1.0" encoding="UTF-8"?>

<書架 xmlns="http://www.it315.org/xmlbook/schema" 
	xmlns:demo="http://www.it315.org/demo/schema"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.it315.org/xmlbook/schema 				http://www.it315.org/xmlbook.xsd 
		http://www.it315.org/demo/schema http://www.it315.org/demo.xsd">
	<書>
		<書名>JavaScript網頁開發</書名>
		<作者>張孝祥</作者>
		<售價 demo:币種=”人民币”>28.00元</售價>
	</書>
</書架>
           

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

件清單:xmlbook.xml

<?xml version="1.0" encoding="UTF-8"?>
<書架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="xmlbook.xsd">
	<書>
		<書名>JavaScript網頁開發</書名>
		<作者>張孝祥</作者>
		<售價>28.00元</售價>
	</書>
</書架>
           

在XML Schema文檔中聲明名稱空間:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

       targetNamespace="http://www. itcast.cn"

       elementFormDefault="qualified">

<xs:schema>

targetNamespace元素用于指定schema文檔中聲明的元素屬于哪個名稱空間。

elementFormDefault元素用于指定,該schema文檔中聲明的根元素及其所有子元素都屬于targetNamespace所指定的名稱空間。

具體文檔可以查詢w3c中xml schema文檔: