EntityReference

EntityReference 節点 (DOM)

[2] EntityReference は、 XML一般実体参照に対応します。

[3] HTML 及び XML の数値文字参照や HTML の文字実体参照, XML の定義済み一般実体参照 (amp など。) は予め展開されて Text 節などとして表現されます。

また、処理系は元の文書に存在した一般実体参照を、 EntityReference 節とはせずに、 展開してから DOM 木を作っても構いません。 (この場合実体参照であったことは分からなくなります。)

[4] 実体参照の参照先の実体 (Entity 節) が存在する時は、子節はそれと同じ内容になります。 存在しない時は、子節はなしになります。

子孫節はすべて読取専用になります。

[1] 実体参照節 (EntityReference node) は、 DOM1 では次の種類のを子供に持てます。

[5] EntityReference 界面は、 Node を継承します。

[6] この界面は拡張界面です。 DOM 1 HTML では、この界面は実装しなくても構いません。

[8] >>3 createEntityReference ('amp') とかしたら何が起こるのか、 DOM 仕様書には書かれていません。 何が起こるのでしょう?

未束縛の名前空間接頭辞

[9] 一般実体置換文は (XML名前空間に従って解釈した時に) 束縛されていない名前空間接頭辞が登場する可能性があります。 その時、Entity部分木ではprefixあり、namespaceURInullになります。対応するEntityReference部分木では解決された名前空間URIが入ります。

普通EntityReference部分木Entity部分木の複製になりますが、束縛されていない名前空間接頭辞がある場合は例外です。

[10] createEntityReferenceEntity部分木を複製します。つまりこの場合namespaceURInullのままです。

それを文書木に挿入したら解決されるかというと、されるともされないとも規定されていません。しかしLSモジュールunbound-prefix-in-entity-referenceという直列化時の誤りが定義されているくらいですから、しなくても問題なさそうです。

[11] normalizeDocumentメソッドの処理内容にはEntityReference置換木の更新が含まれています。

[12] が、 >>11 で具体的に何をすればよいのか分かりません。 namespaceURInullでもそのまま複製すればよいのでしょうか、それともその文脈で解決すればよいのでしょうか。 後者だとしたら、宣言されていない名前空間接頭辞が出たらどうすればよいのでしょうか。

元々EntityReference部分木Entity置換木も読取専用なので、更新に意味があるとしたら、名前空間に関する不整合の解消だけです。 しかし、EntityReference置換木の更新だけでは何を指しているのか分かりません。

[13] 設定entitiesfalseにしてnormalizeDocumentすると、実体参照展開されます。 とすると、元々EntityReference部分木で未束縛名前空間接頭辞があると (>>12 についてどういう処理をするのかによっては) それがEntityReference外であっても残ることになります。

また、cloneNodeadoptNodeimportNodeにも特に規定は無いようですから、未束縛名前空間接頭辞を持った節点実体参照外に存在することは普通に可能なようです。

[17] >>9 [DOM2, DOM3] (名無しさん)

[18] EntityReference 節点が未知の実体を表す場合、その節点子孫を持たず、 value などで使われる置換値空文字列となります。 DOM 3 (名無しさん)

[19] EntityReference 節点が未知の実体を表す場合、その節点子孫を持たず、 value などで使われる置換値空文字列となります。 DOM 3 (名無しさん)

[20] DOM水準1 (だけ) によれば、 EntityReference 節点子供 (参照されている Entity 節点置換値) の解決遅延評価にしても構いません。 例えば、 EntityReference 節点childNodes アクセスするなどの利用者の行為により評価が行われることにしても構いません。

(名無しさん)

メモ

[14] EntityReference子供Elementなどが来ることがありますが、そんなEntityReferenceAttr子供になることが禁止されていないように思えます。良いのでしょうか。。。 (名無しさん)

[15] >>14 はじめはそうでないとしても、normalizeDocumentimportNodeで途中からそうなることがあり得る。。。 (名無しさん)

[16] XMLでは属性値表記内の外部解析対象実体への参照整形式制約違反ですが、DOMにはそういう制約は無いみたいです。。。

[21] DOM3 に従えば Attrvalue正規化値のはずで、また textContent子孫テキストを連結したものであるはずでしたが、 EntityReference を含む場合には空白正規化によって実体参照を含む元の XML文書上の表現と正規化値が異なる場合があるはずで、これをどう扱うべきか一切説明がありませんでした。