データベースの教科書を一部執筆しました

知り合いの先生からお誘いを頂いて、昨年度からデータベースの教科書の執筆を行っていたんですが、このたび、ようやく刊行の運びとなりました。共立出版から出ている「未来へつなぐデジタルシリーズ」というシリーズの第26巻「データベースービッグデータ時代の基礎ー」です。

私は、この中の「半構造データとXML」という章の執筆を担当しました。半構造データやXMLについては名著「Data on the Web」の翻訳をやっていたりして、それなりにお声がけをいろいろいただける分野ではあります。今回も、懇意にして頂いている知り合いの先生が編集をされるという縁で、「XMLデータベースの部分を書いてもらえないか」という打診をもらいまして、お受けした、というわけです。

自分の得意分野とはいえ、やはり苦労もありました。まず、読者の対象が初学者で、かつ講義1回分、約20ページという制限があったこと。XMLの基礎だけでも、ちょっと詳しく説明すればこれくらいにはなってしまいます。でも、データベースの教科書の一部である以上、スキーマや問合せにも言及しなければなりません。

もう一つは、当初の企画案では、章のタイトルが「半構造データベース」となっていたこと。これはちょっと解説が必要ですね。普通に考えると、構造を持ったデータ(RDBのレコードなど)を少しゆるめた考え方として半構造データがあり、それを蓄積・検索する半構造データベースがある、そのような半構造データの一例としてXMLが有名である…ということで、普通のタイトルのように思うのですが、実はそうじゃないのです。

  • 半構造データは構造を持ったデータの集合も包含しています(なので、XQueryは単一の半構造データに対する問合せを想定しています)。ですので、『半構造データベース」なるものはないんじゃないかと。少なくとも私は記憶にありません。
  • 歴史的には、XMLのほうが半構造データよりも先に登場しています。つまり、XMLやHTML、あるいは電子メールのように部分的に構造を持ったテキストなどを包含する概念として提案されたのが半構造データなんですね。ある意味、アドバルーン的な概念と言えます。
  • そんな事情のためかはわかりませんが、半構造データの正確な定義はないように思います。少なくとも私は聞いたことがありません。大体こんなもの、という共通認識は、研究者の間ではあると思うんですけど。

企画案を直してもらうだけなら話は簡単なのですが、問題は、これが、情報工学の研究者から出てきた企画案だったということ。つまり、半構造データやXMLの専門家以外には誤解されている可能性が十分あるということで、誤解を解くように執筆する必要があるなあ、と実感させられました。

そんなわけで、結局、半構造データとその問合せの解説、ついで半構造データの一例としてのXMLとその問合せを解説し、次にデータベースらしい話ということで、スキーマの扱い、XMLデータのDBへの格納、SQL/XMLの話を加えました。もちろん、これを20ページに収めるということですから、本当に概要だけ、詳細は別の文献を見てくれ、というスタンスで、参考文献を結構あげています。XMLについても、あくまでデータベースの視点から話題の取捨選択を行いましたので、例えば名前空間なんかは完璧に省略した一方、識別子の扱いは比較的取り上げています(ID属性も、XPathによる識別子の代用も)。

書店には並びにくい専門書なので、実際にお手にとって見て頂く機会は少ないかもしれませんが、もし何かの機会がありましたらご覧いただけると幸いです。すでにいくつか誤植やバグを見つけて少々凹んでいますが、もしたくさん売れて重版されれば直る…かもしれません。

Google Readerのスターを一括で削除する方法

Reederが単独でRSSフィードを管理する機能を用意したので、Google Readerからのインポートを何度か試みたのだが、何度やっても途中でReederが落ちてしまう、という状態になっていた。いつも “Loading Starred Items” の途中で落ちてしまうので、Google Readerからスター付き記事のリストを取得しようとしている辺りで落ちているらしい。

そういえば、Google Readerでのスターを一時的なマーク代わりに使っていた頃があって、その影響もあって、スター付き記事の数が非常に多かったような記憶がある。20000は軽く越えていたような…

もっとも、スター付き記事を後で参照した覚えはほとんどない。というわけで、スターのインポートをあきらめ、Google Reader上でスターを一括で削除する方法がないか、検討し始めた。Google Readerの標準機能にはないようなので、何か方法がないかと検索してみると、ドンピシャのページがあった。

Jon Gallant: How unstar all Google Reader starred items

要するに、Google Reader上でスターを外していく作業をJavascriptで自動的にやらせよう、という方法である。手順は次のとおり。

  1. Google Readerをブラウザで立ち上げ、「スター付きアイテム」をクリック。
  2. スクロールを繰り返して、すべてのスター付きアイテムを表示させる。(というか、ブラウザのDOMに取り込む)
  3. 以下のJavascriptを実行。
var x = document.getElementsByClassName('entry-icons'); for(var i=0;i<x.length;i++)x[i].firstChild.click();

この人の作ったChrome機能拡張もあった。やってることは同じようである。

Chrome Web Store – Unstar All Google Reader™ Starred Items

この方法でスターを一括で削除した結果、Reederへのインポートが成功した。やれやれ。

以下、実際にやってみた経験からの注意点を書いてみる。

まず、手順2のスクロールだが、Google Readerに直接作用する機能拡張をブラウザに入れていると、このスクロールが非常に遅くなる。一回のスクロールで遅くなるのはごく僅かでも、スターの一括削除をしようとする(=スターが非常にたくさんある)状況だと、スクロールが度重なるので、「塵も積もれば山となる」という次第である。なので、この手の機能拡張はあらかじめ無効にしておく方がよい。私の場合、BufferPocket(特にBufferのほう)が該当した。

もう一つ。スター付きアイテムの数が多くなればなるほど、手順3を実行するときにDOMが非常に大きくなる。私の場合、20000以上のアイテムを全部取り込んだ状態で手順3を実行すると、ブラウザが反応しなくなってしまった。どうやらJavascriptは動いていたようなので、単にマウス操作に反応しなくなっただけのようだが、上のJavascriptは単純なことしかしていないので、手順が進んでいるのかハングアップしているのか、ブラウザの反応だけでは分からない。あまり精神衛生上よくないので、取り込むアイテム数を小分けにして、手順2と手順3を繰り返した。Google ReaderがAjaxをバリバリに使ったアプリなので、表示が乱れたりすることもあったが、Google Readerを立ち上げ直せば正常に戻ったので、単に表示だけの問題だと思われる。