XMLゼミ 3.5 DTD M2 正木 裕一 DTDとは DTD(Document Type Definition) XML文書内容の構造を定義する最も基本的な方法 W3Cの仕様XML1.0に規定されている ※実際には先週のゼミで説明があったXML Schemaなどの方がよく使われる DTDの形式 DTDとははタグ付き文書の要素の名前や順序などを定義したもの 文書型宣言の中に必要な宣言を必要なだけ定義する ※XML SchemaのようにDTD文書として別ファイルにすることも可能 <!DOCTYPE 名前[ <!--- コメント---> (宣言のリスト) ]> コメントを挿入することも可能 DTDに定義できる内容 内容 意味 要素型宣言 (ELEMENT) XMLインスタンスで使用できる要素、要素名、階層を 定義 属性リスト(ATTLIST) 属性のリストを宣言 実体宣言(ENTITY) 実体(文字、文字列、読み込むファイル)を宣言 記法宣言(NOTATION) 外部ファイルとして参照するXML以外の形式を定義 特徴 •要素型宣言が少なくとも1つ必要 •XML文書の構造に対応していれば宣言の順序は自由 (例)属性が無いXML文書の構造の場合要素型宣言のみでも可 DTDを含むXML文書の例 <?xml version="1.0" encoding="UTF-16" ?> <!DOCTYPE 連絡先[ <!DOCTYPEの後の名前と ルート要素の名前が一致 <!ELEMENT 連絡先 (氏名+) > <!ELEMENT 氏名 (#PCDATA) > <!ATTLIST 氏名 CODE CDATA #REQUIRED TEL CDATA #IMPLIED 宣言リスト FAX CDATA #IMPLIED> ]> <連絡先> <氏名 CODE="002525" TEL="2525-0110" FAX="2525-0111">ニ戸 丹子</氏名> <氏名 CODE="004111" TEL="1111-0110" FAX="1111-0111">世衣 犬太</氏名> </連絡先> 要素宣言(ELEMENT) DTDの要素宣言 <!ELEMENT 要素名 内容モデル> 内容モデルとして指定可能な値:他の要素名、テキスト (テキストは#PCDATAで表す)組み合わせも可能 出現回数の指定可能な値 記号 例 意味 指定無し <!ELEMENT A (B)> 必ず一回出現 ? <!ELEMENT A (B?)> 0回か1回出現 + <!ELEMENT A (B+)> 1回以上出現 * <!ELEMENT A (B)*> いくつあっても無くてもいい 組み合わせの指定シンボル シンボル 例 意味 , <!ELEMENT A (B,C)> AにはB→Cという順番で1つずつ必ずある | <!ELEMENT A (B|C)> AにはBかCという要素が1つある * <!ELEMENT A (B,C*)> AにはBという要素があり、その後にCがいくつ あってもまたは無くてもよい 属性宣言(ATTLIST) DTDの属性宣言 <!ATTLIST 要素名 属性名 属性値の種類 “既定値”> <!ATTLIST 要素名 属性名1 属性値の種類 “既定値”> 属性名2 属性値の種類 “既定値”> … 属性名n 属性値の種類 “既定値”> 属性値の種類 種類 意味 CDATA 文字データ ID 識別子 IDREF 識別子の参照に使う属性値 NMTOKEN(S 名前トークン ) NOTATION 既定値の種類 種類 意味 属性値 “”で囲んだ値 #FIXED 属性値を変更できない ことを示す #IMPLIED 属性値が省略された場 合の動作はアプリケー ションに依存 #REQUIRED 属性の指定が必須 記法宣言参照 ENTITY(IES) 実体参照値 複数の属性を定義 することも可能 実体宣言(ENTITY) DTDの実体宣言 <!ENTITY 実体名 “実体参照の際に置き換える文字列”> <?xml version="1.0" encoding="UTF-16" ?> <!DOCTYPE 書籍リスト[ <!ENTITY TITLE "独習XML"> <!ELEMENT 書籍 (表題) > <!ELEMENT 表題 (#PCDATA)> ]> <書籍リスト> <書籍> <表題>&TITLE;</表題> </書籍> </書籍リスト> 外部実体(外部エンティティ) DTDの外部実体 <!ENTITY 記法名 SYSTEM “記法を特定するオブジェクトのURL”> <!ENTITY 記法名 PUBLIC “公開識別子” “記法を特定するオブジェクトのURL”> <?xml version="1.0" encoding="UTF-16" ?> A <氏名 CODE="002525" TEL="2525-0110" FAX="2525-0111">ニ戸 丹子</氏名> <氏名 CODE="004111" TEL="1111-0110" FAX="1111-0111">世衣 犬太</氏名> <?xml version="1.0" encoding="UTF-16" ?> B <氏名 CODE="003225" TEL="2424-0110" FAX="2424-0111">須藤 元気</氏名> <氏名 CODE="098611" TEL="5555-0110" FAX="5555-0111">山本 徳郁</氏名> 外部実体の例 <?xml version="1.0" encoding="UTF-16" ?> <!DOCTYPE 連絡先[ <!ELEMENT 連絡先 (氏名?) > <!ELEMENT 氏名 (#PCDATA) > <!ATTLIST 氏名 CODE CDATA #REQUIRED TEL CDATA #IMPLIED> <!ENTITY adrbook1 SYSTEM "A.xml"> <!ENTITY adrbook2 SYSTEM "B.xml"> ]> A B <連絡先> &adrbook1; &adrbook2; </連絡先> 記法宣言(NOTATION) XML以外の記法(イメージ、サウンドなど)の情報を 使っている場合に識別するための別名を指定する DTDの記法宣言 <!NOTATION 記法名 SYSTEM “記法を特定するオブジェクトのURL”> <!NOTATION 記法名 PUBLIC “公開識別子” “記法を特定するオブジェクトのURL”> ※記法宣言したXML文書全体を記法指定つき実体という ATTLISTの記法宣言 <!ATTLIST 要素名 属性名 NOTATION 記法名候補 デフォルト値> •宣言したURLや識別子が表すものの内容についてはXMLの仕様で決め られていない •記法宣言は一般的にプラットフォームに依存するので現在はあまり使わ れていない 宿題 1. XML文書を二つ作成し、外部実体によって 表示する DTDファイル <!ELEMENT 連絡先 (氏名+) > <!ELEMENT 氏名 (#PCDATA) > <!ATTLIST 氏名 CODE CDATA #REQUIRED TEL CDATA #IMPLIED FAX CDATA #IMPLIED> XML文書 <?xml version="1.0" encoding="UTF-16" ?> <!DOCTYPE 連絡先 SYSTEM "adrs.dtd"> <連絡先> <氏名 CODE="003225" TEL="2424-0110" FAX="2424-0111">須藤 元気</氏名> <氏名 CODE="098611" TEL="5555-0110" FAX="5555-0111">山本 徳郁</氏名> </連絡先>
© Copyright 2025 ExpyDoc