エンジニアのためのXMLスキーマ講座
第2回:XMLの標準スキーマ表現 DTDを「読む」
(株)日本ユニテック
竹内 理
目次<全5ページ>
5.DTDを読む-記法宣言
文書インスタンスとDTDを結びつける方法
おわりに
|
DTDを読む-記法宣言
パース対象外エンティティの宣言や属性リスト宣言のところでも取り上げましたが、DTDでは外部エンティティなどの「記法」を宣言することが出来ます。このように記法を宣言することによってアプリケーションは、その記法を指定している外部エンティティに対して、その記法固有の正しい処理をすることが出来るようになります。
記法宣言の基本的な形は次のようなものです。
<!NOTATION 記法名 SYSTEM "記法を特定するデータのURL">
あるいは
<!NOTATION 記法名 PUBLIC "公開識別子" "記法を特定するデータのURL">
次に、記法宣言の例をあげておきます。これは先ほども取り上げた日付データの記法を宣言するものです。
<!NOTATION UTF PUBLIC "ISO/IEC 8601//NOTATION Universal Time Format//EN">
文書インスタンスとDTDを結びつける方法
ここまでで、DTDを構成する4つの部分-エンティティ宣言、記法宣言、要素型宣言、属性リスト宣言-について詳しく見てきました。
では最後にDTDと文書インスタンスを結びつける方法について考えましょう。
その方法は主に2つあります。ひとつは文書インスタンスのDOCTYPE宣言の中に直接DTDを記述する方法、もうひとつはDTDを文書インスタンスとは別ファイルとして用意して、文書インスタンスのDOCTYPE宣言でDTDを参照する方法です。
<内部サブセット>
次に挙げるのは、DOCTYPE宣言の中に直接DTDを記述する方法です。
<!DOCTYPE email [
<!ENTITY salut "Dear Friends">
<!ELEMENT email (front,body) >
<!ELEMENT front (from,to+,cc?,title) >
<!ELEMENT from (name,mail-address) >
<!ELEMENT to (name,mail-address) >
<!ELEMENT cc (name,mail-address) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT mail-address (#PCDATA) >
<!ELEMENT title (#PCDATA) >
<!ELEMENT body (salution?,p*)>
<!ELEMENT salution (#PCDATA) >
<!ELEMENT p (#PCDATA) >
<!ATTLIST email seqnum NMTOKEN #REQUIRED
importance (LOW|HIGH) "LOW">]>
<email seqnum="1" importance="LOW">
・・…
……
</email>
<リスト2.DOCTYPE宣言内にDTDを記述>
この例では、文書インスタンス中のDOCTYPE宣言内にDTDを記述しています。このような場合、DTDのことを「内部サブセット」と呼ぶことがあります。よく使用される言葉ですので覚えておいてください。DOCTYPE宣言の後に普通に文書インスタンスを記述します。
内部サブセットにおいてひとつ注意しなければならないのは、パラメータエンティティの取り扱いです。ここでは詳細について説明しませんが、内部サブセットではパラメータエンティティを使って参照できるのは既存のDTDやエンティティ宣言集だけです。
<外部サブセット>
次に挙げるのは別ファイルとして存在するDTDをDOCTYPE宣言で参照する文書インスタンスの例です。
<!DOCTYPE email SYSTEM "email.dtd" >
<email seqnum="1" importance="LOW"
……
……
</email>
<リスト3.別ファイルのDTDを参照する文書インスタンス>
最初の行のDOCTYPE宣言で、別ファイルとして存在する"email.dtd"を指定していることに注目してください。このように記述することにより、文書インスタンスを別ファイルのDTDと結びつけることが出来ます。このような場合、別ファイルであるDTDのことを「外部サブセット」と呼ぶことがあります。DOCTYPE宣言の後に文書インスタンスを記述します。
この例のDOCTYPE宣言では"SYSTEM"キーワードを使用しています。このキーワードの意味と使用法はDTDのエンティティ宣言などと同様です("PUBLIC"キーワードを使用することもできます)。
おわりに
今回は、XMLのスキーマ定義としてもっとも広く用いられているDTDについて、またDTDを構成する4つの宣言について詳しく考えてきました。みなさんもDTDを「読む」ことができるようになったでしょうか。
では次回以降、今度はDTDを「書く」ときの方法や手順について取り上げていきたいと思います。
関連サービス
XMLスキーマの策定、作成業務
|