2. The Problem:
From Tables to Graphs
or, an SQL Query walks into a bar...
Thursday, March 11, 2010
3. Dinner Party
• Friends
• Preferably Techies
• Networking
• Matchmaking (shhh)
• Vegetarian?
Thursday, March 11, 2010
4. Party.xls
Name Status Veg? Company
Bob Single TRUE Microsoft
Fred Relationship FALSE Yahoo
Mary Single FALSE Google
Sue Single TRUE Apple
Thursday, March 11, 2010
5. Party.xls
Name Status Veg? Comp1 Comp2
Bob Single TRUE Microsoft
Fred Relationship FALSE Yahoo
Mary Single FALSE Google Apple
Sue Single TRUE Apple
WRONG, but very common
Thursday, March 11, 2010
6. An SQLish Solution
Name Status Veg? ID Comp_ID Name
Bob S Y 1 1 Microsoft
Fred R N 2 2 Apple
Mary S N 3 3 Google
Sue S Y 4 4 Yahoo
Person Company
1 1
2 4
But now we’re getting complex.
3 3 I just wanted to plan a party.
4 2
3 2
Thursday, March 11, 2010
7. Today’s Semantic Web
<?xml version='1.0'?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ --><rdf:RDF
xml:lang="en"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:ya="http://blogs.yandex.ru/schema/foaf/"
xmlns:lj="http://www.livejournal.org/rss/lj/1.0/"
xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<foaf:Person>
<foaf:nick>barawulf</foaf:nick>
<foaf:name>Barak</foaf:name>
<lj:journaltitle>Barak's Livejournal</lj:journaltitle>
<lj:journalsubtitle>rantings of a geek leader</lj:journalsubtitle>
<foaf:openid rdf:resource="http://barawulf.livejournal.com/" />
<ya:country dc:title="US" rdf:resource="http://www.livejournal.com/directory.bml?opt_sort=ut&s_loc=1&loc_cn=US"/>
<ya:city dc:title="Berkeley" rdf:resource="http://www.livejournal.com/directory.bml?opt_sort=ut&s_loc=1&loc_cn=US&loc_st=&loc_ci=Berkeley"/>
<foaf:img rdf:resource="http://l-userpic.livejournal.com/52234957/2173900" />
<foaf:page>
<foaf:Document rdf:about="http://barawulf.livejournal.com/profile">
<dc:title>LiveJournal.com Profile</dc:title>
<dc:description>Full LiveJournal.com profile, including information such as interests and bio.</dc:description>
</foaf:Document>
</foaf:page>
<ya:blogActivity>
<ya:Posts>
<ya:feed rdf:resource="http://barawulf.livejournal.com/data/foaf" dc:type="application/rss+xml" />
<ya:posted>149</ya:posted>
</ya:Posts>
</ya:blogActivity>
...and we’ve just got started (316 lines)
Thursday, March 11, 2010
8. Let’s start over
• Goal: Represent Data
• HTML circa-1996 Simplicity
• Complete with “blink” tags
• Proposal: Use JSON!
Thursday, March 11, 2010
11. Personal Graph
or, What does it take?
Thursday, March 11, 2010
12. What Do I Want?
• Easy Relationships
• Easy to Edit
• Easy to Query (MQL)
• “Personal Freebase”
• Don’t want the complexity of RDF
Thursday, March 11, 2010
13. The Conflict
• Freebase is cool and powerful
• Never, ever want to load this data
• Graph databases are hard to set up
Thursday, March 11, 2010
14. Enter JGD
• JGD == JSON Graph Data
• Tool for manipulating a personal
graph based on JSON files
• A mini, personal, MQL and Graph
implementation
Thursday, March 11, 2010
24. Full Circle
Name Status Veg? ID Comp_ID Name
Bob S Y :bob fb:/en/microsoft Microsoft
Fred R N :fred fb:/en/apple_inc Apple
Mary S N :mary fb:/en/google Google
fb:/wikipedia/en/
Sue S Y :sue Yahoo Yahoo
Person Company
:bob fb:/en/microsoft
:fred fb:/wikipedia/en/Yahoo
:mary fb:/en/google
:sue fb:/en/apple_inc
:mary fb:/en/apple_inc
Thursday, March 11, 2010
25. Full Circle
• MQL results are valid JGD!
• “Pull” in more data
Thursday, March 11, 2010
28. Where Do We Go From
Here?
• In-browser graphs
• Microdata, Faceted Browsing
• Simple MQL implementation
• SPARQL translator?, other adapters
• Sharing data (cat, push, pull)
• Queries are subgraphs
Thursday, March 11, 2010
29. Thank You
Join in! Fork jgd on github:
http://github.com/barakmich/jgd
Thursday, March 11, 2010