[xyzzy:00803] Re: XML モード
- Subject: [xyzzy:00803] Re: XML モード
- From: mwakahara <wakahara@xxxxxxxxxxxxxxx>
- X-mailer: Mozilla 4.05 [ja] (Win95; I)
こんばんわ。
> | えーっと、両方とも、仕様的にはそうでなければなりません。
>
> '%'や'&'を別の文字に切り替える機能はないんですね?
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 "&">と書いてもいい、というか、ブラウザーがそれでちゃんと動くようにで
きているのでいいのです。
XMLもおんなじと考えていいと思います。
*文字列エンティティ - 文字列関係。&myname;として、mwakaharaになるみたいな。こ
れは簡単な文字列置換です。ただ元は&name;だったということを覚えておかないとまず
いです。
<!ENTITY myname "mwakahara">
*ファイルエンティティ - 外部ファイル関係。これについても単純に置換ですが、元は
エンティティだったということを覚えておかないとまずいです。
<!ENTITY myfile SYSTEM "c:\data\myfile.sgm">
> | あと、DTDはダイナミックに取り込めなくても、たとえば、lispで書いたものを
> | あらかじめ用意するということでもいいかと思います。
>
> DTD の定義を手で lisp に落とすよりは、DTD を取り込む方が楽そう(^^;
もちろん運用を考えるとその方が断然楽と思います。でも実装がかなり大変になるか
と、トウシロには思えます。
以上、よろしくお願いします。
mwakahara <wakahara@xxxxxxxxxxxxxxx>