[1] XML情報集合の宣言基底URI
特性は、
非解析対象実体情報項目または記法情報項目に対応するマーク宣言のシステム識別子を解決するための基底URIを値として持ちます。
[3] XML情報集合はXML基底を参照していますが XML情報集合 1、XML情報集合にマーク宣言の基底URIに関する記述はありません。
[28] 相対URLを指定した場合の基底URLは、原則として、 実体宣言が現れた資源の位置です >>23。
[33] >>28 の資源とは、実体宣言の最初の <
が実体として構文解析された時にその <
を含んでいた外部実体です >>23。
[35] URL は型録によって置き換えられたり HTTPリダイレクトされたりすることがありますが、 基底URLとして使うのは最終的な URL です >>23。
[4] 非解析対象実体情報項目の場合
システム識別子を解決するために使うべき基底URI、 すなわち実体宣言が出現する資源の基底URIです。 XML情報集合 2.9
[5] 記法情報項目の場合
システム識別子を解決するために使うべき基底URI、 すなわち記法宣言が出現する資源の基底URIです。 XML情報集合 2.10
[7] システム識別子の基底URI
XMLシステム識別子の基底URIは、
マーク宣言の最初の<
をマーク宣言として解釈する時点で含んでいた外部実体
(文書実体、外部部分集合実体、または外部引数実体)
の基底URIです。 XML 4.2.2
[6] 逃避
XMLの仕様によればシステム識別子をURIとして使うために逃避が必要です XML 4.2.2 が、 この特性の値は逃避前のものです。 XML情報集合 1
[8] 応用依存
[101] SE の errata の修正 E18 <http://www.w3.org/XML/xml-V10-2e-errata#E18> (2001-04-24) について。
4.2.2 節 <http://www.w3.org/TR/REC-xml#sec-external-ent> で、
XML 1.0 仕様書の適用範囲外の情報が提供されない限り、 (例えば特定の DTD で規定された特別な XML 要素型とか、 特定の応用の仕様で定義されている処理指令とかで指定されない限り、) 相対 URI はその実体宣言が出現する資源の位置からの関係とします。 従って URI は文書実体からの関係であったり、外部 DTD 部分集合を含んでいる実体からのであったり、 或いは他の外部引数実体からのものであったりします。
とある件について、次の規定が追加されました。
これは宣言を開始させる
<
が、 宣言の解釈される時点で含まれている外部実体であると定義します。
この修正は、相対 URI の基底を決定する目的において、 正確にはどこで宣言が行われたかを明確にします。
example.xml
<!DOCTYPE foo [
<!ENTITY % pe SYSTEM "subdir1/pe">
%pe;
%intpe;
]>
<foo>&ent;</foo>
subdir1/pe
<!ENTITY % extpe SYSTEM "../subdir2/extpe">
<!ENTITY % intpe "%extpe;">
subdir2/extpe
<!ENTITY ent SYSTEM 'entfile'>
ent
の宣言を構成する文字はsubdir2/extpe
中に出現しますが、 ここでは宣言として解析されません。 単にintpe
の置換文を構成する文字として扱われるだけです。 それはintpe
が解析されるまでは宣言として解析されません。intpe
が解析されるのはそれを含めている外部実体が文書実体である所です。 従って適切な基底 URI はexample.xml
の基底 URI となります。使用されるのは含めている外部実体である理由は、 内部実体がその基底 URI 情報を伝達しないことであると言えるでしょう。 確かに、内部実体はその置換文だけを持っています。
example.xml
が%intpe;
ではなく%extpe;
を含んでいたとすると、 話は変わってきます。subdir2/extpe
の内容は宣言として解析され、適当な基底 URI はsubdir2
の基底 URI となります。
example.xml
<!DOCTYPE foo [
<!ENTITY % extpe SYSTEM "../subdir2/extpe">
%extpe;
]>
<foo>&ent;</foo>
subdir2/extpe
<!ENTITY ent SYSTEM 'entfile'>
[104] SGML 的にはどっちの例も、宣言が評価されるのは DTD であって外部解析実体にはならないと思うのですが、 この考えは間違ってますか? (実体宣言で宣言された解析実体の内部実体と外部実体の差異は置換文の段階で存在しない (どちらも基底 URI を保持し得ない) のではないでしょうか?)
[105] >>104 SGML も XML も参照を置換文で置き換える, 置換結果はその文脈の構文と意味を満たさねばならない、 という規定は共通。ただ、 SGML の仕様的にはこういう処理を意図しているような臭いがぷんぷんする。 (あってる? 教えて、偉い人。)
文書実体 <foo>aiueo &ent; abcdef</foo>
1) ^ ^ 2) ^ 5)
実体 ent いろはにほへとEe
^ 3) ^ 4)
この処理モデルなら、実体 ent 中で発見されたマーク (を反映した物体) の属性として元々どこの実体に所属していたのかという情報を与える余地はある。
でも、このやり方なら内部実体だろうが外部実体だろうが元の URI は覚えてられるよなあ。。。
[6] 実際問題としては、今の XML errata の解釈辺りで手を売っとかないと、モジュール化 DTD で酷い目に合いますから、妥当なところではあります。
[8] >>4-5 >>2 の説明によれば重要な意義を持つのは内部実体か外部実体かです。
つまり言い換えると、引数実体の参照が評価される場所が実体宣言の中 (<!ENTITY % ent2 "%ent;">) か
DTD の地の場所 (ds
)
(<!foo>%ent;<!bar>) かです。
>>105 の処理とこのことを考え合わせればうまく説明が付きません?
[134] [103]>>102 の後半の例: の"extpe"のURIの記述は正しいのでしょうか? "../"が余計な様に思うんですが・・・ (名無しさん )