付録E.3 外部識別子の解釈
XMLドキュメントでは,外部のファイルにあるDTDなど,外部エンティティの場所を示すために外部識別子が使用されます。外部識別子には,システム識別子と公開識別子があります。XMLパーサは,この外部識別子を解釈して外部エンティティの内容を参照します。
システム識別子には,ファイルの位置を示すパス名を直接記述します。
XMLパーサで使用するシステム識別子は,標準的なURI形式の仕様と次の点で異なります。
-
非ASCII文字(多バイト文字)を指定できます。このため,漢字を使用したファイル名を指定できます。
-
%HH形式(HH:16進数)のエスケープは最初に展開されるため,特殊記号のエスケープとしては使用できません。
公開識別子には,外部エンティティを識別する文字列を記述します。XML連携機能では,カタログファイルを用いて公開識別子と外部エンティティの対応づけができます。公開識別子とカタログファイルの詳細については,「9.3.3 公開識別子が指定されたXMLドキュメント」を参照してください。
XMLパーサは,公開識別子を解釈する場合,XML仕様に従った公開識別子の正規化を行います。
公開識別子を指定する場合には,システム識別子も同時に指定します。公開識別子の解決ができない場合(カタログファイルを指定していない場合,公開識別子が示す外部エンティティが存在しない場合など),システム識別子が外部エンティティの参照に用いられます。
- 〈この項の構成〉
(1) システム識別子の解決
通常のファイルを指定する際に絶対パスや相対パスを指定するように,システム識別子でも絶対パスや相対パスでの指定ができます。
-
システム識別子を絶対パスで指定した場合,指定されたパスがそのままシステム識別子として解釈されます。
-
システム識別子を相対パスで指定した場合,相対パスは次のように解釈されます。
- (アクセス対象のXMLドキュメントがファイル上にある場合)
-
アクセス対象のXMLドキュメントが存在するディレクトリ(フォルダ)からの相対パスとなります。
なお,アクセス対象のXMLドキュメントのパスが相対パスで指定された場合は,その相対パスはプロセスのカレントディレクトリ(フォルダ)が基点になります。
- (アクセス対象のXMLドキュメントがバッファ(メモリ)上にある場合)
-
プロセスのカレントディレクトリ(フォルダ)からの相対パスとなります。
相対パスの場合のシステム識別子の解決例を次に示します。
アクセス対象のXMLドキュメントのパス |
参照する外部エンティティのシステム識別子 |
解決されたシステム識別子 |
---|---|---|
"dir1/MyDoc.xml" |
"dir2/MyDtd.dtd" |
"dir1/dir2/MyDtd.dtd" |
"/home/dir1/MyDoc1.xml" |
"dir2/MyDtd.dtd" |
"/home/dir1/dir2/MyDtd.dtd" |
(2) 使用できるシステム識別子
XMLパーサで使用できるシステム識別子の例を示します。
(a) 共通の記述形式
OSに依存しないXMLドキュメントを記述したい場合は,次に示す形式で記述するようにしてください。
-
絶対パス指定のシステム識別子の例
共通の記述形式はありません。
-
相対パス指定のシステム識別子の例
-
MyDirectory/MyXMLFile.xml
-
(b) UNIXで使用できる記述形式
-
絶対パス指定の識別子の例
-
/usr/MyDirectory/MyXMLFile.xml
-
-
相対パス指定のシステム識別子の例
「(a) 共通の記述形式」に示す形式で記述してください。
(c) Windowsで使用できる記述形式
-
絶対パス指定のシステム識別子の例
-
C:¥usr¥MyDirectory¥MyXMLFile.xml
-
C:/usr/MyDirectory/MyXMLFile.xml
-
-
相対パス指定のシステム識別子の例
-
MyDirectory¥MyXMLFile.xml
-
MyDirectory/MyXMLFile.xml
-