Hatena::Groupweb

vantguarde

9.28

パースエラーなXMLの自動再処理

| 23:03

Opera Nextがアップデートされたんですが、XMLのパースに失敗したら自動的にHTMLとしてパースしなおすようになったそうです。

Operaはエラーを出しつつも「HTMLとして解釈しなおす?」的なリンクがあって親切だったんですよね。それを自動でやっちゃうと。オフにする設定もあるのかな。居る人がどれだけいるのかという話ですが…

あ、この「XML」はapp/xml系な文書すべてなのでしょうか、それともXHTML限定なのでしょうか。どうなんだろう。

1.20

なんとなくだけれど

| 23:42

こんなXML文書があったとしますよ。

<?xml version="1.0"?>
<document>
  <title>"XHTML 2.0 and HTML 5" by me</title>
  <para>5 > 2</para>
</document>

で、「XML的な間違いを探してください」って言ったら、3行目と4行目で引っかかる人がけっこういる気がする。特に4行目はかなり多そう。

なんでかは仕様書を読んでください。*1

ぼくもこれから読みます。*2

*1:説明しようと思ったけどこんがらがってうまく出来ない、の意

*2:そして自信がなくなってきた、の意

8.19

フィードってXML的に処理されてるの?

| 20:21

そうそう。そもそも最近のブラウザって、フィードをXMLとして解析してるんでしょうか。

XHTMLの利点的な話題で言われていますが、世の中のXHTMLなんてほとんどill-formedなXMLです。フィードはそこまでill-formedではないでしょうが、中にHTMLが入るっていう性質上、その悪い部分が少なからず入り込みます。

  • 閉じられてないタグをエンコードせずに記述(名前空間ってなあに?)
  • アンパサンドがエスケープされてない
  • &raquo;”とか、HTMLの文字参照をXMLにそのまま書いてる

たとえ自動生成されるのがほとんどであったとしても、そのプロセッサーとかテンプレートシステムを作った人に知識がなければ、こんなエラーって簡単に起こるわけで。結構な数のフィードがこうなってるんじゃないかなと。

で、そんなのにいちいち「XMLエラー」なんてつっぱねるとは思えません。text/htmlなXHTMLと似たエラー処理を行ってるはず。確証は持てないですが(Operaあたりは真面目に処理してるかもしれない)。

XMLは失敗したとはあまり思わないですが、HTMLと近い位置にいるXMLアプリケーションは、XMLとして処理されない可能性が非常に高いのではないかと思っています。

5.20

名前空間とValidation

| 22:39

質問をいただいたので回答をエントリにしてみたり。

(もしなにか聞きたいことなどあれば、コメントとかにてきとーに書いといてください。回答する保証とかしませんけどね。)

質問は、XHTMLで名前空間を宣言する際にDTDで属性リスト宣言をする必要があるのかどうかというものです。

xmlns:dc="..."などを書いたXHTMLをOpenSPやxmllintで検証してみると「属性xmlns:dcはありません」というエラーが発生します。XMLの仕様も属性xmlns:*だけに例外を設けていることはなさそうなのですが、W3CのMarkup Validation Serviceやブラウザでチェックしてみるとエラーにならないし、もし属性リスト宣言が必要ならRDFaやXHTML 2.0がとても面倒なことになるので、さすがにそれはないかなと思っています。

名前空間がわかるプロセッサはxmlns:*を特別に処理していたりするのでしょうか。

CURIE - 短縮URI構文

書く必要があるかといえば、DTDベースで検証する必要があるなら「ある」、XMLベースなら「ない、むしろDOCTYPE自体が(ry」ってことになるのかなあと。前者だとコストがかかるわりに得られるものが少ないし、後者だとスキーマがないというオチになりやすいですが…

なので現段階では解無しなのかなと思ってます。これ、ぼくも長年気になってるんですよね。。

OpenSPとかxmllintがエラーを吐くのは、SGMLベースで検証してるからなんでしょうね。あるいは、Namespaceに対応していないかでしょう。名前空間はXMLの仕様とは分離されていて、Namespaces in XML 1.0で定義されています。なのでXMLの仕様を読んでも情報が無い気がします。まあ、ここにも書いてないわけなんですが。

で、W3CのValidatorでxmlnsがエラーにならないかというと、内部で無視してるからですね。去年公開された0.8からはXML的なチェックを行うようになってるんですが、xmlnsについてはただ無視するようになっています*1。まあなので、名前空間がわかる訳ではないのかなと。

ブラウザについてはよく分かりません。DOMで処理する関係上名前空間を実装していたりするのかしら?

でも、名前空間を含むXMLの検証ってむつかしいのか需要がないのかあまり、語られませんよね。ぼくが知らないだけかも知りませんが(XMLよくわかんないので)。

で、戻るのですが、現段階では書く必要ってないでしょう。XHTML2みたいに別の名前空間が入ってくる可能性の高い言語だとちょっと問題になりますが、そんな時代はいつ来るのかわかりませんし(…)。

RDFaにおいてはCURIEの宣言に使われるだけで、要素として現れる訳じゃないので、検証時には省くとかでもいいのかなあと。ただ、トリプルを生成するとかそういうValidatorだと難しいでしょうけど*2

しかし、なんでXMLはNamespaceを分離しちゃったんでしょうね。Skunkworksみたくプロファイルとして統合してくれないかなあ。。

*1:OpenSPとlibxmlが使われてるはずなんですが、どちらもxmlnsを扱えなかったってことなんですかね…

*2:RDFaっていうものを考えると、そういうValidatorの方が必要だとは思いますが

2.11

RDFから9年

| 23:09

XML10(あまり話題にもなっていない)の影に隠れて、RDFもそろそろ9年なんです。とはいっても2004年の改訂版ではなくて、1999年版ですが。

改めて古いドラフトを見ていたのですが、面白いですね。最初のWDとか、名前が結構違っていたり、構文もXMLにかなり寄ったものになってますね。

<?namespace href="http://docs.r.us.com/bibliography-info" as="bib"?> 
<?namespace href="http://www.w3.org/schemas/rdf-schema" as="RDF"?> 
<RDF:serialization> 
  <RDF:assertions href="http://www.bar.com/some.doc"> 
    <bib:author> 
      <RDF:resource> 
        <bib:name>John Smith</bib:name> 
        <bib:email>john@smith.com</bib:email> 
        <bib:phone>+1 (555) 123-4567</bib:phone> 
      </RDF:resource> 
    </bib:author> 
  </RDF:assertions> 
</RDF:serialization>

Namespace宣言がPIになってるのは、ちょうど同じ頃にNamespaces in XMLが策定中だったからです。初期草稿であるName Spaces in XMLなんかをみると、PIを使ったNamespaceの宣言方法が考案されていたのが分かります。PIの方が構文的に良いデザインに思える。。

Contact: @vant / lepetitcroissant@gmail.com.