エンジニアのためのXMLスキーマ講座
第2回:XMLの標準スキーマ表現 DTDを「読む」
(株)日本ユニテック
竹内 理
目次<全5ページ>
DTDを読む-エンティティ宣言
1 <!ENTITY salut "Dear Friends">
2 <!ENTITY % personal-data "name,mail-address">
3 <!ELEMENT email (front,body) >
4 <!ELEMENT front (from,to+,cc*,title) >
5 <!ELEMENT from (%personal-data;) >
6 <!ELEMENT to (%personal-data;) >
7 <!ELEMENT cc (%personal-data;) >
8 <!ELEMENT name (#PCDATA) >
9 <!ELEMENT mail-address (#PCDATA) >
10 <!ELEMENT title (#PCDATA) >
11 <!ELEMENT body (salution?,p*)>
12 <!ELEMENT salution (#PCDATA) >
13 <!ELEMENT p (#PCDATA) >
14 <!ATTLIST email seqnum NMTOKEN #REQUIRED
15
importance (LOW|HIGH) "LOW">
|
<リスト1.email.dtd>
リスト1の1行目と2行目はエンティティ宣言です。この部分では、DTD内や文書インスタンス内で参照するエンティティの宣言を行います。エンティティについての詳しい説明はこのセクションでは行いませんが、多くの場合文書インスタンスの中で置換する文字列(内部エンティティ)やDTD自体の中で参照する文字列など(パラメータエンティティ)、またXMLファイルやテキストファイルなどの外部ファイル(外部エンティティ)を表します。
リスト1の1行目は内部エンティティを宣言するものです。内部エンティティ宣言は次のような書き方をします。
<!ENTITY エンティティ名 "エンティティ参照で置き換えたい文字列など">
(2重引用符の代わりにアポストロフィーを使っても良い)
リスト1の1行目の例ですと、エンティティ名は"salut"、置き換えたい文字列は”Dear Friends”ということになります。このエンティティをXMLインスタンス中で参照したい場合は次のようにします。
<salution>&salut; </salution>
このエンティティ参照をXMLプロセッサが処理すると&salut;の部分が"Dear Friends"に置き換えられます(処理の仕方はXMLプロセッサに依存します)。
リスト1の2行目はパラメータエンティティを宣言するものです。パラメータエンティティ宣言は次のような書き方をします。エンティティ名の前に"%"がつくことに注意してください。
<!ENTITY % エンティティ名 "エンティティ参照で置き換えたい文字列など">
リスト1の2行目の例ですと、エンティティ名はpersonal-data、置き換えたい文字列は”name,mail-address”ということになります。このパラメータエンティティを5、6、7行目で参照しています。
<!ELEMENT from (%personal-data;) >
パラメータエンティティの参照はエンティティ名の前に”%”をつけることに注意してください。
リスト1にはありませんが、外部エンティティというエンティティもあります。これは他のXMLファイル、テキストファイルなどの外部ファイルを表すものです。外部エンティティは次のようにして宣言します。
<!ENTITY エンティティ名 SYSTEM "ファイルのURL">
もしくは
<!ENTITY エンティティ名 PUBLIC "公開識別子" "ファイルのURL">
1番目はファイルのURLを使ってエンティティを宣言しています。キーワード"SYSTEM"を使用していることに注意してください。2番目は公開識別子を使用して宣言します。キーワード"PUBLIC"を使用していることに注意してください。XMLプロセッサは何らかの手段で公開識別子とエンティティを結び付けます(方法は各XMLプロセッサに依存します)。その方法でデータが得られない場合はファイルのURLを参照することになります。
また、外部ファイルの種類がXMLファイルではない場合、その外部ファイルの記法を指定することも出来ます(このような外部エンティティをパース対象外エンティティといいます)。パース対象外エンティティの宣言は次のようにして行います。
<!ENTITY エンティティ名 SYSTEM "ファイルのURL" NDATA 記法名>
あるいは
<!ENTITY エンティティ名 PUBLIC "公開識別子" "ファイルのURL" NDATA 記法名>
記法名はDTDの内部で記法宣言によって宣言されたものを使用します(記法宣言は後で取り上げます)。パース対象外エンティティの宣言の例を次に挙げておきます。
<!NOTATION PIC PUBLIC "http://…." >
……..
<!ENTITY fig001 SYSTEM "c:\fig\fig001.pic" NDATA PIC>
最初の行ではPICという記法名を宣言しています。次にエンティティ宣言ではNDATAの後でPICを指定していることに注目してください。このようにしてfig001というエンティティがPICという記法によるファイルであることが明示されました。
関連サービス
XMLスキーマの策定、作成業務
|