IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  XML | Web development | Open source  >

セマンティック技術を使用してウィキペディアの問い合わせ用フォームを作成する

セマンティック Web の標準的なクエリーを実行する単純な Web フォームを作成して、新たに登場した興味深いデータベースを利用する

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません

議論する

ダウンロード

原文はこちら

原文はこちら


レベル: 中級

Bob DuCharme (bob@snee.com), Solutions Architect, Innodata Isogen

2009年 7月 21日

公開 SPARQL エンドポイントは、ますます増えている Linked Data へのオープン・アクセスを提供し、皆さんのアプリケーションに役立つ優れたデータを提供することによってセマンティック Web の成長を促しています。巷にある多くのデータ駆動型 Web サイトと同じく、これらのエンドポイントにクエリーを送信し、結果を HTML タグにラップすれば、Web ページを作成することができます。しかし、SPARQL エンドポイントならではの大きな違いは、この新しい Linked Data が皆さんのアプリケーションで使えるように公開されていることです。この記事では、簡単な CGI スクリプトによって、2 つの異なる SPARQL エンドポイントからデータを取得してユーザーの質問に答えるアプリケーションを構築する方法を紹介します。例として用いるのは、2 人の監督の映画両方に出演した俳優を答えるアプリケーション、そしてどのミュージシャンがどのアルバムをリリースしたかを答えるアプリケーションの 2 つです。
よく使われる頭字語
  • CSS: Cascading Stylesheet
  • CGI: Common Gateway Interface
  • HTML: Hypertext Markup Language
  • HTTP: Hypertext Transfer Protocol
  • JSON: JavaScript Object Notation
  • RDBMS: Relational Database Management System
  • RDF: Resource Description Framework
  • REST: Representational State Transfer
  • SPARQL: SPARQL Protocol and RDF Query Language
  • URI: Uniform Resource Identifier
  • URL: Uniform Resource Locator
  • XML: Extensible Markup Language

SPARQL エンドポイントは、W3C 標準の SPARQL 問い合わせ言語によるクエリーを介して、データベースへのアクセスを提供します。SPARQL エンドポイントでアクセスできるデータが一般のインターネットでますます利用できるようになってきているなか、リレーショナル・データベースのデータを取得して使用するのとほとんど同じように、アプリケーションでこのデータを取得し、使用することができます。SPARQL について多少の知識を身につければ、SPARQL 言語によるクエリーをアプリケーションに組み込んで、これまで作成してきたアプリケーションとよく似ているものの、あらゆる類の新しいデータにアクセスできるアプリケーションを作成することができます (そして、アプリケーションのユーザーも同じくデータにアクセスできるようになります)。

この記事で取り上げる 2 つのサンプル・アプリケーションは、ユーザー・フレンドリーなフォームを表示し、データベースの SPARQL エンドポイントに対してクエリーを実行し、その結果を表示します。フォームのユーザーには、データを配信するために使用された技術や標準についての知識はまったく必要ありません。この記事に付属の zip ファイルに、サンプル・アプリケーションのすべてのファイルが含まれています (「ダウンロード」を参照)。最初のアプリケーションでは、2 人の映画監督を指名し、この 2 人の監督の映画両方に出演したすべての俳優の名前を取得します。次のアプリケーションでは、レコーディング・アーティストのアルバムについての情報を取得します。

巷にある多くのデータ駆動型 Web サイトと同じく、この 2 つのアプリケーションの基本アーキテクチャーが従うパターンは以下のとおりです。

  1. ユーザーが Web フォームに 1 つまたは複数の検索する語を入力して、「search」をクリックします。
  2. フォームが、入力された値を CGI スクリプトに渡します。
  3. CGI スクリプトが値をクエリーに取り込み、そのクエリーをデータベース・サーバーに送信します。
  4. サーバーがクエリーの実行結果を CGI スクリプトに返すと、CGI スクリプトは返されたデータをベースに HTML ページを作成し、そのページをユーザーのブラウザーに送信します。

このパターンは CGI スクリプトと同じくらいに古いパターンですが、今回のパターンで新しくなっている点は、使用する問い合わせ言語がお馴染みの SQL ではなく、SPARQL だということです。そしてこのパターンを非常に興味深いものにしているところは、アプリケーションからクエリーを自由に実行可能な SQL データベースがインターネット上にあっても、その数は限られていますが、SPARQLインターフェース (別名 SPARQL エンドポイント) では、大規模で有用なデータベースが次々と使用できるようになってきていることです。事実、既存のリレーショナル・データベースにこれらの SPARQL エンドポイントが追加インターフェースとして付け加えられることは珍しくありません。SPARQL エンドポイントには、インターネット上に公開されているエンドポイントの他にも、ファイアウォールの背後にあるエンドポイントで、別々に保存されているエンタープライズ・データにまたがるクエリーを容易に実行するためのものもあります。

アプリケーションその 1: データベースとクエリー

最初のアプリケーションでは、特定のデータベースに対するクエリーの送信と、そこから返されるデータのフォーマット設定を自動化します。そこで、まずはその特定のデータベースとクエリーから取り掛かることにします。IMDb (Internet Movie Database) は、これまでに英語の音声で製作されたほとんどすべての映画に関する情報を提供できるものの、情報を比較対照するためのクエリーを受け付けません。例えば、ソフィア・コッポラ監督の映画と父親のフランシス・フォード・コッポラ監督の映画の両方に主演した俳優がいるかどうかを知りたい場合、ソフィア・コッポラが監督した作品に関する 6 つの IMDb Web ページにアクセスし、次にフランシス・フォード・コッポラが監督した作品に関する 32 の IMDb Web ページにアクセスした後、手作業で俳優のリストを集めて相互参照しなければなりません。

幸い、linkedmdb.org の Linked Movie Database には、SPARQL クエリーを使用できる映画クレジット情報のデータベースがあります。例えばリスト 1 のクエリーはこのデータベースに対し、ソフィア・コッポラが監督したすべての映画のタイトルをリストアップするように指示しています。


リスト 1. ソフィア・コッポラ監督の作品を検索するクエリー

PREFIX m: <http://data.linkedmdb.org/resource/movie/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?filmTitle WHERE {
  ?film rdfs:label ?filmTitle.
  ?film m:director ?dir.
  ?dir  m:director_name "Sofia Coppola".
}

SPARQL の目的は RDF データ・モデルで表現されたデータに対してクエリーを実行することです。RDF データ・モデルでは、データはトリプルの集合として表され、それぞれのトリプルには主語、述語、目的語があります。あるいは、エンティティー、属性名、属性、値として考えるとわかりやすい場合もあります。トリプルでは、例えば「エンティティーの ID は http://data.linkedmdb.org/resource/director/7764 であり、その director_name の値は「Sofia Coppola」である」と記述します。

SPARQL では変数は疑問符で始まります。上記のクエリーは、以下のようにトリプルの特定の場所に変数を挿入することにより、データベースから返される映画のタイトルに以下の 3 つの条件を設定しています。

  • RDF は URI を ID として使用しますが、データベースからは人間が読める映画のタイトルを取得する必要があります。このクエリーでは、?film 変数が URI による映画の ID の代わりを務めます。映画の rdfs:label?filmTitle に設定されています。これが、クエリーが SELECT 文で要求する対象です。rdfs:label という述語は RDF Schema 標準で定義されており、クエリーの 2 行目にある名前空間宣言によって接頭辞 rdfs が表す正確な内容を記しています。
  • 映画の監督が持つ ID は、?dir です。
  • ?dir は URI による監督の ID の代わりとなります。ここで必要なのは監督の実際の名前なので、クエリーは m:director_name の値が Sofia Coppola に設定されている ?dir を要求します。クエリーの先頭にあるもう 1 つの名前空間宣言によって、接頭辞 m が表す内容が示されています。私がここで使用すべき述語の名前が director_name であるとわかった理由は、XQuery や SQL クエリーを作成する前に XML または RDBMS スキーマが使用する名前を調べるように、このクエリーを作成する前に、linkedmdb.org データが使用する名前を検索したからです。SPARQL エンドポイントで述語の名前を調べるには、以下のように基本的に「トリプルで使用されるすべての述語を (繰り返さずに) 表示する」ように指示する単純な SPARQL クエリーを使用します。
SELECT DISTINCT ?p WHERE {?s ?p ?o}

多くの SPARQL エンドポイントには、SPARQL クエリーを試せるようにフォーム・ベースのインターフェースが用意されています。linkedmdb.org の SPARQL エンドポイントもその一例です。SNORQL フォームにアクセスして上記の 2 つのクエリーのいずれかを貼り付け、「Go!」をクリックしてください。ソフィア・コッポラの映画のリストが表示されるはずです (デフォルトの「Results:」設定では上手くいかない場合、「as JSON」をはじめ、自分のアプリケーションで使用する別のフォーマットに設定してください)。

リスト 2 のクエリーも linkedmdb.org の SNORQL フォームで試してみてください。このクエリーは、ソフィア・コッポラの映画に出演したすべての俳優をリストアップします。


リスト 2. 俳優を検索するためのクエリー

PREFIX m: <http://data.linkedmdb.org/resource/movie/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?actorName ?filmTitle WHERE {
  ?film rdfs:label ?filmTitle;
        m:director ?dir;
        m:actor ?actor.
  ?dir  m:director_name "Sofia Coppola".
  ?actor m:actor_name ?actorName.
}

このクエリーでは、彼女が監督した映画のタイトルだけでなく、それぞれの映画に出演している俳優も要求しています。具体的には、俳優というよりも、各映画に関連付けられた俳優の ID に対応する俳優の名前を要求しています。最初のクエリー (そして大半の SPARQL クエリー) と同じく、URI を使用して目的のデータを識別する一方、出力にはその URI に関連付けられたラベルを人間が読めるラベルとして抽出するためです。この方法は、SQL クエリーでは製品 ID の値で製品を相互参照し、実際のレポートには製品名を抽出するのと似ています。

上記のクエリーでは、SPARQL の簡易表現も導入しています。3 つのトリプルを完全に記述して、各映画に関連付けられたタイトル、監督、俳優のデータを要求していることを示す代わりに、ここではセミコロンを使って、m:director ?dirm:actor ?actor の述語/目的語のペアが、rdfs:label ?filmTitle の述語/目的語のペアと同じく主語 ?film と対応することを示しています。




上に戻る


アプリケーションの作成

この最初のアプリケーションの目的は、実際のクエリーと URI をアプリケーションのユーザーに見せることなく、linkedmdb.org のデータベースと SPARQL 問い合わせ言語のメリットをもたらすことです。前述のシステム・アーキテクチャーに沿って説明すると、以下の流れになります。

  1. アプリケーションのユーザーが、図 1 のフォームを使用して 2 人の監督の名前を入力します。



    図 1. commonActors アプリケーションの入力フォーム


  2. フォームが 2 人の監督の名前を commonActors.cgi CGI スクリプトに渡します。
  3. CGI スクリプトは監督の名前を SPARQL クエリーに取り込み、このクエリーを http://data.linkedmdb.org/sparql にある linkedmdb.org の SPARQL エンドポイントに送信します。
  4. SPARQL エンドポイントがクエリーの結果の JSON バージョンを返すと、CGI スクリプトは返されたデータをベースに HTML ページを作成し、そのページをユーザーのブラウザーに送信します。

リスト 3 に、送信される SPARQL クエリーを記載します。このクエリーには、ソフィア・コッポラとフランシス・フォード・コッポラについての質問がハード・コーディングされています。


リスト 3. ソフィア・コッポラとフランシス・フォード・コッポラの映画に共通の俳優をリストアップするための SPARQL クエリー

PREFIX m: <http://data.linkedmdb.org/resource/movie/>
SELECT DISTINCT ?actorName WHERE {

  ?dir1     m:director_name "Sofia Coppola".

  ?dir2     m:director_name "Francis Ford Coppola".

  ?dir1film m:director ?dir1;
            m:actor ?actor.

  ?dir2film m:director ?dir2;
            m:actor ?actor.

  ?actor    m:actor_name ?actorName.
}

上記のクエリーを linkedmdb.org の SNORQL インターフェースに貼り付けると、2 人のコッポラそれぞれが監督した映画に出演した俳優はキャスリーン・ターナーしかいないことがわかるはずです。

commonActors.html ファイルに保管された Web 入力フォーム (http://www.snee.com/sparqlforms/commonActors.html にアクセスして自分で試してみてください) は、入力された監督の名前を dir1 変数と dir2 変数に割り当て、commonActors.cgi スクリプトに渡します。


リスト 4. commonActors アプリケーションの Web 入力フォーム

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Find common actors between two directors</title>
    <link href="simple.css" type="text/css" rel="stylesheet" />
  </head>
  <body>
    <h1>Find common actors between two directors</h1>
    <form action="commonActors.cgi" method="get">

      <p>Enter the "official" name of each director (check 
      <a href="http://www.imdb.com">IMDB</a> if you're not sure) 
      and click "Search" to list actors who have appeared in movies by 
      both directors.</p>
      <p>
        <input type="text" name="dir1"/>
        <input type="text" name="dir2"/>
        <input type="submit" value="search"/> 
      </p>

    </form>
  </body>
</html>

SPARQL エンドポイントのよいところは、いずれも REST べースの HTTP インターフェースを使って通信できる一方、Web 検索については使用するプログラミング言語に合わせてさらに単純なインターフェースにできることです。私はこの commonActors.cgi CGI スクリプトを Python で作成し、SPARQLWrapper ライブラリーを使って、クエリーの送信と、結果のアンパックを単純化しました。


リスト 5. commonActors アプリケーションの Python スクリプト

#!/usr/local/bin/python

import sys
sys.path.append('/usr/home/bobd/lib/python/') # needed for hosted version
from SPARQLWrapper import SPARQLWrapper, JSON
import string
import urllib
import cgi

def main():
  form = cgi.FieldStorage() 
  dir1name = form.getvalue('dir1')
  dir2name = form.getvalue('dir2')

  sparql = SPARQLWrapper("http://data.linkedmdb.org/sparql")
  queryString = """

PREFIX m: <http://data.linkedmdb.org/resource/movie/>
SELECT DISTINCT ?actorName WHERE {

  ?dir1     m:director_name "DIR1-NAME".
  ?dir2     m:director_name "DIR2-NAME".
  ?dir1film m:director ?dir1;
            m:actor ?actor.

  ?dir2film m:director ?dir2;
            m:actor ?actor.

  ?actor    m:actor_name ?actorName.
}
  """

  queryString = queryString.replace("DIR1-NAME",dir1name)
  queryString = queryString.replace("DIR2-NAME",dir2name)

  sparql.setQuery(queryString)
  sparql.setReturnFormat(JSON)

  try:
    ret = sparql.query()
    results = ret.convert()
    requestGood = True
  except Exception, e:
    results = str(e)
    requestGood = False

  print """Content-type: text/html

    <html>
      <head>
        <title>results</title>
          <link href="simple.css" type="text/css" rel="stylesheet" />
      </head>
      <body>
"""

  if requestGood == False:
    print "<h1>Problem communicating with the server</h1>"
    print "<p>" + results + "</p>"
  elif (len(results["results"]["bindings"]) == 0):
      print "<p>No results found.</p>"

  else:
    for result in results["results"]["bindings"]:
      print "<p>" + result["actorName"]["value"] + "</p>"

  print "</body></html>"

main()

sys.path.append の行は、このスクリプトをホスティング・サービスで実行するときに、標準 Python ディストリビューションには含まれていない SPARQLWrapper および JSON ライブラリーをインストールした場所をホストの Python インタープリターに知らせるために必要でした。

必要なライブラリーをインポートして、HTML フォームから渡された監督の名前の値を dir1name 変数と dir2name 変数に格納した後、スクリプトは SPARQL クエリーをセットアップして SPARQL エンドポイントに送信します。このエンドポイントは、スクリプトの sparql オブジェクトに格納された SPARQLWrapper オブジェクトを作成するときに引数として渡される URL によって識別されます。

queryString 変数に格納されたクエリーは、前に検討した 2 人のコッポラ作品に出演した俳優を検索するためのクエリーに似ていますが、queryString 変数が作成された後、DIR1-NAMEDIR2-NAME のストリングがそれぞれ dir1namedir2name の値に置き換えられるという点が異なります。

クエリー・ストリングを設定し、データを JSON フォーマットとして返すことを確認した後、try/except ブロックがクエリーをサーバーに送信し、requestGood 変数を設定してリクエストが成功したかどうかを示します。スクリプトが HTML ページのヘッダーに続けて出力するのは、以下の 3 つのいずれかです。

  • リクエストが失敗した場合は、単純なエラー・メッセージ。
  • エラーが発生しなかったクエリーで、結果が 1 つも見つからなかった場合は、「No results found」メッセージ。
  • HTML パラグラフごとに 1 人の俳優の名前。

そしてスクリプトは HTML ページの body 要素と html 要素を出力して完了します。




上に戻る


アプリケーションその 2: アルバムとそのアーティスト、そしてリリース日

読者の皆さんが持っている HTML と CSS のスキルを以ってすれば、私の commonActors デモよりも見栄えのよいアプリケーションを作成できるはずです。しかし、見栄えがよいだけでなく、機能も充実したアプリケーションを作成するためには、上記の SPARQL クエリーの SELECT 文は、一致したパターンごとに 1 つの情報、つまり俳優の名前しか要求していないことに注目してください。典型的な SPARQL クエリーは典型的な SQL クエリーと同じく、これよりも多くの情報を要求します。そしてホスト言語 (上記の私の例では Python) で作成されたプログラムでは、取得したクエリーの結果を調べながら、その情報を使ってあらゆる類の興味深いことを実行することができます。

けれども現実の可能性は、使用可能なデータの選択肢がますます広がっているところにあります。linkedmdb.org 以外にも目を向けると、さらに幅広いデータにアクセスできる数々の公開 SPARQL エンドポイントが見つかるはずです。

とりわけ大規模で、最もよく使用されている SPARQL データのコレクションの 1 つとして挙げられるのは、DBpedia です。このコミュニティーによる取り組みでは、ウィキペディアの「Infobox」(多くのウィキペディアのページで右側に表示されるグレーのボックス内のフィールドごとの情報) から構造化データを抽出し、SPARQL クエリーで取得可能な場所に保管しています。

私は音楽を聴いているとき、その特定のアルバムがリリースされた時期に興味を持つことがよくあります。そこで、リリース日を簡単に検索できるようにする simpleAlbumQuery アプリケーションを作成しました (実際、この記事の初稿を書いているときにデューク・エリントンのベスト・アルバムを聴いていました。そしてダイアナ・クラールによる「I'm Just a Lucky So and So」を聴いているときに、彼女について http://www.snee.com/sparqlforms/simpleAlbumQuery.html で調べました。ここにアプリケーションのコピーを保存したので、ご自分で試してみてください)。この記事に付属の zip ファイルには、commonActors.html ファイル、commonActors.cgi ファイル、そしてこれらのファイルが使用する simple.css スタイルシートと併せて、simpleAlbumQuery.html Web ページ・ファイルと simpleAlbumQuery.cgi Python CGI スクリプトも含まれています (「ダウンロード」を参照)。

simpleAlbumQuery アプリケーションの HTML フォーム (図 2 を参照) には、Python CGI スクリプトに artist および album パラメーターを渡すための 2 つのフィールドがあります (この図の拡大版を表示)。


図 2. SimpleAlbumQuery アプリケーションの入力フォーム

このフォームには、ユーザーの手引きとしていくつかのサンプル・クエリーが提示されています。提示されている値をフォームに入力できるだけでなく、ユーザーは try it リンクのいずれかをクリックすることができます。例えば、2 番目の「try it」リンクをクリックすると、URL http://www.snee.com/sparqlforms/simpleAlbumQuery.cgi?artist=&album=Fillmore が実行されます。これは、最初のフォーム・フィールドには何も入力せずに、2 番目のフィールドに Fillmore を入力して「search」ボタンをクリックした場合と同じ内容が実行されます。つまり、アーティストの値として空のストリングを渡し、アルバムの値として Fillmore を渡して simpleAlbumQuery.cgi スクリプトを呼び出します。

図 3 に示すのは、サンプルの Fillmore クエリーを実行した結果、表示された最初の 3 つのエントリーです。小さな CSS で外観を整えるとともに、エントリーにはアルバム・カバーの画像が表示され、アルバム名にはそのアルバムに関するウィキペディアのページへのリンクも張られています (返された結果をスクロール・ダウンすると、1970年に Fillmore で収録されたマイルス・デイビスのアルバムが 2 枚見つかります。図 3 の 3 行目にあるクレイジー・ホースのアルバムと、別の行にあるニール・ヤングのアルバムとが同じものなら、Linked Data では嬉しい発見があることを示す好例となります。そして、このライブはかなり見ものだったはずです)。


図 3. アーティストは未指定、アルバムに「Fillmore」を指定したクエリーによって返された最初の 3 つのエントリー

返されたテキストの一部をフォーマット設定するための多少のストリング操作は別として、simpleAlbumQuery.cgi が commonActors.cgi と大きく異なるところは、以下の 2 つの点だけです。

  • クエリーが送信される宛先は異なるため、別の URL が SPARQLWrapper 作成メソッドに渡されています。その URL とは DBpedia の SPARQL エンドポイントの URL、http://dbpedia.org/sparql です。
  • queryString 変数が格納するクエリーは、別の情報を要求することから異なっています。また、simpleAlbumQuery アプリケーションのユーザー用にクエリーをカスタマイズするため、HTML フォームからこのクエリーに渡される値も異なります。

リスト 6 のクエリーを詳しく調べてください (DBpedia には独自の SNORQL フォームがあり、http://dbpedia.org/snorql/ に直接クエリーを入力できるようになっていますが、以下に示すクエリーは機能しません。その理由は、このクエリーの ARTIST-STRING および ALBUM-TITLE-STRING プレースホルダー・ストリングは、commonActors アプリケーションの DIR1-NAME および DIR2-NAME と同じく、クエリーが SPARQL エンドポイント・サーバーに送信される前に置換されるからです)。


リスト 6. albumQuery アプリケーションの場合の SPARQL クエリー

PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT ?artistName ?album
    ?wpURL ?releaseDate ?coverURL
WHERE {
  ?s dbpedia2:artist   ?artist;
     dbpedia2:name     ?album;
     foaf:page         ?wpURL;
     dbpedia2:released ?releaseDate;
     dbpedia2:cover    ?coverURL.
  ?artist rdfs:label   ?artistName.

  FILTER (regex(?artistName, "ARTIST-STRING")).
  FILTER (regex(?album, "ALBUM-TITLE-STRING")).
  FILTER (lang(?artistName) = "en").
}
LIMIT 30

ウィキペディアのページに対応する DBpedia エントリーのそれぞれには、さまざまな情報が関連付けられた URI の ID があります。この情報にはアルバムのエントリーも含まれるため、このクエリーはアルバムのアーティスト ID、アルバム名、ウィキペディアの URL (図 3 のリンクを作成するため)、リリース日、カバーの URL (出力に画像を表示するため) を要求します。ユーザーには URI の ID ではなく、人間が読める名前を表示する必要があるため、クエリーはアーティスト ID を取得すると、その ID に対応する rdfs:label を要求します。

目的とするアルバムをクエリーがどのように指定するかと言うと、それには SPARQL の FILTER キーワードを使用します。このキーワードで、指定されたパターンと一致するアーティストの名前とアルバムの名前だけを要求していることを示します。commonActors アプリケーションと同じく、このクエリーにも、スクリプトが SPARQL エンドポイントに送信される前に CGI スクリプトによって置換されるダミー・ストリングがあります。DBpedia は、アーティストが複数の異なる言語でどのように参照されるかに応じて、1 人のアーティストに対して複数の名前を格納することができます。そのため 3 番目の FILTER 文で、英語のアーティスト名のみが対象であることを示します。

DBpedia サーバーに対する礼儀から、このクエリーには LIMIT 30 という文を組み込んで、あまりにも大量のデータを取得しないようにもしています。例えば、simpleAlbumQuery アプリケーションのユーザーがアルバムのタイトルとして「a」と入力し、アーティストのフィールドを空白のままにした場合、クエリーは DBpedia に対し、データベース内のあらゆるアーティストのアルバムのうち、タイトルに文字「a」が含まれるすべてのアルバムを要求することになり、あまりにも大量のデータを要求することになってしまうからです。

simpleAlbumQuery.cgi と simpleAlbumQuery.html の残りの部分を見てみると、SPARQL クエリーを除けば、コードのそれぞれには commonActors ファイルに何らかの対応するコードがあることがわかります。




上に戻る


独自のアプリケーション

自分のアプリケーションやそのユーザーに役立つデータがある SPARQL エンドポイントを見つけたら、独自の HTML フォームを作成するとともに、この記事に記載した 2 つのアプリケーションの構造をベースにした CGI スクリプトを作成し、そのデータを使用するアプリケーションを構築してみてください。ウィキペディアの Infobox を目にするたびに、commonActors や simpleAlbumQuery のようなアプリケーションを作成してデータを利用できることを思い出すのは愉快な気分です。また、W3C の SPARQL エンドポイント・リストはますます増大しつつあり、音楽関連の情報データベースがさらに追加されている一方、文学や生物学、薬学をはじめ、他のさまざまな分野のデータベースも見つかるはずです。さらに踏み込んで、1 つのアプリケーションで複数のエンドポイントからデータを取得し、データの集合から何か新しいものを組み立てて、一層複雑で興味深いアプリケーションに仕上げることも不可能ではありません。唯一制約となるのは、あなたの想像力だけです。





上に戻る


ダウンロード

内容ファイル名サイズダウンロード形式
Sample Python, HTML, and CSS for this articleWPQueryFormApps.zip5KBHTTP
ダウンロード形式について


参考文献

学ぶために

製品や技術を入手するために
  • SPARQL Wrapper: Python スクリプトによる SPARQL エンドポイントとの通信を単純化する Python ライブラリーをダウンロードしてください。

  • simplejson: この Python ライブラリーをダウンロードして、JSON フォーマットのデータ処理を自動化してください。

  • IBM 製品の評価版: DB2®、Lotus®、Rational®、Tivoli®、および WebSphere® のアプリケーション開発ツールとミドルウェア製品を体験するには、IBM SOA Sandbox のオンライン試用版をダウンロードするか、検討してみてください。


議論するために


著者について

Photo of Bob DuCharme

Bob DuCharme は Innodata Isogen のソリューション・アーキテクトであり、XML が禁句であった頃には XML のエキスパートでした。彼は情報技術に関して 4 冊の本と100 本近くのオンライン記事や印刷記事を書いていますが、そのどれにも「機能性 (functionality)」という単語を使っていません。詳しくは http://www.snee.com/bob と彼のブログ www.snee.com/bobdc.blog をご覧ください。




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



 


 


不充分・不完全である大変素晴らしい
 


この記事を共有する

del.icio.us del.icio.us newsing newsing FC2ブックマーク FC2ブックマーク
Choix! Choix! ニフティクリップ ニフティクリップ Yahoo!ブックマーク Yahoo!ブックマーク
MM/memo MM/memo CZブックマーク CZブックマーク livedoorクリップ livedoorクリップ
はてなブックマーク はてなブックマーク Buzzurl(バザール) Buzzurl(バザール)




上に戻る


    日本IBMについて プライバシー お問い合わせ