本文章是由機器翻譯。

Windows Azure Marketplace DataMarket

DataMarket 簡介

Elisa Flasko

Windows Azure Marketplace 資料市場最早在 PDC09 期間推出,當時的 Microsoft 專案代碼是“Dallas”。這一產品改變了資訊的交換方式,因為它可以在一個市場中為使用者提供範圍廣泛的內容,這些內容由權威的商用和公共資訊來源發佈。這使您能夠更方便地查找和購買所需的資料,增強您的應用程式和分析能力。

如果我要開發一款應用程式,用來標識和安排某次旅程中的停留點,那麼我將需要眾多資料,資料來源也是五花八門。該應用程式可能會先要求使用者輸入最終目的地,以及要在沿途停留的網站。它可能會檢索當前的 GPS 位置或要求使用者輸入起點,然後使用這些位置為旅程繪製出最佳路線。應用程式繪製路線之後,它會連接到 Facebook,找出我可能想拜訪的且在該路線沿途居住的朋友。它會獲取標識為停留點的城市的天氣預報,以及當地的關注點、加油站和餐館,這些地方都可能成為旅程中的停留地。

在資料市場推出之前,我必須首先查找各種資料來源,才能滿足應用程式對不同類型資料的需求。查找期間,我需要訪問很多家公司的網站,以便確定他們是否提供我需要的資料、是否打包銷售這些資料並且價格符合我的預期。然後,我必須分別從各家公司直接購買這些資料。例如,我需要直接聯繫一家公司(如 Infogroup),購買可讓我標識沿途關注點、加油站和餐館的資料;聯繫另一家公司(如 NavTeq),購買即時交通路況資訊;再聯繫另一家公司(如 Weather Central),購買天氣預報資訊。而這些公司很有可能通過不同的格式來提供各自的資料,有些公司給我送來 DVD,有些則通過網路服務、Excel 試算表等等方式。

而今,利用資料市場,這款應用程式的開發將變得極其簡單。通過資料市場,我在一個位置(即資料的市場)就能搜索、流覽、試用和購買開發應用程式所需的全部資料。而且它通過統一的介面、標準的格式(OData,請參見 OData.org 獲取更多資訊)為我提供資料。資料市場提供 OData 格式的資料,因此確保我能夠在任何平臺上(最低程度而言,我擁有 HTTP 堆疊即可)以及很多支援 OData 的應用程式中訪問資料,包括 Microsoft PowerPivot for Excel 2010(該程式本身就支援 OData)等應用程式。

對於各家內容提供者來說,資料市場也成為他們通過多種不同產品銷售資料的單一市場(每種產品都可以提供不同的資料子集或視圖,或者為提供的資料制定不同的使用條款)。內容提供者可以指定資料產品的詳細資訊,包括約束購買行為的使用條款、價格模式(在版本 1 中,資料產品採用每月訂閱的方式提供)和價格。

資料市場入門

首先,我使用我的 Windows Live ID 在資料市場進行註冊並登錄該網站。在這裡,我可以搜索目前網站中提供的資料集,查看資料集的詳細資訊(說明、定價、視覺化、使用條款等等),以確定哪家發佈商能夠提供我需要的資料類型,哪種資料產品最符合我的需求。

儘管我要查找的資料集應該符合應用程式的技術要求,但確認我的應用程式使用資料的方式符合發佈商的使用條款同樣重要。各種資料集、各家發佈商的使用條款各不相同。我可以在資料產品的詳細資訊中查看具體資料集的使用條款。

經過一番流覽和比較,我發現 Infogroup Business Database 服務可能適合我的旅程應用程式。通過查看資料的視覺化視圖(表格形式的資料示例;其他視覺化視圖可能是地圖或圖表中的資料),我瞭解到這一服務能為我提供沿途的關注點資訊,包括賓館、餐館和加油站,應該符合我的要求。確定哪個資料集符合我的需求之後,我可以選擇採取每月訂閱的方式購買該服務,即每個月對服務進行不限次數的查詢,而訂閱費用可以通過信用卡支付。購買服務之後,我可以在 Marketplace 的“Account”部分管理我的帳戶,查看我當前的所有訂閱。“Account”部分還可用於創建和管理帳戶金鑰,該金鑰用於訪問我的訂閱。當從應用程式(例如 PowerPivot)訪問資料時,我需要提供帳戶金鑰。同樣,在開發應用程式時,也將使用帳戶金鑰進行身份驗證。

購買資料產品之後,我可以利用資料市場中的 Service Explorer(如圖 1 所示),通過創建查詢並預覽查詢結果來瞭解資料集,從而更有效地掌握每個資料集提供的資料和架構。

圖 1 資料市場 Service Explorer

如果我在 Service Explorer 中打開 Infogroup Business Database 服務,就可以創建查詢,按照城市、州和郵遞區號進行過濾,找出計畫好的路線沿途的地點。例如,我指定城市“Seattle”和州“WA”,然後按一下“Execute query”,我將得到一份預覽,包含了來自該服務的前 100 條結果。在這份預覽中,我看到 Seattle 的 Westin Hotel,我的應用程式將把這家酒店放入停留點清單中。預設情況下,當我按一下“Preview”時,結果會顯示在 Service Explorer 的右側,採用基本的表格格式,便於查閱。但我也可以在 Service Explorer 中查看將在應用程式中使用的 OData Atom 格式,或者以 Infogroup 最初提供的格式查看原始資料。

如果我不是開發人員,或者我的目標不是使用這些資料構建應用程式,而是將這些資料放入支援 OData 的現有工具中(例如 PowerPivot for Excel 2010),我也可以通過登錄、打開當前的訂閱清單並按一下資料產品,從資料市場直接實現我的目標。網站中將提供選項,讓我在我選擇的應用程式中打開資料產品。(有關將資料市場與 PowerPivot 結合使用的詳細資訊,包括分步教程,請查閱資料市場團隊的博客 blogs.msdn.com/b/dallas。)

使用 OData

您以前是否構建過應用程式來使用 OData 服務提供的資料?如果您構建過,則您已經做好準備,可以在應用程式中使用來自資料市場的資料,因為大部分資料市場服務都採用 OData。我將簡要介紹一下使用 OData 的基本知識。

無論我是向現有的應用程式中添加利用資料市場中資料的新功能,還是從頭開始創建新的應用程式,從資料市場服務中獲取資料的第一步都是定義類,以便在應用程式中展示資料。為此,我可以編寫自己的 Plain Old C# Object (POCO) 類,或者使用 Visual Studio 中的“添加服務引用嚮導”生成必要的類。

正如前文所述,發佈商(資料的所有者)除了指定每個資料集的資料如何顯示以外,還會指定使用條款,規定如何在購買後使用資料。這其中包括指定如何創建針對資料集的專門查詢;以及如果使用者創建專門查詢,使用者可以查詢哪些欄位以檢索資料,查詢將返回哪些欄位。在某些情況下,發佈商可能指定使用者無法創建專門查詢,必須使用固定的 Web 方法從服務請求資料。作為開發人員,在開始編寫應用程式之前,我需要查看特定產品的 Atom Service 文檔,以確定該產品是否提供查詢實體集。為此,我可以將流覽器指向產品的根 URI。如果服務文檔不包含任何集合,則產品不提供查詢實體集,我需要使用固定的 Web 方法訪問資料集。例如,讓我們看看兩個獨立資料集的 Atom Service 文檔,一個提供了查詢實體集 (Data.Gov Crime Data),另一個根本不允許查詢 (AP Data)。請注意以下代碼示例,AP 產品的服務文檔中沒有 <collection> nodes 節點(代表提供的實體集)。

這裡是 Data.gov Crime 資料產品的 Atom Service 文檔,它提供了查詢實體集。這個產品提供了一個實體集 CityCrime:

<?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 Service 文檔,它不允許專門查詢:

<?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>

如果我使用的資料集提供查詢實體集,我可以使用 Visual Studio 中的“添加服務引用”,就像處理 Windows Communication Foundation (WCF) 服務一樣。 只需按右鍵專案,然後選擇“添加服務引用”。 在“添加服務引用”對話方塊中,輸入服務接入點的 URI(可以在資料市場的 Service Explorer 頁面中找到)作為“位址”,然後按一下“確定”。

但如果我使用的資料集不允許專門查詢,我將無法使用“添加服務引用”。 在這種情況下,我可以編寫自己的 POCO 類,表示從我調用的固定 Web 方法返回的實體(或物件)。 資料市場使用基本驗證,傳遞 Windows Live ID 作為使用者名,並將相關的資料市場帳戶金鑰傳遞到密碼欄位。為了演示主控台應用程式示例(參見圖 2),我使用了 Visual Studio 中的“添加服務引用”來生成類。 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 中的代碼示例,您需要註冊成為資料市場的使用者,並訂閱 Data.Gov Crime Statistics 產品。 另外還要注意,此示例中使用的 URI 指向該服務的預生產發佈版本。您可以通過登錄資料市場,轉至“My Datasets”並訪問您對 Data.gov Crime Statistics 產品的訂閱來獲得正確的 URI。

有關編寫使用資料服務的應用程式的詳細資訊,請參見“Visual Studio 2010 中的實體框架 4.0 和 WCF 資料服務 4.0”(msdn.microsoft.com/magazine/ee336128) 和“在 Web 服務領域公開和使用資料”(msdn.microsoft.com/magazine/cc748663)。

在資料市場中銷售資料

很多主流的應用程式和網站會生成、存儲和使用大量寶貴的資料。 但一般來說,這些資料僅在創建它們的應用程式中得到利用。 隨著 WCF 資料服務和 OData 的推出,我們為開發人員找到了一個簡單的方法,讓資料有了更廣泛的用途。通過提供一個資料服務平臺,讓資料不但能更方便地在最初的應用程式中使用,也能更方便地在協力廠商應用程式中使用。 現在,利用資料市場,開發人員不僅有機會在自己構建的應用程式中提供資料,還有機會將存儲和維護的資料拿出來銷售,獲得收益。

資料市場構建在 Windows Azure 和 SQL Azure 上,允許發佈商為其託管在 SQL Azure 中的資料創建資料集。 如果我的資料已經存儲在 SQL Azure 中,則隨時可以在資料市場中銷售資料。 若要瞭解如何成為資料市場中的發佈商,請參見 blogs.msdn.com/b/dallas

Elisa Flasko 是 Microsoft 的 Windows Azure Marketplace 資料市場團隊的一名專案經理。 您可以通過 blogs.msdn.com/elisaj 與她取得聯繫。

衷心感謝以下技術專家對本文的審閱:Rene Bouw、Moe KhosravyAdam Wilson