230 likes | 370 Views
此簡報可能會牽涉到聽眾的討論活動,也就是所謂的執行項目。因此在進行簡報時 ﹐ 可充份利用 PowerPoint 來記錄這些執行項目: 於投影片放映狀態按下滑鼠右鍵 選取 〔 會議記錄簿 〕 選取 〔 執行項目 〕 標籤 將出現的意見都記錄於此 按下 〔 確定 〕 以結束此對話方塊 在簡報進行到最後時 ﹐PowerPoint 將會自動的建立一個執行項目投影片 ﹐ 並將你所記錄的內容顯示在該投影片上. DTD 規則. [XML Lab. ] [ 黃振修 ]. 何謂 DTD ?. 文件類型定義 Document Type Definition
E N D
此簡報可能會牽涉到聽眾的討論活動,也就是所謂的執行項目。因此在進行簡報時﹐可充份利用 PowerPoint 來記錄這些執行項目: • 於投影片放映狀態按下滑鼠右鍵 • 選取〔會議記錄簿〕 • 選取〔執行項目〕標籤 • 將出現的意見都記錄於此 • 按下〔確定〕以結束此對話方塊 • 在簡報進行到最後時﹐PowerPoint將會自動的建立一個執行項目投影片﹐並將你所記錄的內容顯示在該投影片上 DTD 規則 [XML Lab.] [黃振修]
何謂 DTD ? • 文件類型定義 • Document Type Definition • 自訂我們所使用的標籤 • 用XML來建立文件規則 • DTD就像是一本規則手冊 • 允許作者建立相同類型的新文件 • 藉由繼承可擁有與基底文件相同的特性 • Valid XML必須嚴格的遵守DTD規則
DTD 結構 • 外部DTD子集 • 存在文件以外,通常是一份通用的DTD • 內部DTD子集 • 包含在文件PROLOG宣告部分 • 文件能包含兩種以上的子集 • 內部子集會被優先處理 • 可以覆蓋(override)外部子集的定義
DTD 語法 • XML spec採用Backus Naur Form (BNF)定義, 相關文法如下: • XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' • SDDecl ::= S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) • doctypedecl ::= ‘<!DOCTYPE’ S Name (S ExternalID)? S? (‘[’ (markupdecl | PEReference | S)* ‘]’ S?)? ‘>’ • ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral
內部 DTD (#1) <?xml version=“1.0”?> <!DOCTYPE EMAIL [ <!ELEMENT EMAIL (TO, FROM, CC, SUBJECT, BODY)> <!ELEMENT TO (#PCDATA)> <!ELEMENT FROM (#PCDATA)> <!ELEMENT CC (#PCDATA)> <!ELEMENT SUBJECT (#PCDATA)> <!ELEMENT BODY (#PCDATA)> ]> <EMAIL> <TO>chenhsiu@gens.dhs.org</TO> <FROM>b87506017@csie.ntu.edu.tw</FROM> <CC>emacs@ms38.url.com.tw</CC> <SUBJECT>Hello XML</SUBJECT> <BODY>blah, blah</BODY> </EMAIL>
內部 DTD (#2) • 用IE來檢視XML文件
內部 DTD (#3) • 在上面的例子中,XML parser會用DTD來驗證文件的有效性(valid) • 直接將elements定義在doctypedecl方括弧 [] 內部 • 內部子集會被優先處理 • 若文件包含外部集內部子集, 會覆蓋(override)先前外部字集的定義
外部 DTD (#1) <!DOCTYPE EMAIL (SYSTEM|PUCLIB) “email.dtd”> • 外部實體 • SYSTEM緊接在URI之後,用來告訴處理器哪裡可以找到宣告中被參照的物件 • 對廣大的使用者而言,一些DTD已經被確立為標準是有效的,這時就使用PUCLIB關鍵字,後面應接一個有效的標準函式庫 • 可把文件對實體的宣告寫在另一個外部檔案,使用時直接參照外部實體
外部 DTD (#2) • 使用外部DTD的例子 • example.xml<?xml version=“1.0” encoding=“BIG5” standalone=“yes”?><!DOCTYPE EMAIL SYSTEM “email.dtd”>.... • email.dtd<?xml version=“1.0” encoding=“ISO-8859-1”?><!ELEMENT EMAIL (TO, FROM, CC, SUBJECT, BODY)> <!ELEMENT TO (#PCDATA)> <!ELEMENT FROM (#PCDATA)> <!ELEMENT CC (#PCDATA)> <!ELEMENT SUBJECT (#PCDATA)> <!ELEMENT BODY (#PCDATA)>
元素宣告 • Grammar • elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>‘ • contentspec ::= 'EMPTY' | 'ANY' | Mixed | children • Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' |'(' S? '#PCDATA' S? ')‘ • children ::= (choice | seq) ('?' | '*' | '+')?
元素宣告釋義(#1) • EMPTY • 用來宣告不能包含任何內容的元素ex: <BR/> • ANY • 可包含任何DTD允許的內容並以任何順序出現 • 混合型(Mixed) • 宣告為一組可選擇的內容,以 | 區隔, ex: <!ELEMENT EXAMPLE (#PCDATA|x|y|z)*>
元素宣告釋義(#2) • #PCDATA 可解析的字元資料,包含標籤,會被XML parser處理的資訊 • #CDATA不可解析的字元資料,即普通文字,可包含作為保留標籤的字元, ex: <![CDATA[<TEST>LaLaLa</TEST>]]>
元素宣告釋義(#3) • 結構符號
屬性宣告 • Grammar • AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>' • AttDef ::= S Name S AttType S DefaultDecl • AttType ::= StringType | TokenizedType | EnumeratedType • TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY' | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS' • DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)
屬性概念 • 屬性提供關於元素或元素內容的相關資訊,例如: <font color=“red”>TEST</font>即表示紅色是TEST字串的屬性 • 屬性通常包含了重要訊息,但卻不屬於元素內容的一部份 • 屬性宣告可出現在DTD中任何部分,但是放在較近於對應的元素宣告處,比較易於為人了解
例子(續) ... <!ELEMENT EMAIL (TO, FROM, CC, BCC, SUBJECT, BODY)> <!ATTLIST EMAIL LANGUAGE (Western|Greek|Chinese) “Chinese”ENCRYPTED CDATA #IMPLIEDPRIORITY (NORMAL|LOW|HIGH) “NORMAL”> ... <!ELEMENT BCC (#PCDATA)> <!ATTLIST BCC HIDDEN CDATA #FIXED “TRUE”> ...
內部實體 <!ENTITY EntityName EntityDefinition> • 內部實體在DTD中被宣告,並包含文件會用到內容 • 例如:<!ENTITY SIGNATURE “ChenHsiu”>會把SIGNATURE這個實體加到DTD中,並且日後這個實體在文件中被參照時,會被置換成實體的內容: ChenHsiu <BODY> Hello, This is &SIGNATURE;! </BODY>
參數實體 <!ENTITY % HIDDEN “CDATA #FIXED “TRUE””> • 參數實體和一般實體相同,但是在語意方面有顯著不同 • 參數實體在DTD中被宣告,並包含“DTD中”會用到內容 • 宣告過後的實體可在“DTD中”的其他地方被參考到 <!ATTLIST BCC HIDDEN %HIDDEN;>
INCLUDE & IGNORE <![IGNORE[DTD section]]> <![INCLUDE[DTD section]]> • IGNORE以及INCLUDE關鍵字可以讓使用者將DTD的某部分關閉或是開啟 • 允許作者在追蹤各種不同的變化時,可測試各種不同的結構 <![IGNORE[<!ELEMENT BCC(#PCDATA)> <!ATTLIST BCC HIDDEN CDATA #FIXED “TRUE”>]]> <![INCLUDE[<!ELEMENT SUBJECT (#PCDATA)>]]>
INCLUDE & IGNORE <![IGNORE[DTD section]]> <![INCLUDE[DTD section]]> • IGNORE以及INCLUDE關鍵字可以讓使用者將DTD的某部分關閉或是開啟 • 允許作者在追蹤各種不同的變化時,可測試各種不同的結構 <![IGNORE[<!ELEMENT BCC(#PCDATA)> <!ATTLIST BCC HIDDEN CDATA #FIXED “TRUE”>]]> <![INCLUDE[<!ELEMENT SUBJECT (#PCDATA)>]]>
處理指令 • 處理指令(PI)提供指令給正在處理這份文件的應用程式 • PI通常出現在一份文件的前言中,但是他們能被放在XML文件中任意地方 <?AVI CODEC=“VIEDO1” COLORS=“256”?> <?WAV COMPRESSOR=“ADPCM” RESOLUTION=“16”?>
必要的標籤宣告 • 一份格式正確(well-formed)的文件不需要讀取DTD • 就算格式正確的文件中,每個外部實體仍需被宣告. parser可能不需要處理外部DTD,但是仍可能需要處理內部DTD • 必須在XML中加入必要的標籤宣告,我們稱為RMD • NONE:皆不處理DTD • INTERNAL:只處理內部DTD • ALL:必須處理任何有效的內部外部DTD
語彙 • XML語彙是一組實際元素與特殊文件類型的結構,在DTD中定義的語彙是給規則書用的 • 頻道定義格式 • 開放金融資訊交換 • 開放軟體描述 • 電子資料交換