第 4 章 DTD文件的建立
XML文件的驗證 XML文件的兩大原則 - 符合規格(well-formed)、可驗證(valid) 符合規格:意即XML文件內容,符合W3C的XML文件標準,這也就是第2章的主要內容。 可驗證:符合結構要求的文件稱為可驗證,亦可稱為正確合法的XML文件。 這些XML文件將被規範必須存在哪些元素,元素又由哪些元素所排列、組合而成,以及組成元素的個數…等。
XML文件的驗證 所謂XML文件的結構,包含了以下幾個重點: 元素的名稱 各元素的排列順序 元素必須包含或可包含的子元素 描述元素的屬性與屬性值 元素的個數 元素的資料類型
XML文件的驗證 目前建立驗證文件的方式有兩種: DTD(Document Type Definition,譯為文件類型宣告) XML Schema
XML文件的驗證 對於驗證文件置於XML文件內的驗證文件,稱之為內部驗證文件。 若驗證文件獨立於XML文件,則稱之為外部驗證文件。 對於一份附帶有以DTD或XML Schema所撰寫之驗證文件,且文件本身符合驗證規則的XML文件,稱之為Validated XML文件(可驗證的XML文件)。
DTD的基本觀念 - DTD文件的架構 文件的第3列至第12列,為驗證XML文件的DTD文件 第15列至第30列,為XML文件的內容。
DTD的基本觀念 - DTD文件的架構 驗證XML文件的DTD文件,定義語法為: <!DOCTYPE 文件元素名稱 [ DTD規則 …… ]>
DTD的基本觀念 - 執行文件的驗證 下載驗證工具的網址為『http://www.microsoft.com/ downloads/details.aspx?FamilyId=D23C1D2C-1571-4D61-BDA8-ADF9F6849DF9&displaylang=en』。
DTD的基本觀念 - 執行文件的驗證
DTD的基本觀念 - 執行文件的驗證
DTD的基本觀念 - 外部、內部DTD文件 外部DTD文件的第1列與一般XML文件一樣,但必須加上如下所述的XML文件宣告。 <?xml version="版本" encoding="編碼方式" standalone="是否為獨立文件"?> 在XML文件內,則透過以下的語法宣告,引用外部DTD文件。 <!DOCTYPE 文件元素名稱 SYSTEM | PUBLIC "外部DTD文件的URI">
DTD的基本觀念 - 外部、內部DTD文件 以下章節將以bookdtd.dtd說明DTD的宣告語法。 以下為bookch4.xml,在第3列將運用『<!DOCTYPE…>』引用外部DTD文件。
元素宣告 - 元素宣告的基本語法 定義XML文件內的元素時,需使用ELEMENET標籤,語法如下: <!ELEMENT 元素名稱 內容模型>
元素宣告 - 一般元素的宣告 運用ELEMENT標籤宣告一般元素的語法時,將以括號『( )』標示元素的內容模型宣告。 語法如下:
元素宣告 - 一般元素的宣告 文字元素的宣告:若元素內容僅包含需解析文字,宣告內容模型時,僅需使用#PCDATA關鍵字即可。以下敘述將宣告title元素,為僅含解析文字的文字元素。
元素宣告 - 一般元素的宣告 巢狀元素的宣告:透過DTD宣告包含子元素的巢狀元素時,可以透過結構符號定義所包含子元素的排列順序及個數。以下為宣告巢狀元素時,可用於建立內容模型的結構符號。
元素宣告 - 一般元素的宣告 空元素:在DTD的元素定義中,宣告空元素時,需使用EMPTY關鍵字。 <!ELEMENT 元素名稱 EMPTY> 以下敘述將宣告major_in元素,是一個空元素。 <!ELEMENT major_in EMPTY>
元素宣告 - 一般元素的宣告 不限制內容的元素:對於一些結構複雜找不到規則的元素,則僅能以ANY關鍵字,宣告不限制該元素的內容。語法如下: <!ELEMENT 元素名稱 ANY> 所謂的不限制內容,包含以下3種含意: 該元素可包含任何在DTD文件中,宣告的元素。 元素所包含的子元素,其出現順序、次數均不受限制 元素中可出現需解析文字(#PCDATA),且可與子元素交錯出現
實體的宣告 - 什麼是實體 所謂的實體(Entity)就是事先完成宣告或定義的資料,在XML文件中,可以透過引用的方式,將實體所代表的資料插入文件內文。
實體的宣告 - 內部實體與外部實體 XML文件宣告的實體,被稱為內部實體,宣告語法如下: <!ENTITY 實體名稱 實體內容> 以下敘述將定義publisher實體的內容為『文魁資訊』。 XML文件內引用實體的語法如下: &實體名稱; 以下敘述將在publish_by元素內,引用publisher實體。
實體的宣告 - 內部實體與外部實體 外部實體:將內容儲存在XML文件之外其他檔案的實體,稱之為外部實體。 <!ENTITY 實體名稱 SYSTEM|PUBLIC 實體檔案的URI>
實體的宣告 - 內部實體與外部實體 外部實體:將內容儲存在XML文件之外其他檔案的實體,稱之為外部實體。 <!ENTITY 實體名稱 SYSTEM|PUBLIC 實體檔案的URI> 在XML文件內引用外部實體的語法,與內部實體並無不同,如下述: &實體名稱;
實體的宣告 - 內部實體與外部實體 以下敘述將宣告e_mail實體,引用儲存於kings.txt檔的實體內容。
實體的宣告 - 可解析實體與不可解析實體 依照實體的儲存位置,將實體區分為內部實體與外部實體。 依照實體的內容是否可被剖析器解析,則可分為可解析(parsed)實體與不可解析(unparsed)實體。 XML剖析器無法解析不可解析實體,定義時,必須運用NOTATION標籤,宣告可解讀該檔案的應用程式。語法如下: <!NOTATION 格式 SYSTEM|PUBLIC 應用程式的URI> <!ENTITY 實體名稱 SYSTEM|PUBLIC 檔案的URI 格式>
實體的宣告 - 可解析實體與不可解析實體 以下敘述將定義A2002P_outline為不可解析實體,引用之檔案的名稱為A2002P.doc,檔案類型為doc,編輯檔案的應用程式,其位置與名稱為“C:\Program Files\Microsoft Office\Office\WinWord.exe”。
實體的宣告 - 參數型實體參考 參數實體參考的宣告與使用均限於外部DTD,在使用上,除與一般實體參考相同地,可用於其他實體的宣告外,還可用於元素的宣告。 參數實體參考的宣告語法與一般實體參考相同,僅增加『%』符號,語法如下: <!ENTITY % 實體名稱 實體內容>
實體的宣告 - 參數型實體參考 參數實體參考的宣告與使用均限於外部DTD,在使用上,除與一般實體參考相同地,可用於其他實體的宣告外,還可用於元素的宣告。 參數實體參考的宣告語法與一般實體參考相同,僅增加『%』符號,語法如下: <!ENTITY % 實體名稱 實體內容> 以下敘述將宣告TEXT為代替『(#PCDATA)』的參數型實體參考,並運用於元素型態的宣告。
屬性宣告 - 屬性宣告的語法 對於元素的屬性,DTD的宣告語法如下: <!ATTLIST 元素名稱 屬性名稱 屬性值型態 內定值>
屬性宣告 - 屬性值型態 列舉: 以列舉方式設定屬性的設定值時,將限定屬性可設定的值。設定語法如下: (屬性值1, 屬性值2, …) 以下敘述將定義book元素的sale屬性值,可被設定為『Y』、『N』。
屬性宣告 - 屬性值型態 CDATA: CDATA的原文為Character Data,也就是一般文字的意思。以下敘述將宣告book元素publisher屬性,其屬性值的型態為CDATA。
屬性宣告 - 屬性值型態 或者在編號前加上英文,如下述的id屬性。 ID:代表此屬性值在XML文件內的每個設定值,都必須為不可重複的唯一值。以下敘述將宣告book元素isbn屬性的型態為ID。 由於ID類型的屬性值,必須符合XML名稱(XML name,2-1-3節)的要求,屬性值的第1個字元,不可以是數字。故設定此類屬性值時,變通的方法是在編號前加上底線『_』,如下述的isbn屬性。 或者在編號前加上英文,如下述的id屬性。
屬性宣告 - 屬性值型態 IDRF: IDRF的意義為ID Reference(參考至ID類型的資料),屬性值類型為IDRF的屬性,將參照到同一份XML文件內,屬性值型態為ID之其他屬性。以下敘述將定義publish_by元素pid屬性之屬性值為IDRF。
屬性宣告 - 屬性值型態 IDRFS: 屬性值類型IDRFS的屬性,將參考至XML文件內,數個屬性值類型為ID的屬性。設定時,所參照的屬性值將以空白隔開。以下敘述將定義book元素author屬性的資料類型為IDRFS。
屬性宣告 - 屬性值型態 NMTOKEN、NMTOKENS: 屬性值型態符合XML名稱記號(XML name token)規則的屬性,宣告時,必須使用NMTOKEN宣告。若屬性值為數個以空白隔開的NMTOKEN,則型態需宣告為NMTOKENS。所謂符合XML名稱記號要求的字串,其內容將由『英文字母』、『數字』、『-』、『_』、『.』與『:』組成。 以下敘述將宣告屬性型態為NMTOKEN。 以下敘述則宣告屬性型態為NMTOKENS。
屬性宣告 - 屬性值型態 NOTATION: 4-4-3節介紹了如何定義剖析器無法剖析的資料,並利用NOTATION標籤,定義資料的格式類型與可讀取資料的應用軟體。若屬性值的內容為利用NOTATION宣告的資料類型時,需將型態宣告為NOTATION。 以下敘述將定義outline元素application屬性的型態為NOTATION。
屬性宣告 - 屬性值型態 ENTITY、ENTITIES: 屬性值類型為ENTITY的屬性,其屬性值將為DTD所定義的實體。若類型為ENTITIES,則屬性值將參考至數個實體,每個實體將以空白隔開。在XML標準中,宣告此類型的屬性,必須使用ENTITY與ENTITIES。 以下敘述,將宣告author元素name屬性的類型為ENTITY。 以下敘述將宣告publisher元素service屬性的類型為ENTITIES。
屬性宣告 - 屬性的內定值 特定值: 若屬性的預設值為某特定值時,只要在宣告屬性時,在屬性的型態後,運用引號(“)標示預設值即可。當元素未設定此值時,剖析器將自動填上此屬性值。 以下敘述將設定author元素name屬性的預設值為『郭尚君』。 以下敘述則設定book元素sale屬性的值,將為『Y』或『N』,預設值為『Y』。
屬性宣告 - 屬性的內定值 #FIXED: 定義屬性必須設定,且為固定值。設定時,需在屬性值型態後,使用『#FIXED』關鍵字,並運用引號(")標示固定值,語法如下: <!ATTLIST 元素名稱 屬性名稱 屬性值型態 #FIXED 固定值> 以下敘述,將定義author元素penname屬性的值為固定值 – 位元文化。
屬性宣告 - 屬性的內定值 #IMPLIED: 不強制屬性是否被設定,欲宣告此型態屬性時,請運用『#IMPLIED』關鍵字。 以下敘述,將定義author元素的E-Mail屬性可設定,也可不設定。
屬性宣告 - 屬性的內定值 #REQUIRED: 設定屬性必須設定值,若未設定將產生錯誤。設定時,僅需在屬性型態的宣告後,運用『#REQUIRED』關鍵字。 以下敘述,將定義publisher元素的name屬性一定要設定。
屬性宣告 - 內定屬性 xml:lang: xmk:lang屬性用於標示該元素內容所採用的語言。透過xml:lang,應用軟體可以得知元素所採用的語言,協助應用軟體處理元素內容,如:在XML文件搜尋英文字串時,便可略過內容為中文的元素。 相信有不少人看到xml:lang會聯想到XML文件宣告的encoding屬性。encoding屬性用於指定XML文件使用的編碼系統,這可不代表文件內容使用的語言。 在DTD文件內定義元素xml:lang屬性時,屬性值型態一般設定為NMTOKEN,語法如下: <!ATTLIST 元素名稱 xml:lang NMTOKEN 內定值>
屬性宣告 - 內定屬性 以下敘述將宣告xml:lang屬性的型態為NMTOKEN,預設值為華語(zh)。
屬性宣告 - 內定屬性 xml:space: xml:space屬性用於定義應用程式如何處理空白字元,處理方式有兩種: 一為以剖析器的預設方式處理,屬性設定值為default。 二為將空白字元保留,交給應用程式處理,屬性設定值為preserve。