Viper 2で学ぶXMLデータベース最新事情(2)
マッシュアップしたいけどPHPでDOMはイヤ!
日本アイ・ビー・エム
中林 紀彦
2007/11/22
■課題2:DOMを使ったXMLデータの検索
次にお天気の情報ですが、今回はLivedoorが提供するお天気Webサービス(Livedoor Weather Web Service:LWWS)を利用して取得することにしました。
さて、ここで次の課題です。ユーザー管理テーブルに持っている“地域名”の属性からは直接お天気Webサービスを呼び出すことができず、地域名に対応する1次細区分IDをWebサービスのパラメータとして渡す必要があります。地域名から1次細区分IDを取得するためには、「全国の地点定義表(RSS)」というXMLの対応表を利用する必要があるのですが、この部分を実装するのがこれまた一苦労です。URLからXMLを取得する部分はすぐに実装できたのですが(リスト3-1、リスト3-2)、“地域名”で検索し“id”を取得する部分がよく分かりません。
$url = 'http://weather.livedoor.com/forecast/rss/forecastmap.xml'; |
リスト3-1 1次細分区定義表XMLデータのリアルタイム取得 |
$url = 'http://weather.livedoor.com/forecast/rss/forecastmap.xml'; |
リスト3-2 1次細分区定義表XMLデータのリアルタイム取得(SimpleXMLを利用) |
PHPのマニュアルを見ると“DOMXPath->query()”を使うとXPathで検索できそうだと分かったのですが、いざ具体的に実装するとなると、いつもは親切なマニュアルの例(サンプル・コード)を見てもさっぱり分かりません……。約1日の試行錯誤の末、何とか使い方を理解でき、いくつかのケースではうまくいったのですが、肝心のidの取得の方はさっぱりうまくいきません(リスト4)。
さて、リスト4は何が間違っているのでしょうか? 答えは最後に紹介します。
$xpath = new DOMXPath($dom); |
リスト4 idの取得に失敗する…… |
時間もなくDOMを使った実装をあきらめたKさんは、MySQLで対応テーブルを準備しました(図3)。その結果リスト5のように地域のidを用意したテーブルから取得することができるようになりました(このことが後で不測の事態を招くとは露知らず)。
図3 MySQLで急きょ作成した地域名とidの対応テーブル (画像をクリックすると拡大します) |
<記事 記事ID="10"> |
リスト5 最終的に生成されるXMLの完成形 ここでは地域idしか取得できていませんが、このidを使ったWebサービスの取得があるものとします。今回はこの部分は省略します。 |
■課題3:XMLデータの並べ替え(ソート)や集計
DOMは本来、文書(Document)を扱うためのAPIなので、ドキュメント内のデータのソート(並べ替え)や集計を行う関数がありません。今回の要件では、XMLデータのソートや集計といった要件はありませんでしたが、XMLデータを扱ううえでは、この機能をどう実装するかという課題は避けて通れそうにありません。
いろいろと苦労したKさんでしたが、何とか締め切り前日にギリギリ間に合いました。ようやく一安心と思っていたところ、翌日「全国の地点定義表(RSS)」のIDが変更されていたために、新機能サービス開始早々、トラブルに見舞われてしまいました。
結局、「全国の地点定義表(RSS)」のXMLを定期的に取得し、MySQLに格納するプログラムを用意することになってしまいました……。
2/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」などを紹介していきます。今回は、「各種ガイドラインが示すコンプライアンス要件に、データベースのセキュリティはどのように記載されているのか」を解説します
|
|