6. エンティティ宣言
本章では、エンティティについて解説します。エンティティとはなにか、エンティティの種類や、宣言の方法などを記述します。
- 6.1 エンティティ
- 6.2 内部エンティティ
- 6.3 外部エンティティ
- 6.4 エンティティ宣言に関する注意
- 6.5 解析対象外エンティティとNOTATION宣言
- 6.6 パラメーターエンティティ
- 6.7 まとめ
- (参考1) standalone文書
- (参考2) 他のスキーマ言語
6.1 エンティティ
要素や属性は、XML文書の論理構造を定義するものでした。エンティティは、XML文書の物理構造を表すものです。エンティティは、日本語で実体のことで、、XML文書内で使用される文字列やファイルなどの記憶単位を指します。物理構造のルートとなるエンティティのことを文書エンティティと呼びます。そのほかにも置換文字列や、参照ファイルなどがエンティティになります。
置換文字列や参照ファイルなどのエンティティについて、例を示しながらもう少し見ていきたいと思います。以下のような文章があったとします。
インフォテリア株式会社(本社:東京都品川区、代表取締役社長:平野洋一郎)は、XMLネイティブのBtoB (企業間電子商取引)サーバー「Asteria for RosettaNet」(アステリア フォー ロゼッタネット) をLinuxに対応させ、2001年5月29日より提供します。 インフォテリアではすでにSolarisに対応した「Asteria for RosettaNet」を2001年1月31日より 出荷しており、このたび、市場のニーズに対応して、コストパフォーマンスにすぐれ、 最近ではミッションクリティカルなシステムでも多くの実績を誇るプラットフォームであるLinux環境 においても「Asteria for RosettaNet」の導入を実現しました。Linuxにも対応した 「Asteria for RosettaNet」の提供により、BtoBへの参加がさらに幅広い層で実現されます。 「Asteria for RosettaNet」の価格は2,400万円(税別)からとなります。
上の文章では、"Asteria for RosettaNet"という語句が5回記述されています。この"Asteria for RossattaNet"という名称が変更になったり、表記方法を変更したい場合、文章中を検索し変更する作業は、面倒ですし、ミスも起こりやすいでしょう。このような場合、"Asteria for RossetaNet"を置換文字列として登録しておき、 XMLプロセッサ処理時に展開するほうが、保守が容易です。
インフォテリア株式会社(本社:東京都品川区、代表取締役社長:平野洋一郎)は、XMLネイティブのBtoB (企業間電子商取引)サーバー「&AfR;」(アステリア フォー ロゼッタネット) をLinuxに対応させ、2001年5月29日より提供します。 インフォテリアではすでにSolarisに対応した「&AfR;」を2001年1月31日より 出荷しており、このたび、市場のニーズに対応して、コストパフォーマンスにすぐれ、 最近ではミッションクリティカルなシステムでも多くの実績を誇るプラットフォームであるLinux環境 においても「&AfR;」の導入を実現しました。Linuxにも対応した 「&AfR;」の提供により、BtoBへの参加がさらに幅広い層で実現されます。 「&AfR;」の価格は2,400万円(税別)からとなります。
上の例では、"Asteria for RosettaNet"と記述したい場所に"&AfR;"と記述しています。そしてDTD内で、AfRは"Asteria for RosettaNet"であると宣言しています。XMLプロセッサは、"&"と";"で囲まれた部分は、置換すべき文字列であると判断し、DTDの宣言に従い、AfRをAsteria for RosettaNetに変換して解釈します。これにより、この文字列を変更したい場合は、DTD1内の宣言一箇所を変更すればよいことになります。
また、マニュアル部分や注釈部分を別ファイルにして参照する方が便利な場合があります。
<マニュアル> &manual1; </マニュアル>
上の例では、マニュアルを記述したいところに"&manual1"と記述しています。そしてDTD内でmanual1は、ファイルmanual1であると宣言します。以下のようなmanual1ファイルを別に用意しておきます。
このマニュアルは、XMLにより言語の設計を行う人のためのXMLの基本的な構文を解説するものです。 以下の章からなります。…
すると文字列の場合と同じように、XMLプロセッサは"&"と";"で囲まれた部分は、置換すべきものであると判断し、DTDの宣言に従い、manual1をファイルmanual1に変換して以下のような文章であると解釈します。
<マニュアル> このマニュアルは、XMLにより言語の設計を行う人のためのXMLの基本的な構文を解説するものです。 以下の章からなります。… </マニュアル>
このように、エンティティとは、ファイル、置換文字列のように、何らかの形でXML文書の一部となるデータを格納しているものをいいます。
エンティティは、DTD内で宣言します。エンティティ宣言は以下の構文で行います。
<!ENTITY エンティティ名 エンティティの内容>
文書内でエンティティを参照するときは、以下のように、エンティティ名を゛&゛と";"で囲んで記述します。
&エンティティ名;
文書中、&と;によりエンティティを参照するように記述した場合、置き換えた後の文章がWell FormedなXML文書である必要があります。
6.2 内部エンティティ
内部エンティティとは、エンティティ宣言の中に、直接エンティティの内容が記入されているエンティティです。以下のように宣言します。
<!ENTITY エンティティ名゛エンティティ参照の際に置き換えられる文字列゛>
例えば、以下のようにバンコク正式名称というエンティティをDTD内で宣言します。
<!ENTITY バンコク正式名称 "クルンテープ・マハーナコーン・アモーン・ラタナコーシン・マヒンタラ・アユタヤー・ マハーディロックポップ・ノッパラッタナ・ラーチャターニー・ブリーロム・ウドム・ラーチャニウェート・マハーサター ン・アモーンビーマン・アワターンサティト・サッカタットティヤ・ウィサヌカム・プラシット"> ... タイの首都であるバンコクは、正式名称「&バンコク正式名称;」といい、世界で最も長い名前の都市のひとつです。
上のXML文書中バンコク正式名称エンティティは、宣言中の「クルンテープ・マハーナコーン・アモーン...」に置き換えられて解釈されます。内部エンティティ内では、その中でさらに別のエンティティを参照することができます。
<!ENTITY 暖色 "赤、オレンジ、黄色”> <!ENTITY 色 "&暖色;、緑、青、紫”>
上のように宣言した場合、色エンティティの内容は、"赤、オレンジ、黄色、緑、青、紫"になります。エンティティ内で別のエンティティを参照する場合には、参照するエンティティがその前に宣言されている必要があります。上の例ですと、暖色エンティティは、色エンティティの前に宣言されている必要があります。