XML簡明教程(三)

來源:互聯網
上載者:User
 
三、 CHEMA簡介
   (一) Schema的引入

    通過上幾章介紹,相信大家對XML的基本文法已經有了一個基本瞭解。 XML本身的文法很嚴謹,也就是要求格式必須嚴整,包

括區分大小寫、整個文檔有且只有一個根、需要序言等等。在符合格式化良好的要求以後,就可以寫出規則整齊、可以通過內建XML解

析器的瀏覽器解析XML文檔了。但XML本身也相當的靈活,在符合基本文法的前提下,可以任意的編寫各種符合XML文法要求的文檔,這

也正是XML可擴充的靈活性所在,但同時也產生了問題,比如要寫一個說明個人資訊的XML文檔,可以這樣寫:

  <?xml version = “1.0” encoding=”GB2312” ?>

  <resume>

   <name>張立東</name>

   <sex>男</sex>

   <age>28</age>

   <birthday>1974-8-10</birthday>

   <address>北京市 海澱區</address>

  </resume>

   也可以這麼寫:

  <?xml version = “1.0” encoding=”GB2312”?>

   <resume>

   <name>張立東</name>

   <sex>男</sex>

   <age>28</age>

   <birthday>

   <year>1974</year>

   <month>8</month>

   <day>10</day>

   </birthday>

   <address>北京市 海澱區</address>

  </resume>

   上面的兩個文檔對於人來說是很容易看懂的,但對於機器來說,它們就無法判斷

  <birthday>1974-8-10</birthday>和

   <birthday>

   <year>1974</year>

   <month>8</month>

   <day>10</day>

   </birthday>

  中的內容是否相同了。這就需要一個相應的“約束”,來規定一個固定的格式,這樣機器才可以正確的識別、比較和處理。正如

沒有規矩難以成方圓一樣, XML這麼強大的語言自然也有這方面的考慮,這也就是DTD和Schema所要完成的功能。

   (二)DTD和Schema

    提到Schema就必須提到DTD。最早建立對SGML約束的是DTD,而XML又是SGML的超集,所以DTD由於曆史的原因也可以對XML本身

進行約束,比如:每個節點可以含有的元素、元素的個數等等。但它也有很多的局限性,如不能定義元素值的範圍、學習起來有一定

的難度(要學習一種新的文法)等等。而最新的XML約束標準就可以輕鬆的滿足要求,這就是Schema。Schema與DTD不同,DTD本身有自

己的文法和要求,而Schema是完全符合XML文法的,只要對XML有初步的瞭解,就很容易對Schema上手。說了這麼多,還是首先讓我們

通過一個例子來看看Schema是如何定義XML結構的吧:

  [1]<?xml version="1.0" encoding="GB2312" ?>

  [2]<Schema xmlns="urn:schemas-microsoft-com:xml-data"

  [3] xmlns:dt="urn:schemas-microsoft-com:datatypes">

  [4] <ElementType name= "name"/>

  [5] <ElementType name= "sex"/>

  [6] <ElementType name= "age"/>

  [7]

  [8] <ElementType name= "address" />

  [9] <ElementType name= "month"/>

  [10] <ElementType name= "year"/>

  [11] <ElementType name= "day"/>

  [12] <ElementType name= "birthday" content="eltOnly">

  [13] <element type= "year" />

  [14] <element type= "month" />

  [15] <element type= "day" />

  [16] </ElementType>

  [17] <ElementType name= "resume" content="eltOnly">

  [18] <element type= "name" />

  [19] <element type="sex"/>

  [20] <element type="age"/>

  [21] <element type="birthday"/>

  [22] <element type="address"/>

  [23] </ElementType>

  [24]</Schema>

   下面對上面的例子做一個簡單的講解:

   [1]行是一個XML序言,從這行也可以看出Schema是符合XML基本文法要求的。

   [2]-[3]是對Schema名域的一個定義。(由於我們這裡是一個XML的入門文章,有關XML的名域問題可以參考相應的XML文檔。)

   [4]定義一個名字為name的元素。

   [5]-[11]分別是對sex、age、address、month、year、day元素的定義。

   [12]-[16]是對birthday元素的一個定義,但birthday這個元素比較特殊,它其中又包含了year、month和day三個元素。

其中content這個屬性是對元素中的資料進行說明的。根據content中的資料eltOnly可以知道這個birthday元素的資料只能夠由元素構

成。

   [17]-[23]是對resume這個元素的定義,resume這個元素是由name、sex、age、birthday、address這幾個元素構成的。

   從上面的例子可以知道如何對一個簡單的元素進行定義,也可以知道一個由其他元素組成的元素如何定義。通過由元素組成的元

素的這種定義,就可以定義一個嵌套結構的XML樹的基本結構。

    到這裡讀者對Schema已經就有了一個基本的瞭解,也該是我們給Schame下一個簡單定義的時候了:

    XML Schema是用來描述XML元素和屬性的。它包括屬性和元素類型說明,是可以為XML元素和屬性提供資料的類型校正模組。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.