xml約束之---DTD

 xml約束  ---- DTD

 

什麼是XML約束: XML技術裏,可以編寫一個文檔來約束一個XML文檔的書寫規範,這稱之爲XML約束。

爲什麼需要XML約束?

常用的約束技術

XML DTD

XML Schema

DTD(Document TypeDefinition),全稱爲文檔類型定義。

文件清單:book.xml

<?xml version="1.0" ?>

<!DOCTYPE 書架 SYSTEM"book.dtd">

<書架>

<>

<書名>Java就業培訓教程</書名>

<作者>張孝祥</作者>

<售價>39.00</售價>

</>

<>

<書名>JavaScript網頁開發</書名>

<作者>張孝祥</作者>

<售價>28.00</售價>

</>

</書架>

文件清單:book.dtd

<!ELEMENT 書架 (+)>

<!ELEMENT (書名,作者,售價)>

<!ELEMENT 書名 (#PCDATA)>

<!ELEMENT 作者 (#PCDATA)>

<!ELEMENT 售價 (#PCDATA)>

DTD約束即可以作爲一個單獨的文件編寫,也可以在XML文件內編寫。

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

<!DOCTYPE 書架 [

<!ELEMENT 書架 (+)>

<!ELEMENT (書名,作者,售價)>

<!ELEMENT 書名 (#PCDATA)>

<!ELEMENT 作者 (#PCDATA)>

<!ELEMENT 售價 (#PCDATA)>

]>

<書架>

<>

<書名>Java就業培訓教程</書名>

<作者>張孝祥</作者>

<售價>39.00</售價>

</>

...

</書架>

XML文件使用 DOCTYPE 聲明語句來指明它所遵循的DTD文件,DOCTYPE聲明語句有兩種形式:

當引用的文件在本地時,採用如下方式:

<!DOCTYPE 文檔根結點 SYSTEM"DTD文件的URL">

例如: <!DOCTYPE 書架 SYSTEMbook.dtd>xml文件中手寫一下。

當引用的文件是一個公共的文件時,採用如下方式:   

<!DOCTYPE 文檔根結點 PUBLIC"DTD名稱" "DTD文件的URL">

例如:<!DOCTYPE web-app PUBLIC

"-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

  • 元素定義
  • 屬性定義
  • 實體定義

DTD文檔中使用ELEMENT聲明一個XML元素,語法格式如下所示:

     <!ELEMENT 元素名稱 元素類型>

元素類型可以是元素內容、或類型

如爲元素內容:則需要使用()括起來,如

<!ELEMENT 書架 (書名,作者,售價)>

<!ELEMENT 書名 (#PCDATA)>

如爲元素類型,則直接書寫,DTD規範定義瞭如下幾種類型:

EMPTY:用於定義空元素,例如<br/> <hr/>

ANY:表示元素內容爲任意類型

元素內容中可以使用如下方式,描述內容的組成關係

用逗號分隔,表示內容的出現順序必須與聲明時一致<!ELEMENT MYFILE (TITLE,AUTHOR,EMAIL)>

|分隔,表示任選其一,即多個只能出現一個

<!ELEMENT MYFILE(TITLE|AUTHOR|EMAIL)>

在元素內容中也可以使用+*?等符號表示元素出現的次數:

+: 一次或多次 (+)

        ?: 0次或一次 (?)

 *: 0次或多次  (*)

也可使用圓括號( )批量設置,例

<!ELEMENT MYFILE ((TITLE*, AUTHOR?,EMAIL)* | COMMENT)>

xml文檔中的標籤屬性需通過ATTLIST爲其設置屬性

語法格式:

<!ATTLIST 元素名

屬性名1 屬性值類型 設置說明

屬性名2 屬性值類型 設置說明

……

>

屬性聲明舉例:

<!ATTLIST 商品

類別 CDATA #REQUIRED

顏色 CDATA #IMPLIED

>

對應XML文件:

<商品 類別="服裝" 顏色="黃色"></商品>

<商品 類別="服裝"></商品>

設置說明:

#REQUIRED:必須設置該屬性

#IMPLIED:可以設置也可以不設置

#FIXED:說明該屬性的取值固定爲一個值,在 XML 文件中不能爲該屬性設置其它值。但需要爲該屬性提供這個值

直接使用默認值:在 XML 中可以設置該值也可以不設置該屬性值。若沒設置則使用默認值。 

舉例:

      <!ATTLIST 頁面作者

     姓名 CDATA #IMPLIED

     年齡 CDATA #IMPLIED

     聯繫信息 CDATA #REQUIRED

     網站職務 CDATA #FIXED "頁面作者"

     個人愛好 CDATA "上網"

      >

CDATA:表示屬性值爲普通文本字符串。

  • ENUMERATED
  • ID
  • ENTITY(實體)

屬性的類型可以是一組取值的列表,在 XML 文件中設置的屬性值只能是這個列表中的某個值(枚舉)

<?xml version = "1.0"encoding="GB2312" standalone="yes"?>

<!DOCTYPE 購物籃 [

<!ELEMENT EMPTY>

<!ATTLIST 品種 ( 雞肉 | 牛肉 | 豬肉 | 魚肉 ) "雞肉">

]>

<購物籃>

< 品種="魚肉"/>

< 品種="牛肉"/>

</>

</購物籃>

表示屬性的設置值爲一個唯一值

ID 屬性的值只能由字母,下劃線開始,不能出現空白字符

<?xml version = "1.0"encoding="GB2312" ?>

<!DOCTYPE 聯繫人列表[

<!ELEMENT 聯繫人列表 ANY>

<!ELEMENT 聯繫人(姓名,EMAIL)>

<!ELEMENT 姓名(#PCDATA)>

<!ELEMENT EMAIL(#PCDATA)>

<!ATTLIST 聯繫人 編號 ID #REQUIRED>

]>

<聯繫人列表>

<聯繫人 編號="1">

<姓名>張三</姓名>

<EMAIL>[email protected]</EMAIL>

    </聯繫人>

<聯繫人 編號="2">

<姓名>李四</姓名>

<EMAIL>[email protected]</EMAIL>

</聯繫人>

</聯繫人列表>

 

 

實體用於爲一段內容創建一個別名,以後在XML文檔中就可以使用別名引用這段內容了。

DTD定義中,一條<!ENTITY …>語句用於定義一個實體。實體可分爲兩種類型:引用實體和參數實體。

引用實體主要在 XML 文檔中被應用

語法格式:

<!ENTITY 實體名稱 “實體內容” >:直接轉變成實體內容

引用方式:

&實體名稱;

舉例:

<!ENTITY copyright I am aprogrammer">

 ……

 &copyright; <--引用的方式-->

參數實體被 DTD 文件自身使用

語法格式:

  <!ENTITY % 實體名稱 "實體內容" >

引用方式:

%實體名稱;

舉例1

 <!ENTITY % TAG_NAMES "姓名 | EMAIL | 電話 | 地址">

   <!ELEMENT 個人信息 (%TAG_NAMES; | 生日)>

 <!ELEMENT 客戶信息 (%TAG_NAMES; | 公司名)>

舉例2

<!ENTITY % common.attributes

 " id ID #IMPLIED

account CDATA #REQUIRED "

>

...

<!ATTLIST purchaseOrder%common.attributes;>

<!ATTLIST item%common.attributes;>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章