W3C logo
slanted W3C logo

SWObjects Project Review

RDF-to-RDF and RDF-to-relational query transformation in SWObjects.

Logistics:

When: 18 Feb 0900EST, 1400Z
Phone bridge: +1.617.761.6200 #4562
Irc: irc.w3.org:6665 #swobjects


Eric Prud'hommeaux, Sanitation Engineer. Last modified: $Date: 2010/02/18 13:36:23 $
Creative Commons License This work is licensed under a Creative Commons Attribution 3.0 License, with attribution to W3C.

Valid XHTML + RDFa

Motivations (chronologically)

Utility

General purpose SPARQL engine.

SPARQL --username eric --password ********
  -d http://www.w3.org/2000/09/dbwg/details?group=38539
  -d http://cgi.w3.org/member-bin/list_mgnt.pl?list=public-semweb-lifesci
  -e 'SELECT ?mem { { ?w <http://xmlns.com/foaf/0.1/mbox> ?mem }
              MINUS { ?l <http://cgi.w3.org/member-bin/list_mgnt_xml.pl#member> ?mem } }' 

Utility cont...

works as a general tool, like cwm.

default interaction is through trig

{ # default graph }
<namedGraph1 { ... }
<namedGraph2 { ... }

and a UTF-8 variant of result sets

?mem
<mailto:arabans@ccf.org>
<mailto:batchelorc@rsc.org>
<mailto:vijay.bulusu@pfizer.com>

Didactic utiliy

a couple cute tricks:

~/checkouts/swobjects/bin/SPARQL --help
Usage: SPARQL [opts] queryURI mapURI*                           
Usage: SPARQL [opts] -e query mapURI*                           

get started with: SPARQL --Help tutorial
...
SPARQL --Help tutorial
Tutorial
...
SPARQL -a -DG foo -G foo2 -e "SELECT ?g {GRAPH ?g {?s ?p <http://usefulinc.com/ns/doap#Project>}}"
+--------+
| ?g     |
|  <foo> |
| <foo2> |
+--------+

Code

binaries:

source:

Lessons Learned

Next Steps

Databases as RDF

trivial to dump RDB as RDF

test: is the graph query coherent (do generated node identifiers merge)?

ETL needs

Sociopathic RDF graph

?who mydb:fn ?name

Need interface graph

?who foaf:name ?name

What's up in RDB2RDF

The charter says to map RDBs to RDF/OWL.

RDB2RDF Standards Goal

clear algebra for:

example

Employees
idmanagersection
14sales
4NULLexec
Emp:id=1 emp:id 1 .             
Emp:id=1 emp:manager Emp:id=4 .	
Emp:id=1 emp:section "sales" .  
Emp:id=4 emp:id 4 .	        
                        	
Emp:id=4 emp:manager "exec" .   
	
Tasks
employeeleadname
14widgets
45widgets
_:t1 task.employee Emp:id=1 .
_:t1 task.lead Emp:id=2 .    
_:t1 task.name "widgets" .   
_:t2 task.employee Emp:id=4 .
_:t2 task.lead Emp:id=5 .    
_:t2 task.name "widgets".    
	
SELECT ?sec ?name
 WHERE { GRAPH<HQ>    { ?flunky emp:section ?sec OPTIONAL { ?flunky emp:manager ?boss } }
         GRAPH<Sales> { _:t task:employee ?flunky; task:lead ?boss; task:name ?task } }
      
SPARQL
flunkybosssectask
Emp:id=1Emp:id=4"sales""widgets"
Emp:id=4"exec""widgets"
SQL join
flunkybosssectask
14saleswidgets

Interface Graph

CONSTRUCT usefull elsewhere

Useful for:

Performance

HCLS Requirements

requirements feedback through:

tech space

systemexpressivity
Virtuosod2r/DDL
TriplifySQL->app?
D2Rd2r
MetatomixGUI
UltrawrapDDL
OracleDDL
SWObjectsCONSTRUCT
OKKAM???