4 ー 3 内部ロ T ロと 外部ロ T ロ 通常 DTD は、 XML 宣言に続いて記述しますが、外部ファイルに記述してその 場所を IJ で指定することもできます。 XML 文書の中に DTD を記述するものを内 部 DTD 、 XML 文書とは別に DTD 用のファイルを作って、そこに DTD を記述す るものを外部 DTD と呼びます。 ・内部 DTD 通常、 DTD は XML 宣言に続いて記述します。このように、 XML 文書の中 に DTD の記述があるものを内部 DTD といいます。 DTD の記述は DOCTYPE で 開始します。 DTD の基本的な形式は次のとおりです。 <!DOCTYPE ルート要素名 [ ・・・ DTD の記述・・・ ] > XML 文書全体で唯一のルートと なる要素名を指定 ・外部 DTD この部分に後述の要素名やそ の構造、属性などを指定 DTD の記述を外部ファイルに置くこともできます。これを外部 DTD といい、 複数の XML 文書が同一の DTD を利用する場合に大変重要な方式です。あるシ ステム内のすべての DTD を一箇所に集めておけば、一元的にデータ構造を管 理でき、安全性も高まります。 DTD のありかは以下のように URI で指定しま す。なお、 [ ・・・ D ルの記述・・・ ] は省略可能です。 ルート要素名 PUBL 工 c " 公開識方グ子 " " 工 " [ ・・・ DTD の言己述・・・ ] > 公開されている DTD ( 公開 <!DOCTYPE ルート要素名 SYSTEM 純沢蹙 [ ・・・ DTD の言己述・・・ ] > 識別子を持つ ) の場合 公開識別子を持たない DTW ) 場合 84 外部 DTD の場所 [ ・・・ DTD の記述・・・ ] は、な くても構わない
DTD の書き方入門 Chapter 素・↑ 立ロ 際述 立ロ 内部 DTD 外部 DTD 一三ロ XML データ DTD 個別 DTD XML データ XML データ 共通 DTD の記述 公開識別子 (public ldentifier) は DTD を認識するための単一名称で、公開 されている DTD の場合、 XML 文書を処理するパーサーは、外部あるいは内部 に用意された辞書などから公開識別子をもとに DTD を検索します。 ・外部 DTD を使用するかどうカ旨定 DTD を使用する場合、 XML 宣言の部分に s し dal 。 ne 属性カ甘旨定できます。 く ? nl vers 土 on = “ 1 . 0 ” encoding="Shift—J 工 S" standalone="yes"?> その XML 文書以外の外部 DTD やパラメータ宣言を参照する場合は n 。、参 照しない場合は yes を指定します。この指定は、パーサーに対して外部記述の 参照カ坏要であることを宣言し、パーサーの処理効率を上げるためのものです。 85
ーまるごと一 ー図解 3-8. 属性 属性と属性値 ひとつのタグ内に同し属性名を何度も使ってはいけない 3-9. 空要素 空要素 3-10. 工ンティティ参照 要素内でくや > を文字として使うと、エラーか起きる 工ンティティ参照 3-11. 文字参照 文字参照 文字参照の書き方 3-12. コメント コメントの記述方法 コメントのいろいろな使い方 3-13. XML 文書を作ってみよう ~ その 1 要素の抜き出しと構造化 サンカレ記事 要素の抜き出し ツリー図の作成 3-14. XML 文書を作ってみよう ~ その 2 XML 化と表示確認 XML 化作業 旧 5.0 での確認 URI と URL コラム ・ 64 最新 X -J がわかる ・ 66 ・ 68 ・ 70 ・ 72 ・・・ 74 ・・ 76 4 章 DTD の書き方入門 4-1. XML で情報を階層化する 情報をプロック分割し、関連情報ごとに分類 XML 文書ではタグで関連情報をグループ化 データをあらわすタグとグループ化のためのタグ 4-2. DTD は XML 文書の設計図である DTD とは DTD で宣言するもの DTD か必要なわけ 4-3. 内部 DTD と外部 DTD 内部 DTD 外部 DTD 外部 DTD を使用するかとうかの指定 4-4. 簡単な DTD 4-5. 文書型宣 DTD とルート要素の指定 79 ・ 80 ・・ 82 ・・ 84 ・・ 86 ・・ 87
マ DTD C)& 割 DTD クすることができません。 DTD は設計図 DTD の書き方入門 Chapter わかりました なっています こういう構造に この XML は XML/X—サー 実際の運用では、 DTD は必須ではありませんが、 XML を利用したアプリケ ーションを作成する場合は、検討段階で DTD を作成し、それをベースにアプ リケーション間の整合性の検証など、複数の視点から検討を加えるべきでしょ う。設計図を作成せずに建物を建築することカ階無のように、 DTD なしで高 度な応用システムを構築することは考えられません。 83
4 ー 4 簡単な口 T ロ ここでは、 DTD がどのようなものかイメージをつかんでもらうために、非常にシ ンプルな DTD を見てみることにしましよう。 はじめに次の XML 文書を想定します。 く売上 > 団子 3 兄弟く / 売上 > この要素に対する DTD は次のようになります。 く ! DOCTYPE 売上 [ く ! ELEMENT 売上 (#PCDATA) > ] > ここで使われている ELEMENT は要素の宣言、 #PCDATA はその要素が文字列 から構成されることを示しています ( 詳細は p. 88 ) 。この DTD を外部ファイル に置くのであれば、内容を保存し、 sales . d セ d などと名前をつけます。 DTD を文書内に記述した場合の、より完全な XML 文書は、次のようになります。 XML 宣 く ? n1 version= “ 1 . Ø“ encoding= “ Sh 土し一こ工 S “ ? > く ! DOCTYPE 売上 [ く ! ELEMENT 売上 (#PCDATA) > ] > ー DTD XML の本体 く売上 > 団子 3 兄弟く / 売上 > (XMLi—タ ) DTD を外部ファイル sales . 訛 d に置いた場合は次のようになります。 く ? n1 version=" 1 . “ encoding= “ Sh 土し一こ工 S “ ? > く !DOCTYPE 売上 SYSTEM 物 sales . dtd"> く売上 > 団子 3 兄弟く / 売上 > 86 XML 宣 DTD (sales . dtd を指定 ) XML の本体 (XML データ )
8 ー 1 DTD 共通化の 意味するもの XML は HTML と比べ、 DTD に代表されるような構造化されたデータを扱う点が 特徴です。データベースなども同じ考え方で実現されますが、 XML は Web 上の複 数のサイト上に分布していて、それそれが独立に管理、利用される点が異なってい ます。そのため、 DTD の共通化は重要な意味を持ちます。 ・ XML の応用と深い関わりがある DTD DTD は、データの構造や意味付けなどを規定するため、当然、 XML の応用 であるアプリケーションシステムと深く関わります。たとえば、第 2 章で取り 上げた気象情報では、統一的な DTD を定め、 XML であらわした気象情報を web 上で公開するだけで、想像もっかなかったほどの膨大な量の情報を世界中 で共有できるようになります。この場合、気象情報を公開することによって、 世界レベルで情報の共有化が可能となるため、それだけで大きな意義がありま す。しかし、企業間のビジネス情報などでは、対象とする情報が汎世界的なも のか、あるいは特定の企業内で閉じたものかどうかで、考慮すべき内容は相当 違ってきます。 ・ DTD の共通化はグロー′レなビジネスにつながる データ構造を規定する DTD の重要性は、 EC などの商用利用のための応用に おいて、特に大きな意味を持ちます。商用の製品情報が、統一 DTD に沿った XML で記述されるとしましよう。共通 DTD に基づいた XML で記述することで、 世界調達などを達成するための基本的な枠組みができます。同時に、個人を対 象としたいわゆる Bt 。 c においても共通的な枠組みができることになります。 たとえば、ホテルを探したり、航空券を探したりといった場合に、同時に複 数のサービスサイトに検索をかけ、もっとも安いあるいは早く調達できるルー トを見つけることができます。 184
XML では、ある DTD 部に条件指定を行い、その部分を有効にしたり、無効 にしたりできます。また、通常は特別な意味で解釈される XML の予約語を、文字 そのものとして扱うように DTD のなかで部分指定することもできます。 4 ー 9 条件付きセクションと C ロ ATA セクション ・ DTD 部を切り替えて使用 ~ ェ NCLUDE 、ェ GNO XML では、 DTD の部分プロックを無視したり、有効にしたりすることがで きます。このように条件指定された部分を条件付きセクションといい、 工 NCLUDE または工 GNORE 疑似命令を使います。条件付きセクションを指定す ると、工 NCLUDE と工 GNORE を変えるだけで、 DTD 内のプロック記述を切り替 えることができます。 DTD の開発中や、テスト中に利用すると便利です。 く ! [ 工 NCLUDE [ DTD で有効にしたい内容 く ! [ 工 GNORE [ DTD で無視したい内容 この部分の記述が 有効になる この部分の記述は 無視される ( p. 102 参照 ) を利用 工 NCLUDE と工 GNORE の切り替えには、エンティティ宣言 すると、複数の箇所を一括して切り替えることができ、便利でしかも安全です。 OCDATA セクション ( 文字データセクション ) XML パーサーは、通常第」や「く」などを XML の予約語として解釈し、 特別な意味を持った語として処理します。そこで、これらの文字を特別な意味 100
X み 式済 形証 整検 . XML 文書は、 DTD があるかないかで、大きく 2 種類に分けられます。 well- fo 「 med XML ( 整形式 XML 、またはウェルフォームド XML と訳されます ) と valid XML ( 検証済み XML ) です ( * ) 。 ・整形式 XML 文書 DTD がなくても XML 文書の作成や利用はできます。これか整形式 XML 文書 です。 XML データの要素などが、文法どおり表現されていれば、 DTD がなく ても処理できるというわけです。 DTD がないので、チェックできるのはおもに 以下のような内容で、文法どおりに形カっているかという範囲に止まります。 ・開始タグと終了タグの対応か取れているか ・親子関係のタグの組み合わせが入れ子状態になっているか ・ツリー構造の根 ( ルート ) に相当するタグがひとつだけあるか 0 検証済み XML 文書 XML 宣言、 XML データ (XML 本体 ) 、 DTD とすべてが揃っている XML を 検証済み XML 文書といいます。検証済み XML 文書では、整形式 XML 文書で 行ったチェックのほかに、 DTD の定義どおり記述されているかなどを調べま す。たとえば、 ・要素の並び偵 ・要素が省略できるか、できないか ・要素の繰り返しが正しいかどうか ・要素の階層関係か正しいかどうか などです。これらは、すべて DTD に記述されている内容なので、 DTD と照ら し合わせてチェックするわけです。 52
4 ー 2 ロ T ロは XML 文書 の設計図である XML では、情報を階層化して表現することカできますが、そのためには、情報の 構造を書いた設計図が必要です。 XML では、その設計図に相当するものを DTD と 呼んでいます。 ・ DTD とは DTD (Document Type Definition : 文書型定義 ) は XML 文書の設計図のよ うなもので、応用システムの中で扱う XML 文書のタグ名やデータ構造などを 規定します。 ・ DTD で宣言するもの DTD では、おもに以下の 4 つを宣言します。 ・要素型宣言 ( 要素の名前と階層構造を指定 ) ・属性リストの宣言 ( 各要素に指定可能な属性を定義 ) ・エンティティ宣言 ( 置き換えたい文字列や参照したい外部ファイルと、 その参照名の指定 ) ・そのほか、記法宣 ( XML で直接扱えないデータを外部のプログラム を通して扱うための指定 ) 、処理 コメントなど ロ卩¯p 、 ・ DTD カ要なわけ XML 文書では、タグを使って要素と要素のグループをあらわします。しか も、タグのセットや階層構造を応用ごとに自在に決められるため、どういった タグのセットを使うのか、文書中でのタグの階層構造はどうなっているのかを 決めておかないと、 XML 処理ソフトであるパーサーが XML 文書を解釈すると きに処理が決まりません。また、 DTD がなければ、 XML 文書を厳密にチェッ 82
XML 文書の冓成と文法概要 Chapter マ XML 文書を構成する XML 宣言、 DTD 、 XML データ XM L 宣言 Ⅸ ML 文書であることを宣言 ) DTD (XML データで使う要素やその冓造を定義 ) XML データ ( XML 文書の本体。データはタクでマーク付けされている ) csv ( カンマ区切りデータフォーマット ) ファイルがデータの区切り記号に 「 , 」 ( カンマ ) を使っているように、 XML ファイルはデータの区切り記号にタ グを使っています。 ・ DTD ( 文書型定義 ) 「ディーティーディー」と読み、 Document Type Definition ( 文書型定義 ) の略です。 XML データに出てくる要素が、ここですべて定義されています。 成する前にあらかじめ考えておく必要のあるものです。 される内容は、 DTD を実際に使用するかしないかに関わらず、 XML 文書を作 ただし、 DTD は、必ずしも必要なものではありません。しかし ・画像データなど非 XML データの参照 ・外部にある DTD やデータの参照 ・要素間の関係 ( 構造 ) の定義 ・個々の要素の定義 定義されるおもな内容は、次のようなものです。 ーこで定義