XMLにおける実体
「>」や「&」をエスケープ処理的にそのまま表示したい場合や、ユーザー定義の文字列をスタンプ的に何回も埋め込めたい場合、実体参照というものがXMLにはあるが、XMLに対して参照を埋め込む外部の画像ファイルなども 実体(entity) にあたるらしい。
DTDでの実体宣言による「.png」や「.gif」画像のXML文書への挿入の仕方
※pngなどの画像はパーサー(Chromeなどに搭載されているXMLを読み込むソフトウェア)がXML文書として解析できないため、解析対象外実体にあたる。その挿入は以下の(1)~(4)の手順を踏む。
(1)記法宣言
XMLに埋め込みたい解析対象外実体(ここでは画像)などがどのようなデータ形式になっているかを定義
※ここで定義した記法(≒ 「データ形式ラベル」)の名前を 記法名と呼ぶ。
<!NOTATION 記法名 SYSTEM "システム識別子">
<!NOTATION png SYSTEM "image/png">
<!--「png という名前は、この種類の外部データ(PNG画像)を表します」とDTDに登録する -->
通常何らかの宣言における SYSTEM の後には
<!DOCTYPE book SYSTEM "book.dtd">
のように参照したいファイルへの相対パスを書くことが多いが、
NOTATIONの場合はどこかに存在しているファイルを参照しているわけではない
(実際は任意のシステム識別子が書けるが、)慣例的にMIME typeを書くことが多い
画像の記法名をpngにする必要はなく、ユーザーで決めてよいため
<!NOTATION myPictureFormat SYSTEM "image/png">
とかでもよい。その場合、次の実体宣言の NDATAの後ろの記法名をそれに合わせる
(2)外部解析対象外実体の宣言
<!ENTITY 実体名 SYSTEM "外部実体の場所を示すURI" NDATA 記法名>
<!ENTITY logo SYSTEM "logo.png" NDATA png>
<!--'./logo.png'にある「logo.png」というファイルは「パーサーの解析対象でない外部ファイル」で -->
<!-- 記法宣言(=NOTATION宣言)で定義した「png」という形式、結果としてここではPNG画像であると登録 -->
外部実体の場所を示すURI
DTDがあるフォルダから見た外部実体(ここでは画像ファイル)への相対パス
外部実体の「外部」は 「XML文書本体の外にある別ファイル / 外部リソースを参照する」 の外部
(3)外部解析対象外実体を属性値として入れる属性を属性リスト宣言で宣言する
<!ATTLIST 要素名 属性名 ENTITY "デフォルト値">
<!ATTLIST img file ENTITY #REQUIRED>
<!--img要素のfile属性には値を入れることを必須としENTITY型の値を入れるものとする-->
HTMLでのimgタグはfile属性をそもそも使わないが、今考えているのはXML・DTDであり、ここでの属性名はあくまで任意であるため設定できるものである
※上記の属性リスト宣言の段階でimgタグというものにfile属性を付与しているため、以下の形でも良い
<!ATTLIST img src ENTITY #REQUIRED>
<!--img要素はsrc属性を持ち、src属性には値を入れることを必須としENTITY型の値を入れるものとする-->
(4)XML文書での参照
<img file="logo"/>
<!--事前にsample.dtdを読み込む必要あり-->
(3)の属性リスト宣言において
<!ATTLIST img src ENTITY #REQUIRED>
とした場合は
<img src="logo"/>
とする。
ここまで来てやっと画像の挿入・・はい。面倒くさいですね(-_-;)
ということで実務では代替策をとることが多いらしい
実務における一般的な画像の挿入に関する記事を書き次第ここに貼り付けます。
主な参考資料
①XMLマスター教科書 ベーシックV2 森田 浩美・中原 敬子 (著)
②MIMEタイプって何者? @Hamoto in ARアドバンストテクノロジ株式会社(ARI)さんQiita
https://qiita.com/Hamoto/items/dfff7e43e27887164aae
③エスケープ処理とは 徳田 啓さん(Xアカウント:@senseshare_inc)技術ブログ
https://blog.senseshare.jp/escape.html
④MDN公式 HTML <img> 画像埋め込み要素
https://developer.mozilla.org/ja/docs/Web/HTML/Reference/Elements/img