[2] EntityReference
は、 XML
の一般実体参照に対応します。
[3] HTML 及び XML の数値文字参照や HTML
の文字実体参照, XML の定義済み一般実体参照
(amp
など。) は予め展開されて Text
節などとして表現されます。
また、処理系は元の文書に存在した一般実体参照を、
EntityReference
節とはせずに、
展開してから DOM 木を作っても構いません。
(この場合実体参照であったことは分からなくなります。)
[4] 実体参照の参照先の実体 (Entity
節)
が存在する時は、子節はそれと同じ内容になります。
存在しない時は、子節はなしになります。
子孫節はすべて読取専用になります。
[1] 実体参照節は、 DOM1 では次の種類の節を子供に持てます。
[5] EntityReference
界面は、 Node
を継承します。
[6] この界面は拡張界面です。 DOM 1 HTML では、この界面は実装しなくても構いません。
[8]
>>3 createEntityReference ('amp')
とかしたら何が起こるのか、 DOM 仕様書には書かれていません。
何が起こるのでしょう?
[9]
一般実体の置換文は (XML名前空間に従って解釈した時に)
束縛されていない名前空間接頭辞が登場する可能性があります。
その時、Entity
部分木ではprefix
あり、namespaceURI
がnull
になります。対応するEntityReference
部分木では解決された名前空間URIが入ります。
[10]
createEntityReference
はEntity
部分木を複製します。つまりこの場合namespaceURI
はnull
のままです。
それを文書木に挿入したら解決されるかというと、されるともされないとも規定されていません。しかしLSモジュールでunbound-prefix-in-entity-reference
という直列化時の誤りが定義されているくらいですから、しなくても問題なさそうです。
[11]
normalizeDocument
メソッドの処理内容にはEntityReference
置換木の更新が含まれています。
[12]
が、 >>11 で具体的に何をすればよいのか分かりません。
namespaceURI
がnull
でもそのまま複製すればよいのでしょうか、それともその文脈で解決すればよいのでしょうか。
後者だとしたら、宣言されていない名前空間接頭辞が出たらどうすればよいのでしょうか。
元々EntityReference
部分木もEntity
置換木も読取専用なので、更新
に意味があるとしたら、名前空間に関する不整合の解消だけです。
しかし、
だけでは何を指しているのか分かりません。EntityReference
置換木の更新
[13]
設定entities
をfalse
にしてnormalizeDocument
すると、実体参照は展開されます。
とすると、元々EntityReference
部分木で未束縛な名前空間接頭辞があると
(>>12 についてどういう処理をするのかによっては) それがEntityReference
外であっても残ることになります。
また、cloneNode
やadoptNode
やimportNode
にも特に規定は無いようですから、未束縛な名前空間接頭辞を持った節点が実体参照外に存在することは普通に可能なようです。
[18]
EntityReference
節点が未知の実体を表す場合、その節点は子孫を持たず、
value
などで使われる置換値は空文字列となります。
DOM 3
(名無しさん)
[19]
EntityReference
節点が未知の実体を表す場合、その節点は子孫を持たず、
value
などで使われる置換値は空文字列となります。
DOM 3
(名無しさん)
[20]
DOM水準1 (だけ) によれば、 EntityReference
節点の子供 (参照されている Entity
節点の置換値) の解決は遅延評価にしても構いません。
例えば、 EntityReference
節点の
childNodes
値にアクセスするなどの利用者の行為により評価が行われることにしても構いません。
(名無しさん)
[14]
EntityReference
の子供にElement
などが来ることがありますが、そんなEntityReference
がAttr
の子供になることが禁止されていないように思えます。良いのでしょうか。。。
(名無しさん)
[15]
>>14 はじめはそうでないとしても、normalizeDocument
やimportNode
で途中からそうなることがあり得る。。。
(名無しさん)
[16] XMLでは属性値表記内の外部解析対象実体への参照は整形式制約違反ですが、DOMにはそういう制約は無いみたいです。。。
[21] DOM3 に従えば Attr
の value
は正規化値のはずで、また textContent
や子孫のテキストを連結したものであるはずでしたが、
EntityReference
を含む場合には空白の正規化によって実体参照を含む元の
XML文書上の表現と正規化値が異なる場合があるはずで、これをどう扱うべきか一切説明がありませんでした。
EntityReference
部分木はEntity
部分木の複製になりますが、束縛されていない名前空間接頭辞がある場合は例外です。