Viper 2で学ぶXMLデータベース最新事情(2)
マッシュアップしたいけどPHPでDOMはイヤ!
日本アイ・ビー・エム
中林 紀彦
2007/11/22
最新のXMLデータベース実装となるViper 2(DB2 9.5)のリリースを機に、全4回の連載記事であらためてXMLデータベースの利点を考えてみる。そこで見えてきたものとは?(編集部)
■“マッシュアップ”の追加にKさんの苦悩は続く
CGM(ユーザー生成メディア)サイトを立ち上げることになったKさんの奮闘は相変わらず続いています。今回はプログラマとしてのKさんの苦悩をご紹介します。
前回「なぜ彼はLAMPを捨てXML DBに走ったのか」で問題になっていたテーブル設計の問題を何とか乗り切って、Kさんはようやくベータ・サービスを開始できました。ベータ・サービスの開始後から注目度は高く、利用するユーザーからの意見もどんどん寄せられ、プロジェクトメンバーはうれしい限りでした。しかし、どの要件もテーブル設計を見直さざるを得ないほどの、当初のテーブル設計時には予想もつかなかったものばかり。寄せられた意見を反映するにはテーブルの分割などが必要で、修正の適用には多くの工数と時間を要し、適用時にもサービスの停止が必要でした。
残念なことに一番多かった要望は、ログイン後のポータル画面でした。そこでは登録した興味のある分野のタグを持つコミュニティの新着情報を表示する仕様になっていたのですが、「興味のある分野を4つ以上登録したい」という声が多く、それならば制限をなくすためにと、結局正規化をしてテーブルを分割することになってしまいました(詳しくは第1回を参照ください)。
11月某日にこのサービスの企画会議が開かれ、新たな機能を追加することになりました。現在の流行やユーザーから寄せられた意見を基に検討した結果、マッシュアップを活用したコンテンツの充実を目指すことになったのです。
新しいコンテンツとして、メッセージの送信者が住む場所のお天気をメッセージの横に表示するというものでした(図1)。
図1 お天気を表示させるマッシュアップのイメージ 編集部注:@IT会議室を参考にイメージを作成しています。お天気アイコンは、後述するLivedoorの「お天気Webサービス」のものを使用しています。 |
単純なアイデアですが、こういった細かいサービスがユーザーのリピート率、利用率を向上させるという意見で一致し、1週間後に機能を追加することになりました。また、携帯電話ユーザーの数も多いことから、この機能を携帯電話向けにも同時に公開することになりました。
要件が決まればそこから先はKさんの仕事です。マッシュアップ用に、お天気のWebサービスを検討し、取得方法や実装方法といったアーキテクチャを練りました。PC用と携帯電話用のブラウザにも対応が必要なことから、XMLを使った実装に決め、早速実装に取り掛かりました(図2)。
図2 マッシュアップのアーキテクチャ |
しかし……、以前にもDOM(Document Object Model)を使ったXMLアプリケーションを作った経験のあるKさんでしたが、エレメントの並べ替え(ソート)やノードの絞り込みなどの実装が非常に面倒ですごく手間がかかった記憶があり、1週間でプログラムの実装が終わるかどうか不安でした。実装すべき処理の流れは下記のとおりです。
- データベース(MySQL)から掲示板データを取り出してXMLを生成
- 掲示板データとお天気情報をマッシュアップして結果のXMLを生成
- 表示用のスタイルシート(XSLT)でそれぞれの形式に変換
やはり、いざ実装に取り掛かるといろいろな問題が見えてきます。
■課題1:データベース(MySQL)から取り出した結果セットのXML化
使用する言語によって変わってきますが、大半の言語ではDOMを使用することになると思います。しかし対象の要素が多いとXMLを生成するのが大変です。
リスト1はMySQLからの検索結果から、PHPのDOM関数を利用して、XMLドキュメントを生成する例です。一見、単純そうですが、実はそこに落とし穴が潜んでいます。よーく見てください。要素(Element)なのか属性(Attribute)なのか、そしてその要素(Element)がどのノードの子要素(Child)となるのかを、結果のXML(リスト2)をイメージしながらプログラミングをしなければいけません。ソースを見ただけで直感的に結果のXMLをイメージできないので、この部分は一苦労です。
// DOMオブジェクトの生成 |
リスト1 PHPのDOM関数を使って結果セットからXMLを生成する |
<記事 記事ID="10"> |
リスト2 リスト1で生成するXMLの完成型 |
1/3 |
Index | |
連載:Viper 2で学ぶXMLデータベース最新事情(2) マッシュアップしたいけどPHPでDOMはイヤ! |
|
Page 1 ・“マッシュアップ”の追加にKさんの苦悩は続く ・課題1:データベース(MySQL)から取り出した結果セットのXML化 |
|
Page 2 ・課題2:DOMを使ったXMLデータの検索 ・課題3:XMLデータの並べ替え(ソート)や集計 |
|
Page 3 ・やっぱりXMLにはXMLデータベースとXQueryが素直でいいね ・時間が余ったので、追加のマッシュアップ |
Viper 2で学ぶXMLデータベース最新事情 |
- Oracleライセンス「SE2」検証 CPUスレッド数制限はどんな仕組みで制御されるのか (2017/7/26)
データベース管理システムの運用でトラブルが発生したらどうするか。DBサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は、Oracle SE2の「CPUスレッド数制限」がどんな仕組みで行われるのかを検証します - ドメイン参加後、SQL Serverが起動しなくなった (2017/7/24)
本連載では、「SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「ドメイン参加後にSQL Serverが起動しなくなった場合の対処方法」を解説します - さらに高度なSQL実行計画の取得」のために理解しておくべきこと (2017/7/21)
日本オラクルのデータベーススペシャリストが「DBAがすぐ実践できる即効テクニック」を紹介する本連載。今回は「より高度なSQL実行計画を取得するために、理解しておいてほしいこと」を解説します - データベースセキュリティが「各種ガイドライン」に記載され始めている事実 (2017/7/20)
本連載では、「データベースセキュリティに必要な対策」を学び、DBMSでの「具体的な実装方法」や「Tips」などを紹介していきます。今回は、「各種ガイドラインが示すコンプライアンス要件に、データベースのセキュリティはどのように記載されているのか」を解説します
|
|