37
Freebase Workshop Jamie Taylor New York City, December 2009 Code available at: http://dev.mqlx.com/~jamie/nyc2009

Freebase Workshop, December 2009

Embed Size (px)

DESCRIPTION

Presented at the Freebase NYC Workshop, December 2009. Covers basic MQL query construction, basic service calls and eMQL adapter construction. PHP Code can be found at http://dev.mqlx.com/~jamie/nyc2009

Citation preview

Page 1: Freebase Workshop, December 2009

Freebase WorkshopJamie TaylorNew York City, December 2009

Code available at: http://dev.mqlx.com/~jamie/nyc2009

Page 2: Freebase Workshop, December 2009

Building a MQL Query

Page 3: Freebase Workshop, December 2009

MQL

[{ "name" : null, "type" : "/tv/tv_program"}]

"type":"/type/object" is assumed"name" = /type/object/name

Page 5: Freebase Workshop, December 2009

MQL

{"id":"/en/ncis",

"name" : null, "type" : "/tv/tv_program"}

Page 6: Freebase Workshop, December 2009
Page 7: Freebase Workshop, December 2009

MQL

{"id":"/en/ncis",

"name" : null, "type" : "/tv/tv_program",

"program_creator":[ ]}

"/program_creator" = /tv/tv_program/program_creator

Page 8: Freebase Workshop, December 2009

MQL

{"id":"/en/ncis",

"name" : null, "type" : "/tv/tv_program",

"program_creator":[{ "id":null, "name":null }]}

Page 9: Freebase Workshop, December 2009

TVPerformance

Mark Harmon

Jethro Gibbs{

"id":"/en/ncis", "name" : null, "type" : "/tv/tv_program",

"program_creator":[{ "id":null, "name:null }],"regular_cast":[{

"actor":null, "character":null

}]}

Page 10: Freebase Workshop, December 2009

{"id":"/en/ncis",

"name" : null, "type" : "/tv/tv_program",

"program_creator":[{ "id":null, "name:null }],"regular_cast":[{

"actor":null, "character":null

}]}

Page 11: Freebase Workshop, December 2009

TVPerformance

Mark Harmon

Jethro Gibbs{

"id":"/en/ncis", "name" : null, "type" : "/tv/tv_program",

"program_creator":[{ "id":null, "name:null }],"regular_cast":[{

"actor": {"id":null, "name":null}, "character":null

}]}

Page 12: Freebase Workshop, December 2009

{"id":"/en/ncis",

"name" : null, "type" : "/tv/tv_program",

"program_creator":[{ "id":null, "name:null }],"regular_cast":[{

"actor": {"id":null, "name":null}, "character":null

}],"spin_offs":[ ]

}

Page 13: Freebase Workshop, December 2009

{"id":"/en/ncis",

"name" : null, "type" : "/tv/tv_program",

"program_creator":[{ "id":null, "name:null }],"regular_cast":[{

"actor": {"id":null, "name":null}, "character":null

}],"spin_offs":[{"id":null, "name":null,

"air_date_of_first_episode":null}]}

Page 14: Freebase Workshop, December 2009

Accessing Freebase Services via PHP

Page 15: Freebase Workshop, December 2009

Service Requests in PHP

• Using cURL to make external service requests

$topicid = "/en/ncis";$widgeturl = "http://www.freebase.com/widget/topic?id= $topicid&mode=i&panes=image,article_props";

$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $widgeturl);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$resultstr = curl_exec($ch);curl_close($ch);

print $resultstr;

Page 16: Freebase Workshop, December 2009

Accessing External Services via MQL Extensions

Page 17: Freebase Workshop, December 2009

A Graph of Entities

Page 18: Freebase Workshop, December 2009

A Graph of Services

Page 19: Freebase Workshop, December 2009

http://www.myspace.com/shakira

http://www.facebook.com/shakira

http://twitter.com/shakira

http://www.daylife.com/topic/Shakira

http://www.bestbuy.com/site/She+Wolf…

http://www.guardian.co.uk/music/shakira

http://www.last.fm/music/Shakira

http://www.netflix.com/RoleDisplay/Shakira/20046629

Page 20: Freebase Workshop, December 2009

eMQL: MQL Extensions

• Request data from other service providers• Services accessed transparently within MQL query

• Use Freebase Keys/Properties in external service request

• Uses:

• real-time data services

• Stock quotes, sensor data

• premium services

• requests can specify private "api keys" for the service

• fine grained & authoritative data sources

Page 21: Freebase Workshop, December 2009

eMQL Query

{  "id":   "/en/ibm",  "type": "/business/company",  "ticker_symbol": [{    "stock_exchange": null,    "ticker_symbol":null  }]}

ticker

"ibm"

Page 22: Freebase Workshop, December 2009

{  "id":   "/en/ibm",  "type": "/business/company",  "ticker_symbol": [{    "stock_exchange": null,    "ticker_symbol":null, "quote":null  }]}

eMQL Query

ticker

"ibm"

Page 23: Freebase Workshop, December 2009

{  "id":   "/en/ibm",  "type": "/business/company",  "ticker_symbol": [{    "stock_exchange": null,    "ticker_symbol":null, "quote":null  }]}

eMQL Query

ticker

"ibm"

"pre"

"fetch"

Page 24: Freebase Workshop, December 2009

eMQL Service Request• Pre

• Modify MQL query to provide additional information necessary to complete request

• e.g., retrieve specific namespace keys

• Fetch• Produce (retrieve, calculate, format) value for the

eMQL property

• Reduce (optional)• Create a result that looks across all results returned

in the query

• Help

• Document how the property is used

Page 26: Freebase Workshop, December 2009

MQL Requests in PHP

$topicid = "/en/ncis";$simplequery = array('id'=>$topicid, 'name'=>null);$queryarray = array('q1'=>array('query'=>$simplequery)); #query envelope

$jsonquerystr = json_encode($queryarray);$mqlurl = "http://www.freebase.com/api/service/mqlread?queries=". $jsonquerystr;

$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $mqlurl);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$resultstr = curl_exec($ch);curl_close($ch); $resultarray = json_decode($resultstr, true); #true:give us an array

$topicname = $resultarray["q1"]["result"]["name"]

{"id":"/en/ncis", "name":null}

Page 27: Freebase Workshop, December 2009

Demo eMQL Extensions

stock quote

@tag references

Page 28: Freebase Workshop, December 2009

TV Episode Adapter

{  "id":"/en/ncis",  "/user/jamie/extension/tv_episode": null}

"name":"Faith""airdate": "Dec/15/2009"

"id":"/authority/tvrage/episode/1064868143"

Query:

DesiredData:

Page 29: Freebase Workshop, December 2009

TV Rage Episode Adapter

Page 30: Freebase Workshop, December 2009

Show ID@4628Show Name@NCISShow URL@http://www.tvrage.com/NCISPremiered@2003Started@Sep/23/2003Ended@Latest Episode@07x09^Child's Play^Nov/24/2009Next Episode@07x10^Faith^Dec/15/2009RFC3339@2009-12-15T20:00:00-5:00GMT+0 NODST@1260921600Country@USAStatus@Returning SeriesClassification@ScriptedGenres@Action | Crime | Drama | Military/WarNetwork@CBSAirtime@Tuesday at 08:00 pmRuntime@60

http://services.tvrage.com/tools/quickinfo.php?show=NCIS

Page 31: Freebase Workshop, December 2009

Tim

e

TV

Ep

iso

de

Ad

ap

ter

eM

QL D

rive

r

pre

updated MQLquery

MQ

L Q

ue

ry

run MQLquery

MQLresults

fetch

Extend MQL query to retrieveTV Rage Key (program identifier)

TV

Ra

ge

Se

rvic

e

get seriesdata

next episodenumber,

name,date

nextepisode

URL

get episodedata

query dispatched

format results

results

returnqueryresults

TV RageeMQL

AdapterLife Cycle

Page 32: Freebase Workshop, December 2009

Using Foreign Identifiers to locate Freebase Topics

• /authority Namespace• Organizations managing stable entity identifiers

• /source - identifiers only appearing in URLs

• Keys can be for URLs to other sites• And vice-versa!

Page 33: Freebase Workshop, December 2009

URLs and Freebase Keys

• http://www.imdb.com/title/tt0083658• /authority/imdb/title/tt0083658• http://www.rottentomatoes.com/alias?type=imdbid&s=0083658

• http://dbpedia.org/resource/Blade_Runner• /wikipedia/en/Blade_Runner• http://en.wikipedia.org/wiki/Blade_Runner

• http://musicbrainz.org/artist/2c4dae8c-e591-49e0-9c5a-62b310a15788.html• /authority/musicbrainz/2c4dae8c-

e591-49e0-9c5a-62b310a15788• http://www.bbc.co.uk/music/artists/2c4dae8c-

e591-49e0-9c5a-62b310a15788

Page 34: Freebase Workshop, December 2009

http://ids.freebaseapps.com

Page 35: Freebase Workshop, December 2009

Using Freebase RDF URIs

http://rdf.freebase.com/ns/<freebase-key>

• Performs content negotiation (HTTP ACCEPT Header)

• Produces HTML for standard browsers

• Produces RDF if you ask for it

• Easily translated to MQL style Freebase identifiers

http://rdf.freebase.com/ns/en.ncis = /en/ncis

Page 36: Freebase Workshop, December 2009

Entity Extractors

• Zemanta• Freebase RDF URIs• Wikipedia Links• IMDB identifiers

• Orchestr8• Freebase RDF URIs• DBPedia RDF URIs• MusicBrainz identifiers• Crunchbase identifiers

• OpenCalais• Freebase RDF URIs• DBPedia RDF URIs

Page 37: Freebase Workshop, December 2009

Getting Started++• Freebase Documentation Hub

• http://www.freebase.com/docs

• Developer Mailing List• http://freebase.markmail.org/search/?q=list:com.freebase.developers

• Schema/Modeling assistance• Data Modeling Mailing List

• http://freebase.markmail.org/search/?q=list:com.freebase.data-modeling

• Real Time help on IRC• Freenode #freebase

• Freebase Happenings• http://blog.freebase.com