DTD約束的方式,DTD約束方式

來源:互聯網
上載者:User

DTD約束的方式,DTD約束方式

xml檔案使用DOCTYPE聲明語句來指明它所遵循的DTD檔案,DOCTYPE
聲明語句有兩中形式:
當引用的檔案在本地時:採用如下方式8:

1.<!DOCTYPE 根節點 SYSTEM "DTD檔案的URL">
例如:<DOCTYPE 書架 SYSTEM "book.dtd">

2.當引用的檔案是一個公用的檔案時:採用如下的方式:
<!DOCTYPE 文檔根節點 PUBLIC "DTD的名稱" "DTD檔案的URL">
例如:
<!DOCTYPE web-app PUBLIC "..." "...">
--------------------------------------------------------------------------------------------------

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:
屬性的類型可以是一組取值的列表,在xml檔案中設定的屬性值只能是這個列表中的某值枚舉(
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 購物籃[
<!ELEMENT 肉 EMPTY>
<!ATTLIST 肉 品種(雞肉|牛肉|豬肉|龜肉) "雞肉">
]>
<購物籃>
<肉 品種 "龜肉"/>
<肉 品種 "牛肉"/>
<肉/>
</購物籃>


ID
表示屬性的設定值為一個唯一值
ID屬性的值只能有字母,底線開始,不能出現空白字元,必須以字母開頭

ENTITY
1.實體用於為一段內容建立一個別名,以後往xml文檔中
就可以使用別名引用這段內容了
2.在DTD定義中,一條<!ENTITY...>語句用於定義一個實體
3.實體可以分為兩種類型:參考型別和參數實體
---------------------------------------------------------------------------------------------------
實體定義:
1.引用實體:
引用實體主要在xml文檔中被應用
文法格式:
<!ENTITY 實體名稱 "實體內容">
直接轉變實體內容

引用方式:
&實體名稱
舉例:
<!ENTITY copyright "i am a programmer">
...
&copyright;
2.參數實體:
參數實體被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;>
---------------------------------------------------------------------------------------------




myeclipse 怎不提示有錯?dtd約束了 怎不管用

現在你要做驗證,我建議你用schema檔案去定義。比你這種dtd的方式更優。
它的副檔名為xsd,你可以去瞭解下這方面的知識。
因外,myeclipse這個工具,學java的都用它,因為入門簡單,老師也只會這個,但,它並不是最好的。
業界最好的IDE為IntelLij IDEA.
我和我的同事們做開發(包括java, javascript, xml等),全都用的IDEA.
 
怎讓DTD約束xml,怎可以起到約束作用

在XML中引用DTD文檔,則此XML檔案受DTD約束。例如:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 連絡人清單 SYSTEM "sample.dtd">
<連絡人清單>
...
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.