首頁 > 後端開發 > XML/RSS教程 > 瘋狂XML學習筆記(7)-----------XML Schema

瘋狂XML學習筆記(7)-----------XML Schema

黄舟
發布: 2017-02-21 14:34:59
原創
1445 人瀏覽過


XML Schema 是基於 XML 的 DTD 替代者。

XML Schema 可描述 XML 文件的結構。

XML Schema 語言也可作為 XSD(XML Schema Definition)來引用。

您應該具備的基礎知識

在繼續學習之前,您需要對以下的知識有基本的了解:

  • HTML / XHTML

  • XML 以及XML 命名空間

  • 對DTD 的基本了解

如果您希望首先學習這些項目,請在首頁 訪問這些教程。

什麼是 XML Schema?

XML Schema 的作用是定義 XML 文件的合法建置模組,類似 DTD。

XML Schema:

  • #定義可出現在文件中的元素

  • 定義可出現在文件中的屬性

  • #定義哪個元素是子元素

  • 定義子元素的順序

  • #定義子元素的數目

  • 定義元素是否為空,或者是否可包含文字

  • #定義元素和屬性的資料類型

  • #定義元素和屬性的預設值以及固定值

#XML Schema 是DTD 的繼任者

我們認為XML Schema 很快就會在大部分網路應用程式中取代DTD。

理由如下:

  • #XML Schema 可針對未來的需求擴充

  • XML Schema 更完善,功能更強大

  • XML Schema 基於XML 編寫

  • #XML Schema 支援資料型別

  • #XML Schema 支援命名空間

 

為什麼要使用XML Schema?

 


#XML Schema 比 DTD 更強大。

XML Schema 支援資料類型

XML Schema 最重要的能力之一就是對資料類型的支援。

透過對資料類型的支援:

  • #可更容易描述允許的文件內容

  • 可更容易驗證資料的正確性

  • #可更容易與來自資料庫的數據一併工作

  • 可更容易定義資​​料約束(data facets)

  • 可更容易定義資​​料模型(或稱為資料格式)

  • #可更容易在不同的資料型別間轉換資料

#編者註:資料約束,或稱為facets,是XML Schema 原型中的一個術語,中文可譯為“面”,用來約束資料類型的容許值。

XML Schema 使用XML 語法

#另一個關於XML Schema 的重要功能是,它們由XML 編寫。

由XML 寫XML Schema 有許多好處:

  • 都不必學習新的語言

  • 可使用XML 編輯器來編輯Schema 檔案

  • #可使用XML 解析器來解析Schema 檔案

  • 可透過XML DOM 來處理Schema

  • 可透過XSLT 來轉換Schema

#

XML Schema 可保護資料通訊

當資料從傳送者被傳送到接受方時,其要點是雙方應有關於內容的相同的「期望值」。

透過 XML Schema,傳送者可以用一種接受方能夠明白的方式來描述資料。

一種數據,如 "03-11-2004",在某些國家被解釋為11月3日,而在另一些國家為當作3月11日。

但是一個帶有資料類型的XML 元素,例如:2004-03-11,可確保對內容一致的理解,這是因為XML 的資料類型"date" 要求的格式是"YYYY-MM-DD"。

XML Schema 可擴展

#XML Schema 是可擴充的,因為它們由XML 編寫。

透過可擴展的Schema 定義,您可以:

  • #在其他Schema 中重複使用您的Schema

  • 建立由標準型別衍生而來的您自己的資料型別

  • ##在相同的文檔中引用多重的Schema

#形式良好是不夠的

我們把符合XML 語法的文檔稱為形式良好的XML 文檔,例如:

  • 它必須以XML 聲明開頭

  • 它必須擁有唯一的根元素

  • #開始標籤必須與結束標籤相符

  • 元素對大小寫敏感

  • #所有的元素都必須關閉

  • #所有的元素都必須正確地嵌套

  • #必須對特殊字元使用實體

#即使文件的形式良好,仍然不能保證它們不會包含錯誤,而這些錯誤可能會產生嚴重的後果。

請考慮以下的情況:您訂購的了 5 打雷射印表機,而不是 5 台。透過 XML Schema,大部分這樣的錯誤會被您的驗證軟體捕捉到。

 

如何使用XML Schema

## 


XML 文件可對DTD 或XML Schema 進行引用。

一個簡單的XML 文件:

請看這個名為"note.xml" 的XML 文件:

<?xml version="1.0"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don&#39;t forget the meeting!</body>
</note>
登入後複製

#DTD 檔

##下面這個範例是名為"note.dtd" 的DTD 文件,它對上面那個XML 文檔的元素進行了定義:

<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
登入後複製
第1 行定義note 元素有四個子元素:" to, from, heading, body"。

第 2-5 行定義了 to, from, heading, body 元素的型別是 "#PCDATA"。

XML Schema

#下面這個範例是一個名為"note.xsd"的XML Schema 文件,它定義了上面那個XML 文件的元素:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">

<xs:element name="note">
    <xs:complexType>
      <xs:sequence>
	<xs:element name="to" type="xs:string"/>
	<xs:element name="from" type="xs:string"/>
	<xs:element name="heading" type="xs:string"/>
	<xs:element name="body" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
</xs:element>

</xs:schema>
登入後複製
note 元素是一個複合類型,因為它包含其他的子元素。其他元素 (to, from, heading, body) 是簡易類型,因為它們沒有包含其他元素。您將在下面的章節中學習更多有關複合類型和簡易類型的知識。

DTD 的引用

#此檔案包含DTD 的引用:

<?xml version="1.0"?><!DOCTYPE note SYSTEM "http://www.w3school.com.cn/dtd/note.dtd"><note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don&#39;t forget the meeting!</body>
</note>
登入後複製

XML Schema 的參考

#此檔案包含XML Schema 的參考:

<?xml version="1.0"?>
<note
xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.w3school.com.cn note.xsd">

<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don&#39;t forget the meeting!</body>
</note>
登入後複製

 

#以上是瘋狂XML學習筆記(7)-------- ---XML Schema的內容,更多相關內容請關注PHP中文網(www.php.cn)!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板