2 1 xml n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
單元 2-1 : XML 文件類型定義 PowerPoint Presentation
Download Presentation
單元 2-1 : XML 文件類型定義

Loading in 2 Seconds...

play fullscreen
1 / 33

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


  • 99 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '單元 2-1 : XML 文件類型定義' - charlton-alberto


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
2 1 xml

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

王豐緒

銘傳大學資工系

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

文件格式定義(Document Type Definition)定義XML文件的「格式」(Format),亦即XML文件需要包含那些「標記」(tag)、「屬性」(attribute)、實體(entities)以及標記之間的結構等等

XML資料

合格的XML文件

XML

剖析器

有效的XML文件

DTD文件

DTD文件規範

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

<!DOCTYPE 根元素名稱 [

.........

]>

  • 「<!DOCTYPE」是宣告的開始。
  • 「根元素名稱」放您DTD定義的根元素名稱。
  • 「[」及「]」是DTD定義的開始與結束符號。
  • 「.......」為您要定義的DTD。
  • DOCTYPE宣告須在XML宣告之後,任何元素宣告之前
    • 可以有幾個DTD宣告?
slide6
外部DTD文件格式定義之宣告
  • 外部DTD宣告的語法主要區分成兩大類:
    • 「SYSTEM」:私有用途
    • 「PUBLIC」:公開用途

<!DOCTYPE 根元素名稱 SYSTEM|PUBLIC"DTD_URI"["DTD_URL"]>

slide7
參數說明

<!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">
slide8
DTD基本標示指令
  • ELEMENT
    • 定義XML元素
  • ATTLIST
    • 定義XML元素的屬性
element
元素的設定: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) >

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

#PCDATA一定要出現在第一個

slide11
宣告標記可出現的次數
  • 符號 允許出現次數
    • ? 零或一次
    • * 大於等於零次
    • + 大於等於一次
    • 沒有符號 一次

<!ELEMENTA(B?, C*, D+, E) >

<!ELEMENTA(B, (C, D)?, (E, F)*, (G, H)+, (I, J)) >

<!ELEMENTA(B)* >

slide12
選擇區隔符號:|
  • 我們希望子元素有選擇空間(只能選其一)時使用
    • 例:學歷有很多種可選擇<!ELEMENT教育程度(高中|大學|碩士|博士)>教育程度下只能有高中, 大學, 碩士或博士
slide13
混合型元素
  • 相關選項
    • 「#PCDATA」(一定要放在第一位)
    • 加上其它元素可以選擇
    • 例:可選擇的職業<!ELEMENT 職業 (#PCDATA | 教育| 學生| 資訊相關)*>職業下可以是文字或是任何教育, 學生, 資訊相關的組合
xml attlist
定義XML元素的屬性(ATTLIST)
  • <!ATTLISTelement_nameattr_nameattr_typeattr_dafaults>
  • attr_defaults
    • #REQUIRED (此屬性為必要的, 一定要給值)
    • #IMPLIED (此屬性為可有可無的, 可給可不給)
    • #FIXEDxxxx (此屬性值是xxxx,不能改變)
    • xxxx (此屬性可給可不給,預設值是xxxx, 但可以改變)
  • attr_type
    • 文字型態(CDATA)
    • Tokenized
    • 列舉式型態(enumerated)

例句:<!ATTLIST飼主生日CDATA#IMPLIED>

slide15
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
slide16
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">

dtd notation
DTD中的NOTATION
  • 描述異於XML(文字)的資料
    • 如 圖形等
  • 描述資料格式項目與外部應用程式名稱
      • <!NOTATION jpg SYSTEM “jpgviewer.exe” >
      • <!NOTATION gif SYSTEM “gifviewer.exe” >
    • 一個使用NOTATION屬性的例子
      • <!ATTLISTImagetypeNOTATION(gif | jpg)"gif">
      • <Image type="jpg" />
slide18
XML實體的宣告
  • 分兩類
    • 「內部實體」及「外部實體」。
  • 內部實體
    • 以參考文字為主
    • 在DTD文件中宣告:<!ENTITY指令>
    • 在XML文件中使用:&entity;
  • 外部實體
    • 以參考外部檔案的實體為主
    • 在DTD文件中宣告:<!ENTITYSYSTEM 指令>
    • 在XML文件中使用:&entity;
slide19
在DTD中宣告內部實體

<!ENTITY Entity_NameEntity_Definition>

  • <!ENTITY :開始實體宣告
  • Entity_Name:實體名稱
  • Entity_Definition:對實體內容的定義(文字)

<!ENTITYMyName“Johnson">

slide20
內部實體宣告範例

<!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)>

]>

slide21
外部實體之宣告及使用

<!ENTITY Entity_NameSYSTEMEntity_URL>

  • <!ENTITY :實體宣告
  • Entity_Name:實體的名稱
  • Entity_URL:外部檔案資源指定器(網址等)

<!ENTITYMyWifeSYSTEM“mywife.data">

slide22
外部實體宣告範例

<?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">

]>

slide23
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>

slide24
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>

xml dtd 1 2
檢驗XML文件是否合乎DTD規範(1/2)
  • 利用本課程提供的OnlineValidator工具
slide27
綜合練習範例一
  • 題意說明
    • 有一家寵物廠商想利用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文件資料?

slide28
可以同時使用多個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</種類>

</狗>

</寵物>

</飼主>

slide29
方案:整合內外部DTD

<?xml version=“1.0” encoding="UTF-8"?>

<!DOCTYPE飼主 SYSTEM "DOG.dtd"

[

<!ELEMENT 飼主 (寵物+)>

<!ATTLIST 飼主 編號 ID#REQUIRED>

<!ELEMENT 寵物 ANY>

]

>

<飼主 編號="E123456">

<寵物>

<狗 編號="D001202">

<綽號>Timmy</綽號>

<年齡>5</年齡>

<種類>Tom</種類>

</狗>

</寵物>

</飼主>

slide30
綜合練習範例二
  • 題意說明
    • 同上,但現在寵物廠商想加入貓寵物的資料(CAT.dtd)如下所示。

<!-- CAT.dtd -->

<!ELEMENT 貓 (小名,年紀, 品種)>

<!ATTLIST 貓 編號 ID#REQUIRED >

<!ELEMENT 小名 (#PCDATA)>

<!ELEMENT 年紀 (#PCDATA)>

<!ELEMENT 品種 (#PCDATA)>

問題:如何整合上述的DTD資料,建立XML文件資料?

slide31
利用參數型實體,整合多個外部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)>

slide32
DTD的限制
  • DTD規範了文件的結構
  • DTD 在早期推廣階段十分有用
    • 有自己的語法
    • 但與XML不相容,所以無法動態建立 DTD文件
  • DTD資料類型短缺
  • DTD無法延伸
slide33
單元複習
  • 介紹了DTD的相關語法與意義
  • 如何撰寫DTD文件格式定義
    • 如何整合多個DTD檔
  • 如何利用DTD與XML剖析器,檢驗XML文件的合適性