SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

XML Binding Language 2.0でアプリケーションを簡素化する

レイアウトとコードの簡素化に役立つバインディング言語としてのXML

データストリームの生成

 前述のように、クロスブラウザ対応やクロスドメイン対応の問題があるので、一般にはサーバプロキシを利用してTwitterのストリームを取り込む方が得策です。ストリームの処理に利用できる実装は何種類もありますが、私はXML RESTベースのデータベース(この例ではeXist-dbサーバ)用のプロキシストリームを作成することを自らへの課題としました。その理由は、開発中のアプリケーションがXML RESTベースであったためと、JSONストリームをプロキシ処理する方法を理解しようとしていたためです。

 ストリームを作成するためのXQueryはとても簡単明瞭です(しかも、RubyやPHPなどの言語でのやり方に似ています)。

declare namespace httpclient = "http://exist-db.org/xquery/httpclient";
declare option exist:serialize "method=text mediatype=text/plain";

let $username := request:get-parameter("username","")
let $password := request:get-parameter("password","")
let $auth := concat("Basic ",util:string-to-binary(concat($username,":",$password)))
let $results := httpclient:get(
     xs:anyURI("http://twitter.com/statuses/friends_timeline.json"),
     false(),
     <headers>
        <header name="Authorization" value="{$auth}"/>
     </headers>)
let $tweets := util:binary-to-string($results)
return $tweets

 この例では、ユーザー名とパスワードをクエリ文字列パラメータから取得し、それらを基本認証文字列に連結してヘッダーとして使用しています。util:string-to-binary()ルーチンは、テキスト文字列を(Web上でバイナリコンテンツのエンコードに使われる)Base64バイナリに変換します。次に、http-client:get()がHTTP経由でGETコマンドを呼び出し(XMLHttpRequestオブジェクトを使うときとほぼ同様)、結果がバイナリ表現で返されたら、util:binary-to-string()でJSON文字列に戻します。これが呼び出しの出力に返されます。次に、

http://localhost:8080/rest/twitter/twitter.xq?username=kurt_cagle&password=mypassword

 でXQueryルーチンを呼び出し、Twitterフレンドのストリームを取得します。Twitter URLを変更するだけで、これを他のユーザーストリームにも拡張できます。

バインディングのまとめ

 GoogleのXBL 2の実装がはたして普及するかどうかは分かりませんが、そうなる要因はいくつもあります。コードは驚くほどクロスプラットフォームに対応しており、Konquererを除けば、最近のすべてのブラウザで動作します。もちろん、だからといってバインディング内に記述されたJavaScriptコードがそれと同じ制限を満たすとは限りませんが、フレームワークが整備されていれば、コードをブラウザ非依存にするのに大いに役立ちます。

 バインディングはレイアウトとコードの簡素化に役立ち、ブラウザレベルでのコンポーネント化を促します。これにより、コードの再利用とコアライブラリの開発が促進されます。カプセル化が行われるので、一般にはスクリプティングレベルやスタイリングレベルでIDや名前空間の衝突を気にする必要はありません。つまり、指定したIDがたまたま基本スクリプティングライブラリのコアIDであったためにコードが動作しないという可能性は低くなります。また、Webページ内の依存関係のせいで紛らわしいデバッグ結果が出ることを気にせずに、コンポーネント開発を単独でテストすることもはるかに容易になります。

 全体としては、XBLの時代が今まさに到来していると言って差し支えないでしょう。AJAX空間が安定化し、背後にGoogleなどの会社のリソースがあることを考えると、バインディング言語としてのXMLには大いに利用価値があり、マイナス面はほとんどありません。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Kurt Cagle(Kurt Cagle)

ライター、情報アーキテクト、XML News NetworkとMetaphorical Webのウェブマスター。カナダ、ブリティッシュコロンビア州のビクトリア在住。XMLToday.orgの編集長、O'Reilly Mediaの寄稿編集者。現在、XBRLに関する著書を執筆中。彼のTwitterはtw...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4907 2010/03/01 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー