第25回 外部実体における統一資源識別子(URI) Page 4

川俣 晶
株式会社ピーデー
2004/9/8

公開識別子の定義

 次は、公開識別子(Public identifier)という用語の定義に進む。

[Definition: In addition to a system identifier, an external identifier MAY include a public identifier.] An XML processor attempting to retrieve the entity's content MAY use any combination of the public and system identifiers as well as additional information outside the scope of this specification to try to generate an alternative URI reference. If the processor is unable to do so, it MUST use the URI reference specified in the system literal. Before a match is attempted, all strings of white space in the public identifier MUST be normalized to single space characters (#x20), and leading and trailing white space MUST be removed.
[定義:システム識別子以外に、外部実体は、公開識別子を含んでもよい。] 実体の内容を取り出すXMLプロセサは、公開識別子およびシステム識別子ならびにこの仕様の範囲外の付加的な情報をどのように組み合わせて、代わりの統一資源識別子(URI)参照の生成を試みてもよい。XMLプロセサがこれに失敗した場合は、システムリテラルとして指定した統一資源識別子(URI)参照を用いなければならない。マッチする前に、公開識別子内にある空白文字からなる文字列は、すべて単一のスペース文字(#x20)に正規化しなければならず、先頭および末尾の空白文字はすべて削除しなければならない。

 最初に公開識別子(Public identifier)という用語の定義から始まる。ここでは、公開識別子はXXであるという形の文章ではないが、これが公開識別子の用語定義である。公開識別子という概念そのものはSGML世界のものであって、XML勧告で新たに定義されたものではない。ここで定義されているのは、XML 1.0勧告内での公開識別子の位置付けといえる。それはここに書かれたとおり、「外部実体が含んでもよいもの」である。外部実体は必ずシステム識別子を持つ必要があるが、それに加えて公開識別子を持ってもよいし、持たなくてもよいということである。これで用語の定義は終わって次からは通常の文章になる。

 次はリソースにアクセスするためのURIを得るための方法についての規定である。すでに読んだように、システム識別子はリソースの在りかを示すURIである。それに加えて公開識別子を付加することもできる。もし、この両方からリソースにアクセスすることができる場合、どちらの情報を使うべきだろうか。さらに、ここでは、「この仕様の範囲外の付加的な情報」からURIを生成してもよいとまで記述されている。そして、ここでは、URI生成のためにこれらのどの方法を使ってもよい、としているわけである。つまり、システム識別子も公開識別子もどちらも扱える場合はどちらを使ってもよいし、ほかの方法を使ってもよい。

 次の文章では、URIの生成に失敗した場合はシステムリテラルとして指定したURIを使用するとしている。この段階で、公開識別子や「この仕様の範囲外の付加的な情報」を使うことはできない。ところで、ここでシステムリテラル(system literal)という見慣れない言葉が出てくるが、この用語は定義されていない。基本的には、生成規則[11] SystemLiteralに対応するものと考えておけばよいだろう。つまり、ここではシステム識別子に対応する。

 次の文章の意味は、属性値などで見られた正規化と似た作業を、公開識別子に対しても行う必要があるということである。正規化の内容は、連続した空白文字(XML 1.0的には#x20 | #x9 | #xD | #xAの4種類である)の並びを1つのスペース文字(#x20)にすることと、先頭と末尾の空白文字をすべて取り除くことである。

外部実体宣言の例

 最後に、外部実体宣言の例が示されている。

Examples of external entity declarations:

<!ENTITY open-hatch
SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml">
<!ENTITY open-hatch
PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN"
"http://www.textuality.com/boilerplate/OpenHatch.xml">
<!ENTITY hatch-pic
SYSTEM "../grafix/OpenHatch.gif"
NDATA gif >

 最初の例は、システム識別子だけを持つ外部実体宣言である。2番目の例は、システム識別子と公開識別子を持つ外部実体宣言である。最後は、NDATAキーワードが見えることから分かるとおり、記法を使用した外部解析対象外実体の宣言である。ここでNDATAキーワードの後に書かれたgifという文字列に対応する記法宣言がほかに存在する必要がある。

 さて、以上で「4.2.2 External Entities(4.2.2 外部実体)」を読み切った。前回と今回で外部実体の宣言について読んだが、前々回の内部実体と併せて、両者の相違を確認しておくとよいだろう。さて、外部実体は宣言しただけでは十分とはいえない。宣言された対象となる外部のリソースを用意しなければならない。その際、解析対象外実体であれば、どのようなリソースでもよいので、その内容についてXML 1.0勧告が制約を付けることはない。しかし、解析対象実体はXMLプロセッサが解析するものなので、どのような構文であるべきか、詳細が規定されている。次回は、外部解析対象実体の詳細を規定する「4.3 Parsed Entities(4.3 解析対象実体)」を読んでいく。外部解析対象実体は文書実体とは似て非なるものなので、そこを確認しながら、外部実体への理解を深めていこう。(次回に続く)

4/4

 Index
やさしく読む「XML 1.0勧告」 第25回
外部実体における統一資源識別子(URI)
  Page 1
・外部実体の後半
・システム識別子の定義
  Page 2
・統一資源識別子(URI)
・URIのリダイレクト
  Page 3
・URIにおける文字の別扱い
・文字の別扱いの手順
Page 4
・公開識別子(Public identifier)の定義
・外部実体宣言の例


連載 やさしく読む「XML 1.0勧告」


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間