Windows Azure Marketplace DataMarket

DataMarket の概要

Elisa Flasko

Windows Azure Marketplace DataMarket は、マイクロソフトが PDC09 でプロジェクト コードネーム "Dallas" として初めて発表した製品です。この製品は、情報交換の方法を変え、1 か所のマーケットプレースで、商用および公共の権威ある広範な情報源からコンテンツを入手できるようにします。その結果、必要なデータの検索や購入を容易にし、アプリケーションや分析の能力を高めます。

以前に、自動車旅行の計画をたて、休憩場所を決めるアプリケーションを開発したことがありますが、このとき、さまざまな情報源から多くのデータを入手する必要がありました。このアプリケーションでは、まず、最終目的地と道中の休憩場所を入力するようユーザーに求めます。GPS で現在位置を取得するか、ユーザーに出発場所の入力を求め、この場所から自動車旅行の最適ルートを地図にします。旅行の道筋が決まったら、Facebook に接続して、ルート沿いに住んでいて、訪問したい友人を特定します。また、休憩場所に決めた都市の天気予報を調べたり、、道中立ち寄れそうな興味深い場所 (POI: Points Of Interest)、ガソリンスタンド、レストランなどを探したりすることもできます。

DataMarket がリリースされるまでは、アプリケーションに必要なさまざまなデータの情報源を自分で見つける必要がありました。多くの企業の Web サイトにアクセスして必要なデータが見つかるかどうか調べ、見つかったら、そのデータをパッケージに含めて販売する際に、自身のニーズに合った価格で入手できるかどうかを判断することになります。さらに、各企業からデータをそれぞれ直接購入しなければなりません。たとえば、ルート沿いにある POI、ガソリンスタンド、レストランの場所を特定できる情報を購入するためには Infogroup などの企業、現在の交通情報を入手するためには NavTeq などの企業、天気予報を調べるためには Weather Central などの企業に直接アクセスすることになります。これらの各企業は、データを提供する形式もまちまちです (DVD を送ってくる企業もあれば、Web サービスや Excel ブックなどで提供してくる企業もありました)。

現在、DataMarket により、このようなアプリケーションの作成がはるかに単純になります。DataMarket では、1 つの場所 (データのマーケットプレース) を用意して、ここからアプリケーションの開発に必要なデータの検索、調査、試用、および購入を実行できるようにします。また、データは統一されたインターフェイスから標準形式 (OData) で提供されます (OData の詳細については、OData.org (英語) を参照してください)。データを OData として公開することで、DataMarket では、あらゆるプラットフォーム (少なくとも、必要なのは HTTP スタックだけ) 上で、OData をサポートする多くのアプリケーション (OData をネイティブにサポートする Microsoft PowerPivot for Excel 2010 などのアプリケーション) からデータにアクセスできるようになりました。

DataMarket では、さまざまなコンテンツ プロバイダー向けに 1 つのマーケットプレースを用意し、多種多様なサービス (販売可能なデータのさまざまなサブセットやビューを提供するサービスや、異なる使用条件でデータを利用できるようにするサービス) を通じてデータを販売できるようにします。コンテンツ プロバイダーは、購入、価格決定モデル (毎月購読することでサービスを使用可能にするなど)、価格を定める使用条件など、サービスの詳細を指定します。

DataMarket 入門

まず、Windows Live ID を使用して DataMarket に登録し、サイトにログオンします。ここで、現在使用できるデータセットを検索し、それぞれの詳細 (説明、価格、表示方法、使用条件など) を確認して、目的の種類のデータを提供しているパブリッシャーや、ニーズに最適なデータを提供しているパブリッシャーを判断します。

アプリケーションの技術要件を満たすデータセットを見つける必要がありますが、その要件でのデータの使用が許可されているかどうかを、パブリッシャーが明記している使用条件で確認することも重要です。使用条件は、データセットやパブリッシャーによって大きく異なる可能性があります。サービスの詳細では、特定のデータセットの使用条件を表示できます。

少し調べてみると、前述の自動車旅行のアプリケーションにとっては、Infogroup Business Database (Infogroup ビジネス データベース) サービスが魅力的に思えます。使用可能なデータ表示方法 (データのサンプルを表形式で表示したり、場合によっては、データを地図上またはグラフ内に表示する場合もあります) を調べてみると、ルート沿いのホテル、レストラン、ガソリンスタンドなどの POI が提供されるため、要件を満たしていると考えられます。ニーズに合ったデータセットを特定したら、サービスを毎月購読することを選択し、毎月のサービス照会数を無制限にします。毎月の料金は、クレジット カードで簡単に支払うことができます。サービスを購入した後は、Marketplace の [Account] (アカウント) セクションで、アカウントを管理したり、現在購読しているすべてのサービスを確認したりできます。[アカウント] セクションは、購読しているサービスへのアクセスに使用するアカウント キーの作成と管理にも使用できます。PowerPivot などのアプリケーションからデータにアクセスするときは、アカウント キーを入力する必要があります。同様に、アプリケーションの開発時も、アカウント キーで認証されます。

データ サービスを購入すると、DataMarket に Service Explorer (サービス エクスプローラー) が表示されます (図 1 参照)。サービス エクスプローラーでは、クエリを作成して結果をプレビューし、各データセットで使用可能になるデータとスキーマに関する詳細を効率よく確認することによって、データセットを調べることができます。

image: DataMarket Service Explorer

図 1 DataMarket のサービス エクスプローラー

サービス エクスプローラーで Infogroup ビジネス データベース サービスを開く場合、都市名、州名、および郵便番号でフィルター選択するクエリを作成すれば、計画したルート沿いの場所を見つけることができます。たとえば、都市名にシアトル、州名にワシントンを指定して、[Execute query] (クエリの実行) をクリックすると、サービスから最初の 100 個の結果を含むプレビューが返されます。プレビューから、シアトルにワシントン ホテルがあることがわかり、これを休憩場所のリストに含めることができます。既定では、[Preview] (プレビュー) をクリックすると、エクスプローラーの右側に、結果が簡単なタブ形式で表示されるため、簡単に目を通すことができます。ただし、サービス エクスプローラーでは、アプリケーションで使用する OData の Atom 形式で表示することも、Infogroup から本来提供された形式で未加工のデータを表示することもできます。

私が開発者ではなく、つまりこのデータを使用するアプリケーションを作成することが目的ではなく、データを入手して、OData を認識する既存のツール (PowerPivot for Excel 2010 など) に格納するだけならば、DataMarket にサインインして、現在購読しているサービスの一覧を開き、データ サービスをクリックすることで、DataMarket から直接これを実行することもできます。購読しているサービスの一覧では、選択したアプリケーションからデータ サービスを開くためのオプションが提供されます (順を追って説明するチュートリアルなど、DataMarket と PowerPivot との併用の詳細については、DataMarket チーム ブログ (blogs.msdn.com/b/dallas、英語) を参照してください)。

OData の使用

これまでに、OData サービスからのデータを使用するアプリケーションを作成したことはありますか。DataMarket のほとんどのサービスは OData を使用して公開されているため、このようなアプリケーションを作成したことがあれば、DataMarket からのデータを使用する方法は理解しているも同然です。ここでは、OData 使用の基礎について簡単に説明します。

既存のアプリケーションから始めて DataMarket のデータを使用する新機能を追加する場合も、新しいアプリケーションをゼロから作成する場合も、DataMarket サービスからデータを取得する最初の手順は、アプリケーション内でデータを表現するクラスを定義することです。これには、独自の Plain Old C# Object (POCO) クラスをコーディングするか、Visual Studio のサービス参照の追加ウィザードを使用して必要なクラスを生成します。

既に説明したように、パブリッシャー (データの所有者) は、各データセットのデータの公開方法と、購入後のデータの使用方法を規定する使用条件を指定します。たとえば、ユーザーがデータセットに対してアドホック クエリを作成できるかどうか、クエリの作成方法、ユーザーがクエリしてデータを取得できるフィールド、データセットから返されるフィールドなどが指定されます。場合によっては、ユーザーがアドホック クエリを作成できないことや、ユーザーがサービスからデータを要求する Web メソッドが決められていることもあります。開発者は、アプリケーションの作成を始める前に、特定のサービスの Atom サービス ドキュメントを確認して、サービスからクエリのエンティティ セットが公開されるかどうかを判断する必要があります。これは、ブラウザーでサービスのルート URI を指定することで行います。サービス ドキュメントにコレクションが含まれていなければ、そのサービスではクエリのエンティティ セットを公開していないため、データセットにアクセスするには、決められた Web メソッドを使用する必要があります。たとえば、2 つの異なるデータセット向けの Atom サービス ドキュメントを調べてみましょう。1 つはクエリのエンティティ セットを公開し (Data.Gov の犯罪データ)、1 つはクエリがまったく許可されません (AP のデータ)。以下のコード サンプルでは、AP のサービスのサービス ドキュメントに <collection> ノード (公開されているエンティティ セットを表します) がないことがわかります。

以下に、クエリのエンティティ セットが公開される、Data.gov による犯罪データのサービスの Atom サービス ドキュメントを示します。このサービスでは、CityCrime という 1 つのエンティティ セットが公開されます。

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<service xml:base=
  "https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes"  
  xmlns:atom=
  "http://www.w3.org/2005/Atom" 
  xmlns:app="http://www.w3.org/2007/app" 
  xmlns="http://www.w3.org/2007/app">
 <workspace>
   <atom:title>Default</atom:title> 
   <collection href="CityCrime">
     <atom:title>CityCrime</atom:title> 
   </collection>
 </workspace>
</service>

以下に、アドホック クエリが許可されない、AP のサービスの Atom サービス ドキュメントを示します。

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<service xml:base=
  "https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes" 
  xmlns:atom="http://www.w3.org/2005/Atom" 
  xmlns:app="http://www.w3.org/2007/app" 
  xmlns="http://www.w3.org/2007/app">
 <workspace>
   <atom:title>Default</atom:title> 
 </workspace>
</service>

使用しているデータセットでクエリのエンティティ セットが公開される場合は、Windows Communication Foundation (WCF) サービスと同様に、Visual Studio の [サービス参照の追加] を使用できます。プロジェクトを右クリックして、[サービス参照の追加] をクリックするだけです。[サービス参照の追加] ダイアログ ボックスで、[アドレス] にサービスのエントリ ポイントの URI を入力し、[OK] をクリックします (サービスのエントリ ポイントの URI は、DataMarket のサービス エクスプローラーのページから取得できます)。

しかし、使用しているデータセットでアドホック クエリが許可されない場合は、サービス参照の追加を使用できません。この場合は、決められた Web メソッドを呼び出して、そのメソッドから返されるエンティティ (またはオブジェクト) を表す、独自の POCO クラスをコーディングします。DataMarket では、Windows Live ID をユーザー名に、関連付けられている DataMarket のアカウント キーをパスワードに指定して、基本認証を使用します。コンソール アプリケーションの例では、Visual Studio の [サービス参照の追加] を使用して、クラスを生成しています (図 2 参照)。Visual Studio では、サービスにアクセスし、データ サービスの定義に基づいて関連クラスを生成して、プロジェクトに追加します。クラスが生成されたら、OData サービスを使用するアプリケーションを開発するのと同じ方法でアプリケーションの開発を続け、基本認証または監査コレクション サービスのいずれかを使用して、サービスを認証します。図 2 の例では、基本認証を使用するシンプルなコンソール アプリケーションをセットアップします。

図 2 データ サービスにアクセスして結果を印刷するシンプルなコンソール アプリケーション

public class Program
  {
       
    static void Main(string[] args)
    {
        GetCityCrime X = new GetCityCrime();

        IList<CityCrime> stats = X.getStats();

        foreach (CityCrime c in stats)
        {
            Console.WriteLine(c.City + " : " + c.AggravatedAssault);
        }
        Console.ReadLine();
    }               
  }

  public class GetCityCrime
  {
    Uri serviceUri;
    datagovCrimesContainer context;

    public GetCityCrime()
    {
      serviceUri = 
        new Uri("https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes");
      context = new datagovCrimesContainer(serviceUri);
      context.Credentials = new NetworkCredential(" ", "
        <my account key as copied from DataMarket>");
    }

    public IList<CityCrime> getStats()
    {
      IEnumerable<CityCrime> query; 

       query = from c in context.CityCrime
             where c.State == "Alaska"
             select c;

       return query.ToList();
    }
  }

注: 図 2 のサンプル コードを実行するには、DataMarket にユーザー登録し、Data.Gov の犯罪統計サービスを購読する必要があります。また、このサンプルで使用する URI は、サービスの製品版のプレリリースを指しています。正しい URI は、DataMarket にログインして、[My Data] (マイ データ) をクリックし、購読している Data.gov の犯罪統計サービスにアクセスして確認できます。

データ サービスを使用するアプリケーション作成の詳細については、「Visual Studio 2010 での Entity Framework 4.0 と WCF Data Services 4.0」(msdn.microsoft.com/magazine/ee336128) および「Web サービスの世界でデータを公開および使用する」(msdn.microsoft.com/magazine/cc748663) を参照してください。

DataMarket でのデータの販売

よく利用されているアプリケーションや Web サイトでは、貴重なデータが大量に生成、格納、および使用されています。しかし、そのようなデータは、データを作成したアプリケーション内だけで使用されるのが一般的です。WCF Data Services と OData の導入により、開発者は、データを公開してより幅広く利用するための単純な方法を使用して、データ サービスのプラットフォームを提供し、それらのデータを当初意図していたアプリケーション内だけでなく、サード パーティ製アプリケーションでも簡単に使用できるようになります。開発者は、DataMarket を利用して、自身が作成したアプリケーションにデータを公開するだけでなく、以前から格納と管理のために必要だったデータを販売して利益を得ることも簡単にできるようになりました。

DataMarket は Windows Azure および SQL Azure 上に構築されるため、パブリッシャーは、SQL Azure でホストするデータ用のデータセットを作成できます。データが既に SQL Azure に格納されていれば、DataMarket でデータを販売できるようになったも同然です。DataMarket のパブリッシャーになる方法の詳細については、blogs.msdn.com/b/dallas (英語) を参照してください。

Elisa Flasko は、マイクロソフトの Windows Azure Marketplace DataMarket チームのプログラム マネージャーです。blogs.msdn.com/elisaj (英語) で彼女のブログをご覧いただけます。

この記事のレビューに協力してくれた技術スタッフの Rene Bouw、Moe Khosravy 、および Adam Wilson に心より感謝いたします。