1 / 33

單元 2-1 : XML 文件類型定義

單元 2-1 : XML 文件類型定義. 王豐緒 銘傳大學資工系. 單元目標. 能夠 理解 DTD 的相關語法與意義 能夠 運用 DTD 撰寫一份文件格式定義 能夠結合 DTD 與 XML parser , 檢驗 XML 文件的合適性. 何謂 DTD ?. 文件格式定義 ( Document Type Definition )定義 XML 文件的「 格式 」( Format), 亦即 XML 文件需要包含那些「 標記 」( tag)、「 屬性 」( attribute)、 實體 ( entities) 以及 標記之間的 結構 等等. XML 資料. 合格的 XML 文件.

Download Presentation

單元 2-1 : XML 文件類型定義

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 單元2-1:XML文件類型定義 王豐緒 銘傳大學資工系

  2. 單元目標 • 能夠理解DTD的相關語法與意義 • 能夠運用DTD撰寫一份文件格式定義 • 能夠結合DTD與XML parser,檢驗XML文件的合適性

  3. 何謂DTD? 文件格式定義(Document Type Definition)定義XML文件的「格式」(Format),亦即XML文件需要包含那些「標記」(tag)、「屬性」(attribute)、實體(entities)以及標記之間的結構等等 XML資料 合格的XML文件 XML 剖析器 有效的XML文件 DTD文件 DTD文件規範

  4. 使用DTD有什麼樣的好處 • 規範XML文件的格式 • 方便XML文件的交換與應用程式的處理 • 建立資料交換的標準 • 定義出具以下特性的文件格式規範 • 「通用性」(general) • 「完整性」(complete) • 可重複使用XML文件格式定義 • 宣告的方式 • 內部文件格式定義之宣告 • 外部文件格式定義之宣告

  5. 內部DTD文件格式定義之宣告 <!DOCTYPE 根元素名稱 [ ......... ]> • 「<!DOCTYPE」是宣告的開始。 • 「根元素名稱」放您DTD定義的根元素名稱。 • 「[」及「]」是DTD定義的開始與結束符號。 • 「.......」為您要定義的DTD。 • DOCTYPE宣告須在XML宣告之後,任何元素宣告之前 • 可以有幾個DTD宣告?

  6. 外部DTD文件格式定義之宣告 • 外部DTD宣告的語法主要區分成兩大類: • 「SYSTEM」:私有用途 • 「PUBLIC」:公開用途 <!DOCTYPE 根元素名稱 SYSTEM|PUBLIC"DTD_URI"["DTD_URL"]>

  7. 參數說明 <!DOCTYPE 根元素名稱 SYSTEM|PUBLIC [DTDName] "DTD_URL"> • <!DOCTYPE:宣告的開始 • 根元素名稱:XML文件的根元素名稱(不一定是DTD的根元素) • SYSTEM:表示此指令為「私用型」外部DTD • PUBLIC:表示為「公開型」外部DTD • DTDName:公開型DTD的名稱 • DTD_URL:用URL的方式來指定DTD檔案所在的位置 • 例子: • <!DOCTYPE Resume SYSTEM “intro.dtd”> • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

  8. DTD基本標示指令 • ELEMENT • 定義XML元素 • ATTLIST • 定義XML元素的屬性

  9. 元素的設定:ELEMENT • <!ELEMENTElement_Name(Element_Definition)> • <!ELEMENT:指名定義XML元素 • Element_Name:XML元素的名稱 • Element_DefinitionXML元素的內容 • 子元素的順序,次數,資料型態等 <A> <B>bbbbb</B> <C>ccccc</C> <D>ddddd</D> </A> <!ELEMENTA(B, C, D) > <!ELEMENTB (#PCDATA) > <!ELEMENTC (#PCDATA) > <!ELEMENTD (#PCDATA) >

  10. 在DTD中定義XML元素之類型 • 分為五種 • EMPTY元素 • 沒有文字內容或子元素, (但可以有屬性) • <!ELEMENTSomedataEMPTY> • 子元素 (sub-element) • 如 <!ELEMENTDOG(Nickname,Breeder,Birthday,HowOld,Breed)> • 文字資料 (text) • 如 <!ELEMENTNickname (#PCDATA)> • 混合(mixed) • 包含文字內容或子元素 • <!ELEMENTelement_name(#PCDATA | ..|...)*> • ANY元素 • 任何其它被宣告過的元素以及任何文字資料。 • 對於此元素之標籤不限制其次數及次序。 • <!ELEMENTSomeElmANY > #PCDATA一定要出現在第一個

  11. 宣告標記可出現的次數 • 符號 允許出現次數 • ? 零或一次 • * 大於等於零次 • + 大於等於一次 • 沒有符號 一次 <!ELEMENTA(B?, C*, D+, E) > <!ELEMENTA(B, (C, D)?, (E, F)*, (G, H)+, (I, J)) > <!ELEMENTA(B)* >

  12. 選擇區隔符號:| • 我們希望子元素有選擇空間(只能選其一)時使用 • 例:學歷有很多種可選擇<!ELEMENT教育程度(高中|大學|碩士|博士)>教育程度下只能有高中, 大學, 碩士或博士

  13. 混合型元素 • 相關選項 • 「#PCDATA」(一定要放在第一位) • 加上其它元素可以選擇 • 例:可選擇的職業<!ELEMENT 職業 (#PCDATA | 教育| 學生| 資訊相關)*>職業下可以是文字或是任何教育, 學生, 資訊相關的組合

  14. 定義XML元素的屬性(ATTLIST) • <!ATTLISTelement_nameattr_nameattr_typeattr_dafaults> • attr_defaults • #REQUIRED (此屬性為必要的, 一定要給值) • #IMPLIED (此屬性為可有可無的, 可給可不給) • #FIXEDxxxx (此屬性值是xxxx,不能改變) • xxxx (此屬性可給可不給,預設值是xxxx, 但可以改變) • attr_type • 文字型態(CDATA) • Tokenized • 列舉式型態(enumerated) 例句:<!ATTLIST飼主生日CDATA#IMPLIED>

  15. DTD提供的屬性型態 • CDATA • 屬性值的文字資料 (注意:#PCDATA只適用在指定元素的文字內容) • TOKEN型態 • ID, IDREF, IDREFS(以空白字元隔開), ENTITY(必須是外部Entity ), ENTITIES (以空白字元隔開), NMTOKEN, NMTOKENS (以空白字元隔開) • ID的值需與XML標記名稱命名規則相符 • NameToken的值與XML標記命名規則相似(無字首限制) • Enumerate型態 • (val1|val2| ... ) : 內容值只能從其中挑選一個, 也可以有Default 或 IMPLIED 值 • NOTATION(notation_name1|notation_name2| ... ): 內容值是只能從其中挑選一個notation name

  16. DTD屬性定義範例 <!ELEMENTA(…) > <!ATTLIST A id ID #REQUIRED> <!ELEMENTA(…) > <!ATTLIST A link IDREF #REQUIRED> <!ELEMENTA(…) > <!ATTLIST A name CDATA #IMPLIED> <!ELEMENTA(…) > <!ATTLIST A opt (o1 | o2 | o3) "o1">

  17. DTD中的NOTATION • 描述異於XML(文字)的資料 • 如 圖形等 • 描述資料格式項目與外部應用程式名稱 • <!NOTATION jpg SYSTEM “jpgviewer.exe” > • <!NOTATION gif SYSTEM “gifviewer.exe” > • 一個使用NOTATION屬性的例子 • <!ATTLISTImagetypeNOTATION(gif | jpg)"gif"> • <Image type="jpg" />

  18. XML實體的宣告 • 分兩類 • 「內部實體」及「外部實體」。 • 內部實體 • 以參考文字為主 • 在DTD文件中宣告:<!ENTITY指令> • 在XML文件中使用:&entity; • 外部實體 • 以參考外部檔案的實體為主 • 在DTD文件中宣告:<!ENTITYSYSTEM 指令> • 在XML文件中使用:&entity;

  19. 在DTD中宣告內部實體 <!ENTITY Entity_NameEntity_Definition> • <!ENTITY :開始實體宣告 • Entity_Name:實體名稱 • Entity_Definition:對實體內容的定義(文字) <!ENTITYMyName“Johnson">

  20. 內部實體宣告範例 <!DOCTYPE Person [ <!ENTITYMyName“Johnson"> <!ENTITYMyBirthday“04/09"> <!ELEMENT Person (Name,Birthday,spouse?,Address, TEL)> <!ELEMENT Name (#PCDATA)> <!ELEMENT Birthday (#PCDATA)> <!ELEMENT Spouse (Person)> <!ELEMENT Address (#PCDATA)> <!ELEMENT TEL (#PCDATA)> ]>

  21. 外部實體之宣告及使用 <!ENTITY Entity_NameSYSTEMEntity_URL> • <!ENTITY :實體宣告 • Entity_Name:實體的名稱 • Entity_URL:外部檔案資源指定器(網址等) <!ENTITYMyWifeSYSTEM“mywife.data">

  22. 外部實體宣告範例 <?xml version="1.0" standalone="yes"?> <!DOCTYPE Person [ <!ELEMENT Person (Name,Birthday,spouse?,Address,TEL)> <!ELEMENT Name (#PCDATA)> <!ELEMENT Birthday (#PCDATA)> <!ELEMENT Spouse (Person)> <!ELEMENT Address (#PCDATA)> <!ELEMENT TEL (#PCDATA)> <!ENTITYMyWifeSYSTEM“mywife.xml"> ]>

  23. XML內外部實體參用範例 <?xml version="1.0" standalone="yes" ?> <!DOCTYPE Person […]> <Person> <Name>&MyName;</Name> <Birthday>&MyBirthday;</Birthday> <Spouse>&MyWife;</Spouse> <Address> Taipei 101</Address> <TEL>123456789</TEL> </Person>

  24. DTD參數型實體參考 • 僅限外部DTD定義使用 • 參數實體僅供DTD檔自己使用 • 定義語法如下 • <!ENTITY%Entity_Name [SYSTEM|PUBLIC]?Entity_Definition(文字或檔案)> • 例如:參數型實體宣告<!ENTITY % attr_param "ageCDATA #IMPLIEDweight CDATA #REQUIRED" > • 例如:參數型實體參用<!ATTLIST Person %attr_param; carrier CDATA #REQUIRED > <!ATTLISTPerson age CDATA #IMPLIED weight CDATA #REQUIRED carrier CDATA #REQUIRED>

  25. 檢驗XML文件是否合乎DTD規範(1/2) • 利用本課程提供的OnlineValidator工具

  26. 檢驗XML文件是否合乎DTD規範(2/2)

  27. 綜合練習範例一 • 題意說明 • 有一家寵物廠商想利用XML建立飼主與寵物的關係資料庫。目前廠商已經建立有關飼主(Keeper.dtd)與狗寵物的資料(DOG.dtd)如下所示。 <!-- DOG.dtd --> <!ELEMENT 狗 (綽號,年齡, 種類)> <!ATTLIST 狗 編號 ID#REQUIRED > <!ELEMENT 綽號 (#PCDATA)> <!ELEMENT 年齡 (#PCDATA)> <!ELEMENT 種類 (#PCDATA)> <!-- Keeper.dtd --> <!ELEMENT 飼主 (寵物+)> <!ATTLIST 飼主 編號 ID #REQUIRED> <!ELEMENT 寵物 ANY> 問題:如何整合上述的DTD資料,建立XML文件資料?

  28. 可以同時使用多個DTD宣告嗎? <!-- DOG.dtd --> <!ELEMENT 狗 (綽號,年齡, 種類)> <!ATTLIST 狗 編號 ID#REQUIRED > <!ELEMENT 綽號 (#PCDATA)> <!ELEMENT 年齡 (#PCDATA)> <!ELEMENT 種類 (#PCDATA)> <!-- Keeper.dtd --> <!ELEMENT 飼主 (寵物+)> <!ATTLIST 飼主 編號 ID#REQUIRED > <!ELEMENT 寵物 ANY> <?xml version=“1.0” encoding="UTF-8"?> <!DOCTYPE 飼主 SYSTEM "Keeper.dtd" > <!DOCTYPE 狗 SYSTEM "DOG.dtd" > <飼主 編號="E123456"> <寵物> <狗 編號=“D001202"> <綽號>Timmy</綽號> <年齡>5</年齡> <種類>Tom</種類> </狗> </寵物> </飼主>

  29. 方案:整合內外部DTD <?xml version=“1.0” encoding="UTF-8"?> <!DOCTYPE飼主 SYSTEM "DOG.dtd" [ <!ELEMENT 飼主 (寵物+)> <!ATTLIST 飼主 編號 ID#REQUIRED> <!ELEMENT 寵物 ANY> ] > <飼主 編號="E123456"> <寵物> <狗 編號="D001202"> <綽號>Timmy</綽號> <年齡>5</年齡> <種類>Tom</種類> </狗> </寵物> </飼主>

  30. 綜合練習範例二 • 題意說明 • 同上,但現在寵物廠商想加入貓寵物的資料(CAT.dtd)如下所示。 <!-- CAT.dtd --> <!ELEMENT 貓 (小名,年紀, 品種)> <!ATTLIST 貓 編號 ID#REQUIRED > <!ELEMENT 小名 (#PCDATA)> <!ELEMENT 年紀 (#PCDATA)> <!ELEMENT 品種 (#PCDATA)> 問題:如何整合上述的DTD資料,建立XML文件資料?

  31. 利用參數型實體,整合多個外部DTD檔 <!-- Keeper.dtd --> <!ELEMENT 飼主 (寵物+)> <!ATTLIST 飼主 編號 ID#REQUIRED > <!ELEMENT 寵物 ANY> <!ENTITY % dog SYSTEM "DOG.dtd" > <!ENTITY % cat SYSTEM "CAT.dtd" > %dog; %cat; <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE 飼主 SYSTEM "Keeper.dtd" > <飼主 編號="E123456"> <寵物> <狗 編號="D001202"> <綽號>Timmy</綽號> <年齡>5</年齡> <種類>Tom</種類> </狗> <貓 編號="C001203"> <小名>Timmy</小名> <年紀>5</年紀> <品種>Tom</品種> </貓> </寵物> </飼主> <!-- DOG.dtd --> <!ELEMENT 狗 (綽號,年齡, 種類)> <!ATTLIST 狗 編號 ID#REQUIRED > <!ELEMENT 綽號 (#PCDATA)> <!ELEMENT 年齡 (#PCDATA)> <!ELEMENT 種類 (#PCDATA)> <!-- CAT.dtd --> <!ELEMENT 貓 (小名,年紀, 品種)> <!ATTLIST 貓 編號 ID#REQUIRED > <!ELEMENT 小名 (#PCDATA)> <!ELEMENT 年紀 (#PCDATA)> <!ELEMENT 品種 (#PCDATA)>

  32. DTD的限制 • DTD規範了文件的結構 • DTD 在早期推廣階段十分有用 • 有自己的語法 • 但與XML不相容,所以無法動態建立 DTD文件 • DTD資料類型短缺 • DTD無法延伸

  33. 單元複習 • 介紹了DTD的相關語法與意義 • 如何撰寫DTD文件格式定義 • 如何整合多個DTD檔 • 如何利用DTD與XML剖析器,檢驗XML文件的合適性

More Related