freebasing for fun and enhancement · freebase • "freebase is a vast, free, open online...
TRANSCRIPT
FreebasingforFunand
EnhancementSeanHannan
TheSheridanLibraries
JohnsHopkinsUniversity
Freebase
• "Freebaseisavast,free,openonlinedatabaseofstructuredknowledge,poweredandmaintainedbyMetawebTechnologies“
• DataisstoredasnodesandrelaEonships
FreebaseAPIs
• It’saRESTinterface,sousewhateveryouwant
• AccessiblethroughhKp://api.freebase.com/api/service/mqlread?query={"query":MQLQUERYSTRING}
• (/api/service/mqlwritealsoexiststowritetofreebase…andthere’sabunchofotheronestoo)
FreebaseAPIs
• QuerylanguageisMQL• ReturnsplaintextJSON• ErrorsareevenneatlyserializedasJSON• JSONJSONJSON
MQL
• JSONbased• Lookslike…[{"date_of_birth":null,"name":"VeneEanSnares","type":"/people/person"}]
Let’smakesomething
• HowaboutanembeddablesnippetofcodethatlinksAcademyAwardsdatatoentriesinourcatalog?
• Painintheasstomakebyhand
• Evenmoreofapainintheasstoremembertoupdateiteveryyear
• So,let’sgrabtheEtlesofbestpicturewinners.
ClonetheApp
h"p://code4lib.mrdys.user.dev.freebaseapps.com/
InSQL…
• You’dwantsomethinglike“SELECTEtle,yearFROMAwardsWHEREaward=“BestPicture”;
• InMQLthislookslike…
MQL
[{"award":"AcademyAwardforBestPicture","honored_for":null,"id":null,"sort":"‐year","type":"/award/award_honor","year":null}]
• Howdoweknowwhat“fields”?Takealookatthe/award/award_honorschema:
• hKp://www.freebase.com/type/schema/award/award_honor
Results
{
"award":"AcademyAwardforBestPicture",
"honored_for":"SlumdogMillionaire",
"id":"/guid/9202a8c04000641f800000000af060p",
"type":"/award/award_honor",
"year":"2008"
},…
TemplaEngandLinkingw/Acre<acre:script>
varquery=acre.require("query").query;varawards=acre.freebase.MqlRead(query).result;</acre:script><h3>${awards[0].award}:</h3><ul><liacre:for="awardinawards"><ahref="hKps://catalog.library.jhu.edu/ipac20/ipac.jsp?menu=search&npp=30&ipp=20&spp=20&aspect=power&profile=general&ri=&limitbox_=&index=.VT&term=${escape(award.honored_for)}">$award.year‐$award.honored_for</a></li></ul>
Getsyou…
Let’sgetmoreinformaEon…
[{"award":"AcademyAwardforBestPicture","honored_for":{"*":null,"type":"/film/film"},"id":null,"sort":"‐year","type":"/award/award_honor","year":null}]
Subqueries!
• JustopenuptheJSONblockforthat‘field’anddomoreselects/filteringtogetwhatyouneedforthatdatatype
• Idon’tknowwhat’sinthere,solet’swildcardit
Wildcards!
• “*”:nullwillgetyoueverything(forthatcontext)
• Greatfordebugging,butbecareful• Everythinglookslike…
…"prequel":[],"produced_by":["ChrisEanColson"],"producEon_companies":["FoxSearchlightPictures","WarnerBros."],"raEng":[],…
TemplaEngagain…<acre:script>
varquery=acre.require("query2").query;varawards=acre.freebase.MqlRead(query).result;</acre:script><h3>${awards[0].award}:</h3><ul><liacre:for="awardinawards"><ahref="hKps://catalog.library.jhu.edu/ipac20/ipac.jsp?menu=search&npp=30&ipp=20&spp=20&aspect=power&profile=general&ri=&limitbox_=&index=.VT&term=${escape(award.honored_for.name)}">$award.year‐$award.honored_for.name</a><divacre:for="producersinaward.honored_for.produced_by">$producers</div>
</li></ul>
AKribuEonisfun.
• ProducersareawardedinthecaseofBestPicture,sogivethemsomelove:
Whatabouttherestofthecategories?
[{"presenEng_organizaEon":"AcademyofMoEonPictureArtsandSciences","type":"/award/award_category","name":null,"winners":[{"type":"/award/award_honor","id":null,"year":null,"/type/reflect/any_master":[{"name":null,"type":"/film/film",}],"sort":"‐year"}]}]
ReflecEon!
• BecausethesubquerygetsinformaEonoutofthe/award/award_honortype,youdon’thaveallofthefuninformaEonassociatedwiththe/film/filmtype.
• “/type/reflect/any_master”willgiveyoualloftheobjectsthatlinktothisparEcularpointinthegraph(/award/award_honor/winnerinthiscase)
• SortoflikeSQLJOINs(sortof)
Results!…"name":"AcademyAwardforBestShortFilm‐LiveAcEon‐2Reels","presenEng_organizaEon":"AcademyofMoEonPictureArtsandSciences","type":"/award/award_category","winners":[{"/type/reflect/any_master":[{"name":"TheBespokeOvercoat","type":"/film/film"}],"id":"/guid/9202a8c04000641f80000000091c205b","type":"/award/award_honor","year":"1956"},…
Onemorepass![
{"presenEng_organizaEon":"AcademyofMoEonPictureArtsandSciences","type":"/award/award_category","name":{"value":null,"value|=":["AcademyAwardforBestDirector","AcademyAwardforBestActor","AcademyAwardforBestPicture","AcademyAwardforBestActress","AcademyAwardforWriEngOriginalScreenplay"],"lang":"/lang/en"},"winners":[{"type":"/award/award_honor","id":null,"year":null,"awardee:/type/reflect/any_master":[{"name":null,"type":"/award/award_winner","opEonal":"opEonal"}],"Etle:/type/reflect/any_master":[{"name":null,"type":"/film/film"}],"sort":"‐year"}],"sort":"name.value"}]
Newthings!
• "value|=":["AcademyAwardforBestDirector","AcademyAwardforBestActor","AcademyAwardforBestPicture","AcademyAwardforBestActress","AcademyAwardforWriEngOriginalScreenplay"],
• “value”canbeanyofthesepossiblestrings.
Morenewthings!
• "awardee:/type/reflect/any_master":[{"name":null,"type":"/award/award_winner","opEonal":"opEonal"}],
• YoucanreflectonspecificproperEes!• “opEonal”meansthatit’scoolifitdoesn’treturnanythingforthisselect
Lastofthenewthings!
• "sort":"‐year"}],"sort":"name.value“
• SorEngwithinsubqueries,andthensorEngwithinthemainquery
• SortproperEescanbefurtheraddressed,basedonwhatisreturned.
AllGussiedup<html>
<head><linkrel="stylesheet"type="text/css"href="css"/><scripttype="text/javascript"src="hKp://jqueryjs.googlecode.com/files/jquery‐1.2.6.min.js"></script><scripttype="text/javascript">$(document).ready(funcEon(){//hidethealloftheelementwithclassmsg_body$(".scroller").hide();//togglethecomponenetwithclassmsg_body$("h3").click(funcEon(){$(this).next(".scroller").slideToggle(200);});});</script></head><body><acre:script>varquery=acre.require("query4").query;varawards=acre.freebase.MqlRead(query).result;</acre:script><divacre:for="categoryinawards"><h3>$category.name.value:</h3><divclass="scroller"><ul><liacre:for="winnerincategory.winners"><b>$winner.year</b>‐<spanacre:for="Etleinwinner['Etle:/type/reflect/any_master']"><ahref="hKps://catalog.library.jhu.edu/ipac20/ipac.jsp?menu=search&npp=30&ipp=20&spp=20&aspect=power&profile=general&ri=&limitbox_=&index=.VT&term=${escape(Etle.name)}">${Etle.name}</a></span><divclass="awardee"acre:for="awardeeinwinner['awardee:/type/reflect/any_master']">${awardee.name}</div></li><br/></ul></div></div></body></html>