The	  Seman)c	  Web	  RDF,	  SPARQL	  and	  so0ware	  APIs	  4IZ440	  Knowledge	  Representa4on	  and	  Reasoning	  on	  t...
Worth	  a	  note	  §  Open	  Data	  iniDave	  around	  world	  and	  Europe	  open	  staDsDcal	  and	      government	  d...
Outline	  §  RDF	  representaDon	  formats	  §  Data	  handling	  approaches	  §  So0ware	  APIs	  overview	  §  Appro...
RDF	  representaDon	  
Syntaxes	  §  RDF	  has	  several	  syntaxes.	  §  A	  “graph”	  is	  the	  reference	  syntax.	  §  The	  W3C	  endors...
RDF	  graph 	  	                              rdf:type	                            gd:Person	                             ...
RDF/XML	  <rdf:RDF	  	  	  xmlns:rdf=“http://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#”	  	  	  xmlns:gd=“http://rdf.data...
RDF/XML	  (shortened)	  <rdf:RDF	  	  	  xmlns:rdf=“http://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#”	  	  	  xmlns:gd=“h...
N3	  NotaDon	  @prefix	  gd:	  <http://rdf.data-­‐vocabulary.org/#>	  .	  	  []	  a	  gd:Person;	  	  	  gd:name	  “John	 ...
N–Triples	  _:a	  <http://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#type>	  	             	  <http://rdf.data-­‐vocabulary...
RDF/JSON	  {	  	  	  “_:a“	  :	  {	  	  	  	  	  “http://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#”	  :	  [	  	  	  	  	 ...
RDFa	  <html	  	  	  xmlns=“http://www.w3.org/1999/xhtml”	  	  	  xmlns:rdf=“http://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­...
Resources	  about	  RDF	  formats	  §  RDF/XML	      §  hLp://www.w3.org/TR/rdf-­‐syntax-­‐grammar/	  §  N3	  NotaDon	 ...
Task	  #1	  1.  Use	  Google	  Data	  Vocabulary	     §  hLp://www.data-­‐vocabulary.org/Person/	  2.  Created	  a	  Nota...
Data	  handling	  
RDF	  models	  §  Statement–centric	     §  Working	  with	  triples	  of	  ?subject	  ?predicate	  ?object	  §  Resour...
So0ware	  APIs	  
Java	  §  Jena	      §  hLp://openjena.org/	      §  hLp://sourceforge.net/projects/jena/	  §  Sesame	      §  hLp://...
PHP	  §  RDF	  API	  for	  PHP	      §  hLp://www4.wiwiss.fu-­‐berlin.de/bizer/rdfapi/	      §  hLp://sourceforge.net/p...
Ruby	  §  RDF.rb	      §  hLp://rdf.rubyforge.org/	      §  hLps://github.com/bendiken/rdf	      §  Plus	  various	  m...
Code	  Examples	  
File-­‐read	  §  Task:	  Read	  RDF	  data	  from	  a	  NotaDon3	  file	  format	  into	  memory	      model.	  
Read	  N3	  (Jena)	  InputStream	  is	  =	  	  	  	  FileManager.get().open("samples/people.n3");	  	  	  	  	  	  	  	  	...
Read	  N3	  (RDF.rb)	  repository	  =	  RDF::Repository.new	  	  RDF::N3::Reader.open(‘samples/people.n3’)	  {	  |reader|	...
Read	  N3	  (ARC2)	  $parser	  =	  ARC2::getRDFParser();	  $parser-­‐>parse(‘samples/people.n3);	       	  	  $triples	  =...
Read	  N3	  (RAP)	  $model	  =	  ModelFactory::getDefaultModel();	  $model-­‐>load(samples/people.n3);	  §  This	  code	 ...
Traverse	  triples	  §  Task:	  Take	  a	  memory	  model	  and	  list	  all	  or	  parDcular	  RDF	  triples.	  
Traverse	  triples	  (Jena)	  Model	  model	  =	  ModelFactory.createDefaultModel();	  //	  Load	  data	  into	  model	  	...
Query	  Model	  (Jena)	  Resource	  rPerson	  =	  model.getResource("http://rdf.data-­‐vocabulary.org/#Person");	  Propert...
Traverse	  triples	  (RDF.rb)	  repository	  =	  RDF::Repository.new	  #	  Load	  data	  	  repository.each_statement	  {	...
Query	  model	  (RDF.rb)	  GD	  =	  RDF::Vocabulary.new(http://rdf.data-­‐vocabulary.org/#)	  	  repository	  =	  RDF::Rep...
Query	  SPARQL	  Endpoint	  §  Task:	  Query	  a	  SPARQL	  endpoint	  and	  write	  out	  the	  data.	  E.g.	  from	    ...
Query	  SPARQL	  Endpoint	  (Jena)	  String	  qa	  =	  "PREFIX	  skos:	  <http://www.w3.org/2004/02/skos/core#>"	  	  	  	...
Query	  SPARQL	  Endpoint	  (RDF.rb)	  sparql	  =	  	  	  	  SPARQL::Client.new("http://dbpedia.org/sparql")	  	  result	 ...
Query	  SPARQL	  Endpoint	  (RAP)	  $client	  =	  	  	  	  ModelFactory::getSparqlClient("http://www.exampleSparqlService....
Query	  SPARQL	  Endpoint	  (ARC2)	  $store	  =	  	  	  	  ARC2::getRemoteStore(	  	  	  	  	  array(remote_store_endpoint...
Task	  #2	  1.  Select	  one	  of	  frameworks	  (preferably	  Jena)	  2.  Load	  data	  from	  your	  NotaDon3	  file	  3....
MoDvaDon	  Example	  
Knowledge	  Engineering	  Group	  Website	  §  hLp://keg.vse.cz/	  §  RDF	  outside	      §  Data	  dumps	  in	  RDF/XM...
SPARQL:	  Create	  data	  INSERT	  INTO	  <http://keg.vse.cz/>	  {	  	  	  <http://keg.vse.cz/resource/event/1>	  rdf:type...
SPARQL:	  Read	  data	  SELECT	  ?summary	  ?uid	  ?dtstart	  ?dtend	  WHERE	  {	  	  	  <http://keg.vse.cz/resource/event...
SPARQL:	  Update	  data	  DELETE	  {	  	  	  <http://keg.vse.cz/resource/event/1>	  ?p	  ?o	  .	  }	  	  INSERT	  INTO	  <...
References	  §  hLp://dsic.zapisky.info/RDF/FOAF/parsingWithPHP/	  §  hLp://zapisky.info/?item=zverejnime-­‐akademicke-­...
QuesDons?	  
Thank	  you	  
Upcoming SlideShare
Loading in …5
×

2011 4IZ440 Semantic Web – RDF, SPARQL, and software APIs

2,397 views
2,313 views

Published on

Published in: Technology, Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,397
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
31
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

2011 4IZ440 Semantic Web – RDF, SPARQL, and software APIs

  1. 1. The  Seman)c  Web  RDF,  SPARQL  and  so0ware  APIs  4IZ440  Knowledge  Representa4on  and  Reasoning  on  the  WWW  Josef  Petrák  |  me@jspetrak.name    
  2. 2. Worth  a  note  §  Open  Data  iniDave  around  world  and  Europe  open  staDsDcal  and   government  data,  usually  in  RDF  format.  §  It  has  several  success  stories   §  hLp://headtoweb.posterous.com/open-­‐data-­‐success-­‐stories  §  Google  is  integraDng  RDF  encoded  as  RDFa  in  pages  into  its  search   results.  §  UEP  is  not  behind  –  DIKE  research  group  KEG  started  Czech–Slovak   semanDc  iniDaDve  called  SemanDcs  §  And  we  have  a  RDF-­‐based  website  deployed,  see   hLp://keg.vse.cz/  
  3. 3. Outline  §  RDF  representaDon  formats  §  Data  handling  approaches  §  So0ware  APIs  overview  §  Approaches  in  examples  §  MoDvaDon  example:  web  applicaDon  
  4. 4. RDF  representaDon  
  5. 5. Syntaxes  §  RDF  has  several  syntaxes.  §  A  “graph”  is  the  reference  syntax.  §  The  W3C  endorsed  file  format  is  RDF/XML  §  Other  file  formats:   §  N-­‐Triples   §  N3   §  RDF/JSON   §  RDFa  
  6. 6. RDF  graph     rdf:type   gd:Person   gd:name   John  Example   gd:affiliaDon   Sample  Corp.  Inc.  PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX gd: <http://rdf.data-vocabulary.org/#>
  7. 7. RDF/XML  <rdf:RDF      xmlns:rdf=“http://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#”      xmlns:gd=“http://rdf.data-­‐vocabulary.org/#”>      <rdf:Resource>          <rdf:type  rdf:resource=“http://rdf.data-­‐vocabulary.org/#Person”/>          <gd:name>John  Example</gd:name>          <gd:affiliation>Sample  Corp.  Inc.</gd:affiliation>      </rdf:Resource>  </rdf:RDF>  
  8. 8. RDF/XML  (shortened)  <rdf:RDF      xmlns:rdf=“http://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#”      xmlns:gd=“http://rdf.data-­‐vocabulary.org/#”>      <gd:Person>          <gd:name>John  Example</gd:name>          <gd:affiliation>Sample  Corp.  Inc.</gd:affiliation>      </gd:Person>  </rdf:RDF>  
  9. 9. N3  NotaDon  @prefix  gd:  <http://rdf.data-­‐vocabulary.org/#>  .    []  a  gd:Person;      gd:name  “John  Example”;      gd:affiliation  “Sample  Corp.  Inc.”  .  
  10. 10. N–Triples  _:a  <http://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#type>      <http://rdf.data-­‐vocabulary.org/#Person>  .  _:a  <http://rdf.data-­‐vocabulary.org/#name>      “John  Example”  .  _:a  <http://rdf.data-­‐vocabulary.org/#affiliation>      “Sample  Corp.  Inc.”  .   §  Primarily  used  to  defined  RDF  test  cases  §  Subset  of  N3  NotaDon  
  11. 11. RDF/JSON  {      “_:a“  :  {          “http://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#”  :  [              {                  “value“  :  “http://rdf.data-­‐vocabulary.org/#Person”,  “type“  :  “uri“              }          ],          “http://rdf.data-­‐vocabulary.org/#name”  :  [              {                  “value“  :  “John  Example“,  “type“  :  “literal“              }          ],          “http://rdf.data-­‐vocabulary.org/#affiliation”  :  [              {                  “value“  :  “Sample  Corp.  Inc.“,  “type“  :  “literal“              }          ]      }  }  
  12. 12. RDFa  <html      xmlns=“http://www.w3.org/1999/xhtml”      xmlns:rdf=“http://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#”      xmlns:gd=“http://rdf.data-­‐vocabulary.org/#”>    <p  typeof=“gd:Person”>      <em  property=“gd:name”>John  Example</em>  is  working        at  <em  property=“gd:affiliation”>Sample  Corp.  Inc.</em>.  </p>    </html>  
  13. 13. Resources  about  RDF  formats  §  RDF/XML   §  hLp://www.w3.org/TR/rdf-­‐syntax-­‐grammar/  §  N3  NotaDon   §  hLp://www.w3.org/DesignIssues/NotaDon3   §  hLp://www.w3.org/2000/10/swap/Primer  §  N–Triples   §  hLp://www.w3.org/TR/rdf-­‐testcases/#ntriples  §  RDF/JSON   §  hLp://n2.talis.com/wiki/RDF_JSON_SpecificaDon  §  RDFa   §  hLp://www.w3.org/TR/rdfa-­‐syntax/  
  14. 14. Task  #1  1.  Use  Google  Data  Vocabulary   §  hLp://www.data-­‐vocabulary.org/Person/  2.  Created  a  NotaDon3  file  with  demo  data  about  people  
  15. 15. Data  handling  
  16. 16. RDF  models  §  Statement–centric   §  Working  with  triples  of  ?subject  ?predicate  ?object  §  Resource–centric   §  Working  with  resources  having  properDes  and  their  values  §  Ontology–centric   §  Working  with  classes,  properDes,  and  individuals  as  defined  in  selected   vocabulary/schema/ontology  §  Named  graph   §  Triples  belongs  to  a  graph  with  URI  name   §  Working  with  quads  of  ?graph  ?subject  ?predicate  ?object  
  17. 17. So0ware  APIs  
  18. 18. Java  §  Jena   §  hLp://openjena.org/   §  hLp://sourceforge.net/projects/jena/  §  Sesame   §  hLp://www.openrdf.org/  §  Shellac  RDFa  Parser   §  hLps://github.com/shellac/java-­‐rdfa  
  19. 19. PHP  §  RDF  API  for  PHP   §  hLp://www4.wiwiss.fu-­‐berlin.de/bizer/rdfapi/   §  hLp://sourceforge.net/projects/rdfapi-­‐php/  §  ARC2   §  hLp://arc.semsol.org/  
  20. 20. Ruby  §  RDF.rb   §  hLp://rdf.rubyforge.org/   §  hLps://github.com/bendiken/rdf   §  Plus  various  modules  
  21. 21. Code  Examples  
  22. 22. File-­‐read  §  Task:  Read  RDF  data  from  a  NotaDon3  file  format  into  memory   model.  
  23. 23. Read  N3  (Jena)  InputStream  is  =        FileManager.get().open("samples/people.n3");                    Model  model  =  ModelFactory.createDefaultModel();  RDFReader  r  =  model.getReader("N3");  r.read(model,  is,  null);  is.close();  
  24. 24. Read  N3  (RDF.rb)  repository  =  RDF::Repository.new    RDF::N3::Reader.open(‘samples/people.n3’)  {  |reader|      repository  <<    reader  }  
  25. 25. Read  N3  (ARC2)  $parser  =  ARC2::getRDFParser();  $parser-­‐>parse(‘samples/people.n3);      $triples  =  $parser-­‐>getTriples();  
  26. 26. Read  N3  (RAP)  $model  =  ModelFactory::getDefaultModel();  $model-­‐>load(samples/people.n3);  §  This  code  won’t  run,  because  there  is  N3Reader  bug.  §  Works  also  for  RDF/XML  and  N–Triples  formats.  
  27. 27. Traverse  triples  §  Task:  Take  a  memory  model  and  list  all  or  parDcular  RDF  triples.  
  28. 28. Traverse  triples  (Jena)  Model  model  =  ModelFactory.createDefaultModel();  //  Load  data  into  model                StmtIterator  i  =  model.listStatements();  while  (i.hasNext())  {      Statement  stmt  =  i.nextStatement();      Resource  subject  =  stmt.getSubject();      Property  predicate  =  stmt.getPredicate();      RDFNode  object  =  stmt.getObject();                                //  Printing  out  }  
  29. 29. Query  Model  (Jena)  Resource  rPerson  =  model.getResource("http://rdf.data-­‐vocabulary.org/#Person");  Property  rName  =  model.getProperty("http://rdf.data-­‐vocabulary.org/#name");    StmtIterator  si  =  model.listStatements(null,  RDF.type,  rPerson);  while  (si.hasNext())  {      Resource  r  =  si.nextStatement().getSubject();      StmtIterator  sii  =  model.listStatements(r,  rName,  (RDFNode)null);      if  (sii.hasNext())  {          System.out.println(sii.nextStatement().getObject().toString());      }  }  
  30. 30. Traverse  triples  (RDF.rb)  repository  =  RDF::Repository.new  #  Load  data    repository.each_statement  {  |statement|      puts  statement  }  
  31. 31. Query  model  (RDF.rb)  GD  =  RDF::Vocabulary.new(http://rdf.data-­‐vocabulary.org/#)    repository  =  RDF::Repository.new  #  Load  data    query  =  RDF::Query.new({      :person  =>  {          RDF.type  =>  GD.Person,  GD.name  =>  :name      }  })    query.execute(graph).each  do  |person|      puts  "name=#{person.name}"  end  
  32. 32. Query  SPARQL  Endpoint  §  Task:  Query  a  SPARQL  endpoint  and  write  out  the  data.  E.g.  from   DBPedia,  write  one  random  blackboard  gag  wriLen  by  Bart   Simpson.  
  33. 33. Query  SPARQL  Endpoint  (Jena)  String  qa  =  "PREFIX  skos:  <http://www.w3.org/2004/02/skos/core#>"                                  +  "PREFIX  dbpprop:  <http://dbpedia.org/property/>"                                  +  "PREFIX  dcterms:  <http://purl.org/dc/terms/>"                                  +  "PREFIX  rdfs:  <http://www.w3.org/2000/01/rdf-­‐schema#>"                                  +  "SELECT  ?gag  WHERE  {  "                                  +  "?series  skos:broader  <http://dbpedia.org/resource/Category:The_Simpsons_episodes>  ."                                  +  "    ?episode  dcterms:subject  ?series  ."                                  +  "    ?episode  dbpprop:blackboard  ?gag  ."                                  +  "}"                                  +  "LIMIT  1000";  Query  q  =  QueryFactory.create(qa);                  QueryExecution  qe  =        QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql",  q);  ResultSet  rs  =  qe.execSelect();  ResultSetFormatter.out(System.out,  rs,  q);  qe.close();  
  34. 34. Query  SPARQL  Endpoint  (RDF.rb)  sparql  =        SPARQL::Client.new("http://dbpedia.org/sparql")    result  =  sparql.query("SELECT  ?gag  WHERE  {        ?series  skos:broader  <http://dbpedia.org/resource/Category:The_Simpsons_episodes>  .      ?episode  dcterms:subject  ?series  .      ?episode  dbpprop:blackboard  ?gag  .  }  LIMIT  1000")    puts  result[rand(result.length)][:gag]  
  35. 35. Query  SPARQL  Endpoint  (RAP)  $client  =        ModelFactory::getSparqlClient("http://www.exampleSparqlService.net:2020/example");    $query  =  new  ClientQuery();  $query-­‐>query(‘PREFIX  skos:  <http://www.w3.org/2004/02/skos/core#>    PREFIX  dbpprop:  <http://dbpedia.org/property/>    PREFIX  dcterms:  <http://purl.org/dc/terms/>    PREFIX  rdfs:  <http://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  ?gag  WHERE  {        ?series  skos:broader  <http://dbpedia.org/resource/Category:The_Simpsons_episodes>  .        ?episode  dcterms:subject  ?series  .        ?episode  dbpprop:blackboard  ?gag  .    }  LIMIT  1000’);  $result  =  $client-­‐>query($query);    foreach($result  as  $line){  echo($line[?gag]-­‐>toString());  }  
  36. 36. Query  SPARQL  Endpoint  (ARC2)  $store  =        ARC2::getRemoteStore(          array(remote_store_endpoint  =>  http://dbpedia.org/sparql));    $q  =  ‘PREFIX  skos:  <http://www.w3.org/2004/02/skos/core#>    PREFIX  dbpprop:  <http://dbpedia.org/property/>    PREFIX  dcterms:  <http://purl.org/dc/terms/>    PREFIX  rdfs:  <http://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  ?gag  WHERE  {        ?series  skos:broader  <http://dbpedia.org/resource/Category:The_Simpsons_episodes>  .        ?episode  dcterms:subject  ?series  .        ?episode  dbpprop:blackboard  ?gag  .    }  LIMIT  1000’;    $rows  =  $store-­‐>query($q,  rows);    
  37. 37. Task  #2  1.  Select  one  of  frameworks  (preferably  Jena)  2.  Load  data  from  your  NotaDon3  file  3.  Write  out  names  and  work  Dtles  of  people  
  38. 38. MoDvaDon  Example  
  39. 39. Knowledge  Engineering  Group  Website  §  hLp://keg.vse.cz/  §  RDF  outside   §  Data  dumps  in  RDF/XML   §  Web  pages  enriched  with  RDFa  §  RDF  inside   §  Data  created  by  SPARQL  INSERT   §  Data  queried  by  SPARQL  SELECT   §  Data  updated  by  SPARQL  DELETE  and  SELECT   §  Data  manipulated  by  user–friendly  forms  §  Ongoing:  data  integraDon  with  ISIS  VŠE  and  other  department   applicaDons  
  40. 40. SPARQL:  Create  data  INSERT  INTO  <http://keg.vse.cz/>  {      <http://keg.vse.cz/resource/event/1>  rdf:type  ical:Vevent  .      <http://keg.vse.cz/resource/event/1>  ical:uid  ”1"  .      <http://keg.vse.cz/resource/event/1>  ical:summary  ”IZI440"  .      <http://keg.vse.cz/resource/event/1>  ical:dtstart  ”2011-­‐02-­‐28"  .  }  
  41. 41. SPARQL:  Read  data  SELECT  ?summary  ?uid  ?dtstart  ?dtend  WHERE  {      <http://keg.vse.cz/resource/event/1>  rdf:type  ical:Vevent  .      <http://keg.vse.cz/resource/event/1>  ical:uid  ?uid  .      <http://keg.vse.cz/resource/event/1>  ical:summary  ?summary  .      <http://keg.vse.cz/resource/event/1>  ical:dtstart  ?dtstart  .      OPTIONAL  {  <.$tUriRef.>  ical:dtend  ?dtend  .  }  }  
  42. 42. SPARQL:  Update  data  DELETE  {      <http://keg.vse.cz/resource/event/1>  ?p  ?o  .  }    INSERT  INTO  <http://keg.vse.cz/>  {      <http://keg.vse.cz/resource/event/1>  rdf:type  ical:Vevent  .      <http://keg.vse.cz/resource/event/1>  ical:uid  ”1"  .      <http://keg.vse.cz/resource/event/1>  ical:summary  ”4IZ440"  .      <http://keg.vse.cz/resource/event/1>  ical:dtstart  ”2011-­‐02-­‐28"  .  }  
  43. 43. References  §  hLp://dsic.zapisky.info/RDF/FOAF/parsingWithPHP/  §  hLp://zapisky.info/?item=zverejnime-­‐akademicke-­‐projekty-­‐ samozrejme-­‐semanDcky  §  BOOK  –  John  Hebeler  (Author),  MaLhew  Fisher  (Author),  Ryan   Blace  (Author),  Andrew  Perez-­‐Lopez  (Author),  Mike  Dean   (Foreword):  Seman4c  Web  Programming,  Wiley,  2009  
  44. 44. QuesDons?  
  45. 45. Thank  you  

×