iT邦幫忙

DAY 17
7

XML系列 第 17

[XML]17-驗證之DTD

  • 分享至 

  • xImage
  •  

本篇的主題是要介紹驗證之DTD。
DTD 是 Data Type Definition 的縮寫,是 XML 界比較早期用來驗證資料格式正確性的做法(現在比較多使用的是 xsd,下一篇會提到),簡單說就是一套用來描述一份 XML 文件格式的語言,再一次,跟 XSL 一樣,一份 DTD 的型式,就是一份XML,大概長得像這樣。

這是用來描述下面這個XML的結構

接著大略說明 DTD 的內容

<?xml version="1.0" encoding="UTF-8"?>
<!--DTD generated by XML Spy v4.4 U (http://www.xmlspy.com)-->
<!ELEMENT ipo:purchaseOrder (shipTo, billTo, Items)>
<!ATTLIST ipo:purchaseOrder
	xmlns:xsi CDATA #REQUIRED
	xmlns:ipo CDATA #REQUIRED
	orderDate CDATA #REQUIRED
	xsi:schemaLocation CDATA #REQUIRED
>
<!ELEMENT shipTo (name, street, city, postcode)>
<!ATTLIST shipTo
	export-code CDATA #REQUIRED
	xsi:type CDATA #REQUIRED
>

<!ELEMENT billTo (name, street, city, state, zip)>
<!ATTLIST billTo
	xsi:type CDATA #REQUIRED
>

<!ELEMENT Items (item+)>

<!ELEMENT item (productName, quantity, price, ipo:comment?, shipDate)>
<!ATTLIST item
	partNum CDATA #REQUIRED
>

<!ELEMENT name (#PCDATA)>
<!ELEMENT street (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT postcode (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!ELEMENT zip (#PCDATA)>
<!ELEMENT productName (#PCDATA)>
<!ELEMENT quantity (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT ipo:comment (#PCDATA)>
<!ELEMENT shipDate (#PCDATA)>

首先可以注意到的,就是 DTD「扁平化」的結構,由於 XML 不像一般 Row/Column的型式,所以為了要能以最簡單易懂的方式來描述,就採用了這種扁平化的結構。

所謂扁平化就是將整份文件結構切分成許多個小單位,然後再加以描述(註1)。而針對每個小單位,只描述三種可能的資訊:自己包含的欄位資料、自己包含的屬性資料以及在自己下一層有那些小單位(註2)。

Line 3:最外層的 ipo:purchaseOrder,裡面包含三個部份,分別是shipTo, billTo, Items
Line 4-9:描述 ipo:purchaseOrder包含那些屬性
Line 10:描述 shipTo,裡面包含四個欄位資料,分別是 name, street, city, postcode
Line 11-14:描述 shipTo 包含那些屬性
Line 16:描述 billTo,裡面包含五個欄位資料,分別是name, street, city, state, zip
Line 17-19:描述 billTo 包含那些屬性
Line 21:描述 Items 包含一個部份,是 item,那個 + 號表示可以出現多次
Line 23:描述 item,裡面包含五個欄位資料,分別是 productName, quantity, price, ipo:comment?, shipDate,其中那個 ? 號表示該欄位為optional使用
Line 24-26:描述 item 包含那些屬性
Line 28-38:定義所有欄位的屬性,其中 #PCDATA 是 XML 常用的資料型態

註1:這種觀念很重要,下一章節的 xsd 也是相同的概念及做法
註2:真的想要了解這種觀念,這裡有個小題目考考你,就是如何「只用一個資料表來儲存一家公司內所有主管與部屬的從屬關係」

本系列文章列表
Next : [XML]18-驗證之Schema


上一篇
[XML]16-驗證
下一篇
[XML]18-驗證之Schema
系列文
XML30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
chiounan
iT邦研究生 1 級 ‧ 2011-10-14 09:49:25

沙發
期待下一篇

0
鐵殼心
iT邦高手 1 級 ‧ 2011-10-14 09:54:32

一直以為DTD是Disk To Disk的縮寫疑惑

還可以是 Door To Door 哦
醉

總裁 iT邦好手 1 級 ‧ 2011-10-14 10:44:14 檢舉

會甚麼不是DOLLAR to DOOR...喜歡

我要留言

立即登入留言