2005年06月18日
川俣晶の縁側ソフトウェア技術雑記total 3922 count

ちょっとややこしいぞ! XMLの定義済み実体が使用されたことをDOMツリー上で検出できない理由!?

Written By: 川俣 晶連絡先

 user.gr.jpのC#メーリングリストでちょっと悩ましい質問と出会ったので、少し調べてしまいました。

 質問の趣旨は、"という定義済み実体を(おそらく)DOMツリーに読み込んで書き出した時に、"という表記のまま保持したいというものでした。

簡単な話だと思った……最初はね §

 最初は、保持できなくて当たり前と思いましたが、よく考えるとそうではないことに気付きました。

 実体参照は、DOMにおいて、実体参照ノードに展開されます。

 それゆえに、実体参照ノードを出力する際に、実体参照の表記に戻すことができます。

根拠を求めてXML 1.0 Recommendationを彷徨う §

 では、定義済み実体の場合は、通常の実体参照とは扱いが違うのでしょうか?

 直感的に、おそらく違うはずだと思いました。そして、その根拠を求めて、XML 1.0 Recommendationを調べました。

 しかし、XML 1.0 Recommendationでは、定義済み実体とは定義済みと見なす実体である、という以上の規定はありません。文字参照が別格であり、保持されないことは読み取れますが、定義済み実体についてはそのような規定を見つけられませんでした。

 そこで途方に暮れてしまいました。

 もしや、.NET FrameworkのXMLパーサが規定違反の実装なのだろうか、とも思いました。

 しかし、そこで非常に良いことに気付きました。

 DOMではどう規定されているのだろう。

迫撃! トリプルDOM! §

 とりあえず、DOM Level-1 Coreの仕様書を開きました。

 ああ、載っている! 確かに根拠が載っている!

 更にLevel-2も調べます。

 同じことが書いてあります。

 更にLevel-3も調べます。

 目次構成が変わっていますが、やはり同じことが書いてあります。

What is the Document Object Model?

より

Numeric character references, and references to the pre-defined entities in HTML and XML, are replaced by the single character that makes up the entity's replacement.

(いい加減な訳: 数値による文字参照と、HTMLとXMLにおいて定義済みの実体への参照は、実体の置き換えを構成する1つの文字に置き換えられる。)

 同じ文書の3バージョンを調べるという無駄なトリプル労力を使ってしまった気がしますが、とりあえず定義済み実体参照が書かれていたという事実を保持することは、DOMの仕様上、不可能であると考えて良さそうです。

 (と思うけれど、文書を全て読んで出した結論ではないから、もし間違っていたら直そう……)

裏を返すと…… §

 定義済み実体を保持できないという仕様は、XML 1.0 Recommendationではなく、DOMに根拠があることになります。

 この結論は裏を返すと、DOMではないAPIを使用した場合、定義済み実体を保持できる可能性があるということです。

 それがどのようなAPIかは分かりませんが、可能性として検討するのは面白いかもしれません。

 ただ、それによって、完全に同じ文字列を再現できるXMLパーサを開発できるかというと、それはおそらく無理です。XML 1.0 Recommendationには、異なる表記を完全に同一と見なす規定が含まれるからです。定義済み実体は、そのような規定の範囲内に含まれないため保持するという選択が可能になる(かもしれない)だけで、全てを保持することはおそらく不可能です。

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2005年
06月
25日
FreeBSD 5.4で安易にircdを起動する方法についてのメモ
3days 0 count
total 4316 count
【技術雑記】の前のコンテンツ
2005年
06月
14日
目から鱗が落ちた! Cのラベル付き文という構文の定義!?
3days 0 count
total 2973 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20050618135120
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.