Freebase Workshop
Jamie Taylor
New York City, December 2009

Code available at: http://dev.mqlx.com/~jamie/nyc2009
Building a MQL Query
"type":"/type/object" is assumed
  "name" = /type/object/name


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




                MQL
http://www.freebase.com/app/queryeditor
{
    "id":"/en/ncis",
    "name" : null,
    "type" : "/tv/tv_program"
}




         MQL
"/program_creator" = /tv/tv_program/program_creator



                 {
                     "id":"/en/ncis",
                     "name" : null,
                     "type" : "/tv/tv_program",
                     "program_creator":[ ]
                 }




                          MQL
{
    "id":"/en/ncis",
     "name" : null,
     "type" : "/tv/tv_program",
    "program_creator":[{ "id":null, "name":null }]
}




                 MQL
Mark Harmon
             TV
        Performance


                                           Jethro Gibbs
{
    "id":"/en/ncis",
     "name" : null,
     "type" : "/tv/tv_program",
    "program_creator":[{ "id":null, "name:null }],
    "regular_cast":[{
          "actor":null,
          "character":null
       }]
}
{
    "id":"/en/ncis",
     "name" : null,
     "type" : "/tv/tv_program",
    "program_creator":[{ "id":null, "name:null }],
    "regular_cast":[{
          "actor":null,
          "character":null
       }]
}
Mark Harmon
             TV
        Performance


                                           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
       }]
}
{
    "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":"/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}]
}
Accessing Freebase Services
          via PHP
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;
Accessing External Services
   via MQL Extensions
A Graph of Entities
A Graph of Services
http://www.bestbuy.com/site/She+Wolf…

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

                         http://twitter.com/shakira

                  http://www.facebook.com/shakira

                  http://www.myspace.com/shakira

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

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

          http://www.guardian.co.uk/music/shakira
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
eMQL Query

{
  "id":   "/en/ibm",
                                         ticker
  "type": "/business/company",
  "ticker_symbol": [{
                                 "ibm"
    "stock_exchange": null,
    "ticker_symbol":null
  }]
}
eMQL Query
{
  "id":   "/en/ibm",
  "type": "/business/company",           ticker
  "ticker_symbol": [{
    "stock_exchange": null,      "ibm"
    "ticker_symbol":null,
    "quote":null
  }]
}
eMQL Query
{
  "id":   "/en/ibm",
  "type": "/business/company",              ticker
  "ticker_symbol": [{
    "stock_exchange": null,           "ibm"
    "ticker_symbol":null,
    "quote":null             "pre"
  }]
}
                               "fetch"
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
MQL Read Service
http://api.freebase.com/api/service/mqlread?query=
                         {"query":{"id":"/en/ncis", "name":null}}

http://api.freebase.com/api/service/mqlread?queries=
          {"q0":{"query":{"id":"/en/ncis", "name":null}}}
          {"q1":{"query":{"id":"/en/blade_runner", "name":null}}}
MQL Requests in PHP
               {"id":"/en/ncis", "name":null}
$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"]
Demo eMQL Extensions


      stock quote



     @tag references
TV Episode Adapter
Query:
          {
            "id":"/en/ncis",
            "/user/jamie/extension/tv_episode": null
          }

Desired
Data:                   "name":"Faith"
                   "airdate": "Dec/15/2009"
           "id":"/authority/tvrage/episode/1064868143"
TV Rage Episode Adapter
http://services.tvrage.com/tools/quickinfo.php?show=NCIS

         Show ID@4628
         Show Name@NCIS
         Show URL@http://www.tvrage.com/NCIS
         Premiered@2003
         Started@Sep/23/2003
         Ended@
         Latest Episode@07x09^Child's Play^Nov/24/2009
         Next Episode@07x10^Faith^Dec/15/2009
         RFC3339@2009-12-15T20:00:00-5:00
         GMT+0 NODST@1260921600
         Country@USA
         Status@Returning Series
         Classification@Scripted
         Genres@Action | Crime | Drama | Military/War
         Network@CBS
         Airtime@Tuesday at 08:00 pm
         Runtime@60
TV Episode Adapter
                           eMQL Driver
                                                                                                                 TV Rage




                                                                                                       Time
query dispatched



                                            pre
                                                                                                                   eMQL
     MQL Query




                                                         Extend MQL query to retrieve
                                                        TV Rage Key (program identifier)
                                         updated MQL
                                            query
                                                                                                                  Adapter


                                                                                               TV Rage Service
                 run MQL
                   query
                  MQL
                 results                                                                                         Life Cycle
                                           fetch
                                                                                 get series
                                                                                   data
                                                                                next episode
                                                                                  number,
                                                                                 name,date

                                                                                get episode
                                                                                    data

                                                                                   next
                                                                                  episode
                                                                                   URL
                                                      format results

                                            results

                  return
                  query
                 results
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!
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
http://ids.freebaseapps.com
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
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
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

Freebase Workshop, December 2009

  • 1.
    Freebase Workshop Jamie Taylor NewYork City, December 2009 Code available at: http://dev.mqlx.com/~jamie/nyc2009
  • 2.
  • 3.
    "type":"/type/object" is assumed "name" = /type/object/name [{ "name" : null, "type" : "/tv/tv_program" }] MQL
  • 4.
  • 5.
    { "id":"/en/ncis", "name" : null, "type" : "/tv/tv_program" } MQL
  • 7.
    "/program_creator" = /tv/tv_program/program_creator { "id":"/en/ncis", "name" : null, "type" : "/tv/tv_program", "program_creator":[ ] } MQL
  • 8.
    { "id":"/en/ncis", "name" : null, "type" : "/tv/tv_program", "program_creator":[{ "id":null, "name":null }] } MQL
  • 9.
    Mark Harmon TV Performance Jethro Gibbs { "id":"/en/ncis", "name" : null, "type" : "/tv/tv_program", "program_creator":[{ "id":null, "name:null }], "regular_cast":[{ "actor":null, "character":null }] }
  • 10.
    { "id":"/en/ncis", "name" : null, "type" : "/tv/tv_program", "program_creator":[{ "id":null, "name:null }], "regular_cast":[{ "actor":null, "character":null }] }
  • 11.
    Mark Harmon TV Performance 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 }] }
  • 12.
    { "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":[ ] }
  • 13.
    { "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}] }
  • 14.
  • 15.
    Service Requests inPHP • 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;
  • 16.
    Accessing External Services via MQL Extensions
  • 17.
    A Graph ofEntities
  • 18.
    A Graph ofServices
  • 19.
    http://www.bestbuy.com/site/She+Wolf… http://www.daylife.com/topic/Shakira http://twitter.com/shakira http://www.facebook.com/shakira http://www.myspace.com/shakira http://www.last.fm/music/Shakira http://www.netflix.com/RoleDisplay/Shakira/20046629 http://www.guardian.co.uk/music/shakira
  • 20.
    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
  • 21.
    eMQL Query {   "id":   "/en/ibm", ticker   "type": "/business/company",   "ticker_symbol": [{ "ibm"     "stock_exchange": null,     "ticker_symbol":null   }] }
  • 22.
    eMQL Query {   "id":   "/en/ibm",   "type":"/business/company", ticker   "ticker_symbol": [{     "stock_exchange": null, "ibm"     "ticker_symbol":null, "quote":null   }] }
  • 23.
    eMQL Query {   "id":   "/en/ibm",   "type":"/business/company", ticker   "ticker_symbol": [{     "stock_exchange": null, "ibm"     "ticker_symbol":null, "quote":null "pre"   }] } "fetch"
  • 24.
    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
  • 25.
    MQL Read Service http://api.freebase.com/api/service/mqlread?query= {"query":{"id":"/en/ncis", "name":null}} http://api.freebase.com/api/service/mqlread?queries= {"q0":{"query":{"id":"/en/ncis", "name":null}}} {"q1":{"query":{"id":"/en/blade_runner", "name":null}}}
  • 26.
    MQL Requests inPHP {"id":"/en/ncis", "name":null} $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"]
  • 27.
    Demo eMQL Extensions stock quote @tag references
  • 28.
    TV Episode Adapter Query: {   "id":"/en/ncis",   "/user/jamie/extension/tv_episode": null } Desired Data: "name":"Faith" "airdate": "Dec/15/2009" "id":"/authority/tvrage/episode/1064868143"
  • 29.
  • 30.
    http://services.tvrage.com/tools/quickinfo.php?show=NCIS Show ID@4628 Show Name@NCIS Show URL@http://www.tvrage.com/NCIS Premiered@2003 Started@Sep/23/2003 Ended@ Latest Episode@07x09^Child's Play^Nov/24/2009 Next Episode@07x10^Faith^Dec/15/2009 RFC3339@2009-12-15T20:00:00-5:00 GMT+0 NODST@1260921600 Country@USA Status@Returning Series Classification@Scripted Genres@Action | Crime | Drama | Military/War Network@CBS Airtime@Tuesday at 08:00 pm Runtime@60
  • 31.
    TV Episode Adapter eMQL Driver TV Rage Time query dispatched pre eMQL MQL Query Extend MQL query to retrieve TV Rage Key (program identifier) updated MQL query Adapter TV Rage Service run MQL query MQL results Life Cycle fetch get series data next episode number, name,date get episode data next episode URL format results results return query results
  • 32.
    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!
  • 33.
    URLs and FreebaseKeys • 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
  • 34.
  • 35.
    Using Freebase RDFURIs 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
  • 36.
    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
  • 37.
    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