- 6.1 エンティティ
- 6.2 内部エンティティ
- 6.3 外部エンティティ
- 6.4 エンティティ宣言に関する注意
- 6.5 解析対象外エンティティとNOTATION宣言
- 6.6 パラメーターエンティティ
- 6.7 まとめ
- (参考1) standalone文書
- (参考2) 他のスキーマ言語
6.3 外部エンティティ
内部エンティティに対して、エンティティの内容が外部に存在するファイルに収められている場合、そのエンティティを外部エンティティと呼びます。外部のファイルを指定する方法には、システム識別子を使用する方法と公開識別子を使用する方法と2つあります。システム識別子を使用してファイルの場所を特定する場合の構文は以下のとおりです。
<!ENTITY エンティティ名 SYSTEM " ファイルのURI名" >
公開識別子を使用してファイルの場所を特定する場合の構文は以下のとおりです。
<!ENTITY エンティティ名 PUBLIC "公開識別子" " ファイルのURI名" >
システム識別子や公開識別子に関しての詳細な情報は、「3.4 SYSTEMとPUBLIC」をご覧ください。
外部エンティティの例を示します。以下をheaderエンティティを外部エンティティとして宣言しています。
<!ENTITY header SYSTEM "http://www.4dd.co.jp/header"> ... <html> &header; <body> ...
さらに、エンティティ宣言内で指定されている場所に、以下のようなファイルを置きます。
<head> <!----> <title>Yahoo! JAPAN </title> <script language="javascript"> <!-- var remote = null; function remoteStart() { remote = window.open('', 'yahooRemote', 'width=250,height=300,scrollbars=1,resizable=yes'); if (remote != null) { if (remote.opener == null) { remote.opener = self; } remote.location.href = 'http://www.yahoo.co.jp/remote/?http://www.yahoo.co.jp/remote/remote.html'; } // --> </script> </head>
文書をXMLプロセッサが処理する場合、header部分をheaderファイル内の記述に置き換えて解釈します。
ところで、XML文書のXML宣言中には、ファイルの文字コードを指定する部分がありました。この文字コードの指定は、ルート要素が存在する文書エンティティに対する文字コード指定であり、外部ファイルの文字コードは別に指定する必要があります。文字コードを指定するためには、参照するファイルの先頭にテキスト宣言を記述します。テキスト宣言は、以下の形式で行います。
<?xml version="1.0" encoding="文字コードの名前"?>
テキスト宣言はXML宣言と非常に似ていますが、以下の部分が異なります。
- versionは必須ではない。version情報は記述しなくてもよいが、記述する場合は必ず、文字コード指定の前に記述する。
- 文字コード指定は、必須。
XML宣言やテキスト宣言の文字コード宣言は、参照するエンティティには継承されません。よって、文書エンティティがUnicode以外の文字コードを使用している場合は、外部に存在するエンティティは必ず、テキスト宣言内で、文字コードを指定する必要があります。また、外部サブセットや、パラメータエンティティで参照される外部のDTDファイルも、それがUnicodeで記述されていない場合、必ず、テキスト宣言を行って、文字コードを指定する必要があります。