[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:00803] Re: XML モード



こんばんわ。

> | えーっと、両方とも、仕様的にはそうでなければなりません。
>
> '%'や'&'を別の文字に切り替える機能はないんですね?

SGMLではSGML宣言とやらで切り替えることはできたのですが。
まぁもっともSGMLアプリケーションではそのへんが決め打ちになっているものがほとん
どだと思いますが。
そのへんの事情が反映されてXMLでは固定になったと思います。

> | 上の方はパラメタエンティティといって、DTD(インスタンスではなく)の中で
> | 使うエンティティの宣言です。
>
> てことは、DTD を読んで展開してしまえば忘れてしまって構わないと
> いうことですね。

そうですね。

> | 下の方は一般のエンティティ宣言でDTDではなくインスタンスで使うエンティテ
> | ィの宣言です。
>
> で、こちらの方は DTD では展開しないと。

そうです。インスタンス中に現れたときに展開します。ただし、表示的には展開しても
データ的にはエンティティであることを残しておいてほしいです。展開して元に戻らな
いなら、エンティティ表現のままの方がいいと思います。

> | &について、XMLからはXMLの仕様に取り込まれました。
>
> てことは DTD には出てこない?

宣言しなくてもいいということです。ですから明示的にDTDに書く必要はありません。
つまり、インスタンスを書く人の仕事ではなく、XMLアプリケーションの仕事というよ
うに扱いが変わったということになります。

&の他にも、<とかあったと思います。すいません、アンチョコが会社なので水
曜日にはお知らせ出来ると思います。

> | &とあっても、xyzzyに入る前に都合のいい文字列に展開してから、出力する
> | 前に再び&に戻せればそれで問題ないと思います。
>
> ここら辺はどうするか全然考えてないんですよね、実は(^^;

エンティティには大きく3種類あって、

*文字エンティティ - 文字関係。&や<やéなど。
SGMLでは一般的に  <!ENTITY amp SDATA "[amp]">のように宣言して、アプリケーショ
ンが[amp]を読んで、38を持ってくるという処理をします。amp=36というのは別にアプ
リケーション用に定義します。
これはSGMLがいろいろなシステムを対象としているためで、そのころの世の中のシステ
ムは必ずASCIIというわけではなかったためです。EBCDICなど。
HTMLブラウザーの場合はシステムのコードがASCIIと限定できるので、<!ENTITY amp
CDATA "&#38">と書いてもいい、というか、ブラウザーがそれでちゃんと動くようにで
きているのでいいのです。
XMLもおんなじと考えていいと思います。

*文字列エンティティ - 文字列関係。&myname;として、mwakaharaになるみたいな。こ
れは簡単な文字列置換です。ただ元は&name;だったということを覚えておかないとまず
いです。
<!ENTITY myname "mwakahara">

*ファイルエンティティ - 外部ファイル関係。これについても単純に置換ですが、元は
エンティティだったということを覚えておかないとまずいです。
<!ENTITY myfile SYSTEM "c:\data\myfile.sgm">

> | あと、DTDはダイナミックに取り込めなくても、たとえば、lispで書いたものを
> | あらかじめ用意するということでもいいかと思います。
>
> DTD の定義を手で lisp に落とすよりは、DTD を取り込む方が楽そう(^^;

もちろん運用を考えるとその方が断然楽と思います。でも実装がかなり大変になるか
と、トウシロには思えます。


以上、よろしくお願いします。

mwakahara <wakahara@xxxxxxxxxxxxxxx>

Index Home