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