続・XMLなのかHTMLなのかそれが問題だ久しぶりにHTML5とXMLのネタ。私は1年前のこの記事において、HTML5で作成されたコンテンツが実質的にWelformedでなければ、Web世界の時計が大きく逆戻りすることになる、と主張した。ところが、あらためて最近のWeb事情、特にHTML5の記事を調査してみると、「むしろwelformedでない方がよい」といった感じで書かれているものが多く見つかるようになってきていて大変驚いた。今回は、HTML5のXML対応について、とりわけXHTML5とは何なのかについて述べてみたい。日本語訳(訳:ぼくはXHTML構文が好きだ。小文字で書くこと、引用符で括ること、brやimgにスラッシュを書くことに慣れているんだ。この書き方は、とても気持ちがいい。Deadを見るような感じさ。君はそうじゃないかもしれない。br要素、属性の省略表記が好きかもしれない。5だと、これらはぼくらの好きなように書けるんだ。cowpaths”っていう原則のおかげで、書く人のおまかせになるんだ。「お気に召すまま、お好きなように、好きなだけ、どうにでも」ってね。)続・セマンティック・ウェブにXMLはいらない?セマンティック・ウェブは、ユニバーサルな情報空間を目指したバーナーズ=リーの考えを受けて、強靱で拡張性があり、適応性のある情報の基盤としてウェブを発展させるための目標の一つ。ウェブの目指すもの:W3Cの目標これまで、利用者が、ウェブ上のリソースを最大限に活用できるようなソフトウェア環境を構築するためには、XHTML化とRDFaなどのメタデータを使ったウェブの注釈が重要であるとされてきた。RDFaに代表される厳格なXMLベースのセマンティック・ウェブのアプローチはなかなか広まらず、最近では前述の記事のような「お気に召すまま」が流行っていることもあって、そのきざしすら感じられなくなってきているのが現状のようである。「貴族になって楽をしよう」で述べたボヘミアンの完全勝利。それは、MicroformatやHTML5のように、Webが実質的にXML以外の様々な表現や実装技術によって成り立っており、そもそもXMLで厳格にすべてを表現すること自体に無理があるのではないかという見方が主流となってきている背景がある。セマンティック・ウェブの目的だけ考えれば、データを取り出せて意味の疎通ができればよいのだから、必ずしもXMLでWelformedでなくてもよい。HTMLでは、どう処理するのかを規定されることに重きを置き、microformatsはXMLさえ前提にしていない。考えていくと、welformedかどうかは、結局のところ、XMLという1つの実装規約の範疇にすぎないという狭い議論に落とし込まれていく。関連記事XHTML5って何?一方で、HTMLをデータとして処理したいという要求が大きいのも事実である。iTextは、テンプレートとしてHTMLを用いるが、これがXMLでなかったらパース処理に大変な苦労を強いられることになる。今後標準となると思われるHTML5についても同様で、テンプレートをHTML5にバージョンアップする際には、できることならXHTML表現を使いたいところである。そこで、XHTML5の明確な定義を調べることにしたのだが、これがとても曖昧で気持ち悪いのだ。その原因は、XHTML5のスキーマがないということ、それから、XHTML1.xと同じ名前空間を使っているということの2つである。なってくると、モジュール化して他のモジュールを自由に取り込めないのではないかとか、極端な話、XHTML1.xのボキャブラリ以外使えないのではないかとか不安にもなってくる。ちなみに、私と同じような疑問をもっている方もいるので抜粋して紹介したい。5でこういうことができたらいいのになあ。video要素とRDFaを両方使うとオレオレXHTMLになってしまう。スキーマを取り払ったんだから、モジュール化して他のモジュールも自由に取り込めるような仕組みがいいと思う。point.などのエラーを返される。5準拠にはならないんだよね。ブラウザでの表示やRDFの抽出はできるだろうから実際あまり問題はなさそうだけど、そのXHTML文書が準拠する仕様はどこにも存在しないってのは、ブラウザの独自拡張時代を思い出させてあまり好きではない。Moduleとかが定義されて、制作者はいろいろなモジュールの中から好きなものを選んで組み合わせて使えるようになったりしないかなあ。HTML5がモジュール化しない理由とXML名前空間の試みHTML5はモジュール化しないの?で述べられているように、HTML5はモジュール化しない。それは、HTML5から見れば、XMLは単なるシリアライズ表現の一つと位置づけているように、あくまでHTMLがもつ機能だけに焦点をあてた結果であるといえる。XHTML5はXMLに見えてXMLではない、というのは言いすぎかもしれないが、少なくとも、名前空間とスキーマを充実させてモジュール化し、必要に応じて組み合わせて利用するといった、ユニバーサルな情報空間構想の元に作られたものではないことは明らかである。XMLの生みの親である村田さんもこの構想について以下のように述べられている。2005年の時点ではまだ名前空間の試みがうまくいっていないことを吐露されてもいる。お仕着せスキーマと誂えスキーマ今後の方向は、お仕着せスキーマにちょっと手直しをして、従来は誂えスキーマでしか得られなかったような利点を得ることだろう。名前空間も、もともとそのための試みであった(残念ながらうまく行っていない)。NGがスキーマのモジュール化を重視しているのも、NVDLが名前空間による分割検証を提供しているのも、すべてこの方向を目指す試みである。あと10年もすれば、お仕着せスキーマにちょっと手直しをするという方法が有効かどうか結論が出るのだろう。XMLシリアライゼーションの意味XHTML5の疑問を解決すべく、メーリングリストに聞いてみることにした。回答の要点は以下のとおり。XHTML5の名前空間はXHTML1.1と同じものを使うがXHTML1.xとは区別される。DOMのrepresentationであり、同じ要素をもつ詳細は以下のとおり。議論がずれることを恐れたので深く突っ込まなかったが、名前空間の意味と運用について、これほど解釈が違う人がいるとは思わなかった。2が打ち切りになったのは皆さんご存知だと思うのですが、以下の記事のなかで、XHTMLをHTMLのXMLシリアライゼーションとみなす、といった説明があります。「W3CはXHTMLをHTMLのXMLシリアライゼーション(XML形式への変換)と見なしている。」http://itpro.nikkeibp.co.jp/article/NEWS/20090703/333143/名前空間がXHTML1.xのままだとHTML5のタグを使えないものがあるので、完全なシリアライゼーションはできないと私は思います。単純に、HTML5のままで、welformedなものをXHTML5と呼ぶと解釈したとしても、welformedかどうかを示すヘッダーなり何かがないと不都合です。(つまりXML宣言なんですけど)その場合、名前空間はXHTML1.x以外の何かになると思われるのですが、最新のDraftにも新しい名前空間は見当たりません。この話は以下にも書いているように、去年からずっと気になっているところなんですが、いまだにモヤモヤしています。iTextのテンプレートの文法をHTML5にあわせるかどうか考え中なんですが、このテンプレートはXMLが前提なんでどうしたもんかと。HTML5のタグを使いたいのだけど、welformedなHTML5であることを知ることができるのか、あるいは、HTMLとしてパースしないといけないのか、という点がはっきりしないのです。このあたりで何かわかる方がいれば、ご意見を伺いたいのですが。回答1Y氏)XML宣言が必要であることと、名前空間がこれまでのXHTMLと別になることの関連、またそれが「完全なシリアライゼーションにならない」にどう繋がるのかがよく分からないのですが、そこは置いといて。送出したもの」になります。送出されている場合、それはXHTML5ではなく、HTML5になります。「どう書いたか」ではなく「どう扱うのか」によって、HTMLとXHTMLという区別がつけられるわけです。iTextのテンプレートの文法をHTML5にあわせるかどうか考え中なんですが、このテンプレートはXMLが前提なんでどうしたもんかと。ないのか、という点がはっきりしないのです。」のように空要素のXML的表現は、HTML構文でも利用できるように定義されています。=====私)早速のご回答、ありがとうございます。>具体的に何が利用できないか、教えていただけますか?やなどは、XHTML1.0や1.1では使えないと思います。使うためには別の名前空間が必要ですよね。送出したもの」になります。送出されている場合、それはXHTML5ではなく、HTML5になります。「どう書いたか」ではなく「どう扱うのか」によって、HTMLとXHTMLという区別がつけられるわけです。中身がXMLであっても、「どう扱うのか」ということを、content-typeで区別しましょう、という話ですね。application/xmlで送り出したXHTML5とは具体的には何になるのでしょうか。welformedなHTML5なのか、XHTML1.1なのか、あるいは、両方が可能なのか。それが知りたいのです。それにこだわっているのは、要は、XMLパーサしかもっていない当方の実装上の都合だけなんですが、HTML5互換のXMLが扱えるか、もし、application/xmlで送り出すことで、welformedなHTML5を縛れるとすれば、簡単に目的を果たせて嬉しいんです。=======S氏)ちょうど仕様を読み返しているところでしたので、ご質問を受けて、XHTMLに関して言及しているところも軽く読み直してみました。理解できているかどうかはわかりませんが・・・(^^;もし間違いがあったら、皆さんご指摘お願いします。名前空間がXHTML1.xと同じく「http://www.w3.org/1999/xhtml」のままでは、HTML5のボキャブラリを扱えないのではないか?こういった意図のご質問だと仮定して、僕の意見を述べさせて頂きますと、1に関してはその通りだと思います。名前空間も同じですし、配信時のContent-Typeも特殊なものではありませんし。2に関しては、ボキャブラリを扱えるかどうかは実行系に依存するのではないでしょうか。XHTML1.0しか扱えないブラウザは新要素を取り扱えないでしょうし、今後出てくる新しいブラウザはそれらを扱えるようになる、と。単純に、HTML5のままで、welformedなものをXHTML5と呼ぶと言うことで良いのかな、と思っています。1.0の置き換えとして意図されていると述べられてます。iTextのテンプレートの文法をHTML5にあわせるかどうか考え中なんですが、このテンプレートはXMLが前提なんでどうしたもんかと。何かの参考になれば幸いです。=====私)質問の意図をまとめていただきありがとうございます。ご回答内容で、だいぶ見えてきたのですが、新たな疑問もうかんでいます。将来的に、XHTML5の名前空間って何になるのだろう?、と。言うことで良いのかな、と思っています。名前空間がXHTML1.xと同じく「http://www.w3.org/1999/xhtml」のままでは、HTML5のボキャブラリを扱えないのではないか?>ボキャブラリを扱えるかどうかは実行系に依存するのではないでしょうか。いうことは、XHTML5は実質的に当面はXHTML1.xと同じ名前空間を使うということになりますね。XMLで新たなボキャブラリを追加する際に、名前空間を変えるべきかどうかは設計者によるといわれていますが、HTML5の要素が加わったXHTMLと、これまでのものとを区別できないのは、やはり不便な感があります。1.0のすべての範囲に1つの名前空間を使用する新たな仕様を発行することで、XHTMLワーキング・グループは軌道修正を行ないました。この教訓から多くを学ぶべきです。命名された物の間に本当に違いがある場合にのみ、XML名前空間を区別すべきでしょう。残念ながら、物事に白黒をはっきりと付けられることは滅多にありません。新しいバージョンのボキャブラリが、新たな要素を追加するのはよくあることです。前のバージョンから持ち越された要素の意味は変更されていないかも知れないので、名前空間の変更は不適切であると思うかも知れません。仮に、元の同じ名前空間を使用するとしたならば、新たなボキャブラリに追加された要素を元の名前空間内に設置するのも不適切であると思うでしょう。新たな要素のみに違う名前空間を使用するのは、とても賢明な選択とは言えません。結局、ボキャブラリで名前空間を改変するかどうかを判断する(自分自身の)判断力が必要です。名前空間がXHTML1.xのままだとHTML5のタグを使えないものがあるので、完全なシリアライゼーションはできないと私は思います。iTextのテンプレートの文法をHTML5にあわせるかどうか誤解です。XMLの「名前空間」というのは要素のコレクションとその意味を規定するものである、とお考えなのではないでしょうか。「XML名前空間の簡単な説明」で説明されているのですが、http://www.kanzaki.com/docs/sw/names.html実際には、「要素の分類・同定」以上の機能はありません。名前空間」ではありません。実際、そのURLを開いてみると、いくつか規格がリストアップされています。「XHTML1.0のp要素と、HTML5のp要素が、XMLとして同じ意味を持つ」ということになります。名前空間を考えるまでもなく、XHTML1.0にはないので、ここでは問題ありません。1.0から要素の意味を変更しようとしました。その場合は同じ名前空間にあると区別ができないので、別の空間を用意することになります。2.0のp要素は別物、ということになります。XMLだとちょっと考えづらくなってしまいますが、CのAPIを想像するとわかりやすいのではないでしょうか。a)という関数がありました。5.0では互換性を保つように作ったので名前はそのままにしました。2.0では引数aをlong型に変えました。これをそのまま既存のライブラリと強引にリンクさせようとすると落っこちます。a)という名前に変えるわけです。HTML5のボキャブラリをXHTML1.xに追加するという明確な定義ってありますかね?「追加」する必要はありません、そのような機能は名前空間は持っていないんですよ。考え中なんですが、このテンプレートはXMLが前提なんでどうしたもんかと。HTMLとしてパースしないといけないのか、という点がはっきりしないのです。syntaxのみという選択肢があります。syntaxしかサポートしない」と言ってしまえばそれでおしまいです。syntaxの文書はtext/htmlで送られることになっていますから、これは非サポート、ということですね。1.xとの区別ですが、区別する必要はありません。全てHTML5として処理してください、名前空間が同じというのはそういうことです。これで問題が生じるならばそれはHTML5のバグですから、報告なさるのがよろしいかと思います。=========私)ご丁寧なご指摘ありがとうございます。名前空間がXHTML1.xのままだとHTML5のタグを使えないものがあるので、完全なシリアライゼーションはできないと私は思います。これはたしかに誤解ですね。XHTML1.x上位互換のXHTML5が定義されていて、名前空間がhttp://www.w3.org/1999/xhtmlであるという考え方をすれば、シリアライゼーションは可能だと思います。AtomにしてもRSSにしても、大きなバージョン変化があった際には、名前空間も変わるのが一般的だと思うので、下位互換性という理由があるにせよ、名前空間とはそういうものですというのは言いすぎのような気もしています。機能的な議論はあるのですが、実際の運用のところは、先ほどのメールの添付(http://www.ibm.com/developerworks/jp/xml/library/x-namcar/)のように、ケースに応じていろいろなんだと思います。先ほどのメールにも書きましたが、そもそもXHTML5の定義って何なの?という根本的なところが私のなかで曖昧のまま残っていて、ドキュメントのなかにXHTML1.x以上の定義が見つけられなかったので、それ以上も以下もないという発想が元になったのも事実です。新しいボキャブラリを含むXHTML5を定義したうえで同じ名前空間を使うのか、単なるXHTML1.1なのか、そこが知りたいポイントなのですが、まだしっくりきていません。HTML5のボキャブラリをXHTML1.xに追加するという明確な定義ってありますかね?>「追加」する必要はありません、そのような機能は名前空間は持っていないんですよ。これは、名前空間の機能というより、XHTML5の定義というふうに解釈していただきたいですね。繰り返し恐縮ですが、XHTML5は、HTML5のボキャブラリをXHTML1.xに追加するような定義になっていますかね。(名前空間の話はもう忘れてください。純粋な定義の確認です。)もしそうだとしたら、ドキュメントの具体的な箇所を教えていただけないでしょうか。白石さんからいただいた参照を見て、私もそうなんだろうなとは思っていますが、念のため。1.0の置き換えとして意図されている>と述べられてます。名前空間がXHTML1.xのままだとHTML5のタグを使えないものがあるので、完全なシリアライゼーションはできないと私は思います。これはたしかに誤解ですね。あるという考え方をすれば、シリアライゼーションは可能だと思います。AtomにしてもRSSにしても、大きなバージョン変化があった際には、これらはHTMLとは事情が違うように思います。全て互換性がありませんでした。名前空間が異なるのは当然でしょう。Atomも上記のRSS達とは違うので名前空間が異なるのは必然です。draftから正式版への変更なので、変えるのは当然でしょう。Atomの改定版が出た時にはHTML5と同じ悩みを持つことになるでしょう。Atomの事情はよく知らないので想像になりますが、Atomは関連規格が多く、それらの多くがAtomのnamespaceを指定している以上、変えられないのではないかとは想像しています。下位互換性という理由があるにせよ、名前空間とはそういうものですというのは言いすぎのような気もしています。実際にXMLの名前空間を見るときには考慮されません。名前空間が違う→全ての要素は全くの別物ということだけだということです。ここで同じものならばXMLのレイヤーにおいては区別する手段を持たないということです。(もちろんversion属性を追加してそこでもっと上のレイヤーで区別することは可能ですが)これをふまえたうえで、名前空間を同じにするか別にするかは仕様策定者に委ねられているわけです。ように、ケースに応じていろいろなんだと思います。WGの人々はちょっと神経質すぎるように感じます。名前空間はXMLのレイヤーにおいて同じ名前の要素を別物扱いさせる、ただそれだけの効果しかありません。具体的にいえば、XMLパーサが同じ名前の要素なのに別物扱いしてしまう、という意味になります。XMLの上に構築された多くの仕様では、ここで別物扱いされると上のレイヤーで同一視することはなかなか困難な作業になります。実際にその仕様が勧告され、その仕様に沿った文書が、過去の当該仕様に沿った文書や他の関連仕様とそれに沿った文書、その仕様に沿ったアプリケーションや過去の仕様、関連仕様に沿ったアプリケーション、などなど、と協調して動こうという時にどう振舞ってほしいかを考えれば、おのずと答えは見えてくるのではないでしょうか。2.0の文書を無視するわけです。この壁を乗り越えるにはよっぽど派手な花火がないと難しいように思えます。ある構造をもった文書を、ブラウザやその他のアプリケーションがどう表示・処理するかと、そのの構造の文書どうシリアライズ―ありていにいえば文字列にダンプするかを定めているわけです。この点において、「HTML5」とは言いつつも、今までのSGMLの子孫であったHTMLやXML一族のXHTMLとは一線を画しています。それ以上も以下もないという発想が元になったのも事実です。仕様上は以上でも以下でもありませんね。同じ名前空間の中にいる兄弟と言ったところでしょうか。要素集合をおおむね包含しているだけです。推測するに、この認識が正解であるように思います。何も問題が起きないように頑張ると、こうなるわけです。現状の膨大なHTML/XHTMLの資産や、HTML5以前に行われた数々の試みがどうなったかを考えると、同じ空間をもちいるか、黙殺されるか、の二択でしかなかったと思います。単なるXHTML1.1なのか、そこが知りたいポイントなのですが、まだしっくりきていません。それから外れています。>「追加」する必要はありません、そのような機能は名前空間は持っていないんですよ。これは、名前空間の機能というより、XHTML5の定義というふうに解釈していただきたいですね。繰り返し恐縮ですが、XHTML5は、HTML5のボキャブラリをXHTML1.xに追加するような定義になっていますかね。(名前空間の話はもう忘れてください。純粋な定義の確認です。文書を解釈できるのは「たまたま」です。策定者達が努力していることは言うまでもありません。対して用意されている、というのはそこですね。DOM.」http://www.whatwg.org/specs/web-apps/current-work/#dependenciesで、「DOMで定義されている」というのはこの辺の話です。APIの認証をどうすべきか考えている。次のようなケースをどうするか。「既存のWebサイトがあり、既にユーザIDとパスワードによる認証によって、ブラウザでデータを提供している。MVCモデルについて一言いっておくかなーんて、MVCを語れるほどの知識はないのだが、琴線に触れてしまったので、私なりに言いたいことを言うことにする。vol82のWebAPIデザインの鉄則」に触発されたので書こうと思う。commitが可能である。いうイベントが開催された。Google、Amazon、SalesForce、Microsoftの4強+Niftyの、豪華面子でタイトルの通りごった煮にふさわしい感じの内容となった。ガチンコでお願いします8月12日、OracleがGoogleに対して訴訟を起こした。Oracleの持つJavaの知的所有権(特許および著作権)を侵害していることが理由とのこと。この問題はよくわからないので自分なりに整理してみることにした。(ただし私は法律には素人で間違いも多いと思う。Application)でサーバサイドをどうすべきかについて述べたいと思う。今、MEANが注目されている。OutputStreamをInputStreamに変換するOutputStreamからInputStreamに変換するにはどうしたらいいか。Pipeを使ってもOutputStreamと互換性がないので簡単にはいかない。Docsにオンライン・ファイルストレージ機能を追加するという発表があった。お題は、「フロントエンドエンジニアが主役のBaaSを作った話」です。Analyticsを使ってウェブサイトのトラフィック情報を収集しています。詳しくは、プライバシーポリシーを参照してください。