- - PR -
standalone宣言の解説について
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2002-01-15 23:36
いつも参考にさせていただいております。
「技術者のためのXML再入門 第4回」の記事で、standalone宣言の解説の表題が「外部DTDを参照するかどうかの宣言」となっていますが、これは正しくないのではないでしょうか。本文の、
というのも、なんかへんなきがしますが・・。 standalone宣言は「文書の外に文書の内容を変化させるような記述が存在しない」ということを述べる宣言だと思います。外部のDTDを参照するかどうかは、そのプロセサが妥当性を検証するかどうかによるのであって、standaloneの値とは関係がないはずです。 http://www.fxis.co.jp/DMS/sgml/xml/rec-xml.html#sec-rmd 間違っていたらすみません。ご指摘ください。 | ||||||||||||||||||||
|
投稿日時: 2002-01-16 06:53
すいません、ちょっと修正します・・。
プロセサには、
[ メッセージ編集済み 編集者: コセキ 編集日時 2002-01-16 07:12 ] | ||||||||||||||||||||
|
投稿日時: 2002-01-16 13:28
確かに変ですね。
standalone="yes"は"no"の間違いだと私も思います。 ところで、standalone宣言は外部のDTDを参照するかしないかの宣言だと理解しているのですが、「参照=妥当性検証」ではないのですか? その辺の所が私は理解できていません。 | ||||||||||||||||||||
|
投稿日時: 2002-01-16 15:45
コセキさん、やなぎさん、編集担当の新野です。
いつもご愛読ありがとうございます。ご指摘、筆者に伝えまして、いまうまい 言い回しなどを検討していただいているところです。とりあえず現状ご報告。 にいの | ||||||||||||||||||||
|
投稿日時: 2002-01-16 18:29
新野さん、ご対応ありがとうございます。
やなぎさん、
たとえば、standaloneが'yes'で、外部DTDがデタラメな文書を作ってみます。
として、test.dtdにデタラメな内容を書き込みます。これをIEやxercesに入力すると、DTDが整形式ではないというエラーが発生します。standaloneを'no'に変えても同じです。standaloneの値に関わらず外部DTDを読み込んでいるようです。 仕様には、
とあります。これは、妥当性を検証するなら内部DTDも外部DTDも読まなければダメだということでしょう。また以下のようにも書いてあります。
これは、妥当性を検証しないときは外部DTDは読んでも読まなくてもいいよ、ということですよね。 記事にもありますが、妥当性を検証しないプロセサでも内部DTDは読み込まれます。例えば、
とやって、妥当性を検証しないプロセサ(perl/expatとか)に入力すると、&abc;の値('xyz')が取り込まれます。内部DTDの実体宣言が読まれているわけです。 では外部DTDはどうかというと、一番最初のデタラメを書いたtest.dtdの例をperl/expatに入力してもエラーが発生しません。standaloneが'yes'でも'no'でも同じです。standaloneの値に関わらず、外部DTDは読まれていないようです。 ここまでの実験でわかるのは、standaloneの値が、外部DTDを読み込むかどうかに影響を与えることはないようだ、ということです。妥当性を検証するプロセサは、standaloneの値に関わらず外部DTDを読んでいましたし、妥当性を検証しないプロセサは、standaloneの値に関わらず外部DTDを無視しているようでした。 standalone宣言は、たとえ文書の外部に書いてあることが変化しても、文書の内容は変化しませんよ、と主張するものです。具体的に、どんな時に外部の記述が文書の内容に影響をあたえるかが「Validity Constraint: スタンドアロン文書宣言」に書かれています。 [ メッセージ編集済み 編集者: コセキ 編集日時 2002-01-16 19:00 ] | ||||||||||||||||||||
|
投稿日時: 2002-01-16 19:18
すいません、長々と書いてからなんとなくわかりました。。
「参照するかどうか」というのは、「読み込むかどうか」ではないんですね。「依存するかどうか」というような意味だということでしょうか。 いやでも「参照しない」ことと「依存しない」ことでは意味が違うような気もしますが・・。standalone='yes'でも「参照する」とありますし・・。 うーん、難しいです。。 | ||||||||||||||||||||
|
投稿日時: 2002-01-16 23:19
立て続けにすみません。
以下のXML文書と、
以下の外部DTD(test.dtd)の組み合わせで、
&zzz;のところが"external value"で置換されますね・・。Xercesのサンプルのsax.DocumentTracerと、IEで試してみたのですが、エラーにはならないようでした。 また、仕様の日本語訳を見る限り、これを妥当ではないとする個所がみつかりませんでした。 ということは、「文書の外に文書の内容を変化させるような記述が存在しない」のがstandaloneだという考え方は、間違いなのでしょうか。 standaloneが何のためにあるのか、わからなくなってしまいました。 | ||||||||||||||||||||
|
投稿日時: 2002-01-17 01:13
@IT新野です。コセキさん、いろいろご検討ありがとうございます。
この掲示板のURLは筆者にも伝えてあるので、たぶん読んでいただいていると 思います。さきほど、筆者の方が、あらためて修正内容を提案していただいた ので、それをこちらでも検討してみます。反映しましたら、またお伝えします ので、よろしくおねがいします。ざっと見ると、やはりXMLプロセッサの動作 になにがしかの影響を与えるようなものではなさそうなことが書いてあります。 とりあえず。 にいの |