creating apis over rdf
TRANSCRIPT
- 1. Leigh Dodds @ldodds http://kasabi.com Creating APIs over RDF Data Sources 8 thJune 2011. SemTech 2011
- 2. The Trouble with SPARQL
- 3. Try our SPARQL Endpoint! Run Query
- 4. http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=SELECT+%3Fresult+FROM+%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2FBMW_Z8%3E+WHERE+{+%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2FBMW_Z8%3E+dbpprop%3Aname+%3Fresult+.+FILTER+%28LANG%28%3Fresult%29+%3D+%27en%27%29+.}&debug=on&timeout=&format=text%2Fhtml&save=display&fname= Trial and error experiments aren't easy
- 5. APIs have Affordance They're like pulling a thread The URLs unravel into useful data
- 6. http://api.simplegeo.com/1.0/context/{lat},{lon}.json Trial and error experiments are easy
- 7. SPARQL is for Power Users
- 8. How can we give RDF datasets more affordance?
- 9. Linked Data? Typically not expressive enough to support all useful interactions Expensive to materialize all useful data partitions E.g. by date-time, location, top ranking, etc
- 10. Build Custom APIs? Write custom code against your graph store Can be expensive to build & maintain Undermines power of web of data
- 11. OData? Standard data API from Microsoft Very similar to RDF & Linked Data approach Can be implemented over SPARQL endpoint
- 12. SPARQL Stored Procedures & The Linked Data API
- 13. SPARQL Stored Procedures
- 14. Bind SPARQL query to a URL http://api.kasabi.com/api/find-recipe-ingredient?ingredient={x}
- 15. More than just a URL shortener 1. Identify query bound to URL 2. Inject parameters from URL & config 3. Apply paging/sorting options 4. Execute query 5. Optionally, apply post-processing transformations
- 16. Parameter Passing Optional and Required Parameters Mapping to a particular type of RDF Term, e.g. literal, URI May have a default value May have a default prefix, e.g. base URL
- 17. Post-Processing Named transformations that generate a specific mime-type Supports generating custom output formats Currently just XSLT. Could support JS
- 18. Stored Procedure Benefits Declarative approach Offers simpler interface to developers Retains RDF output, but supports custom formats
- 19. The Linked Data API
- 20. Linked Data API http://purl.org/linked-data/api/spec Jeni Tennison (TSO), Dave Reynolds (Epimorphics), Leigh Dodds
- 21. Linked Data API Map parameterised URLs to graph queries to extract data views
- 22. Linked Data API Optimize for common query patterns Prioritize simple RESTful interactions not complex queries Provide pathway to exploring RDF and SPARQL
- 23. Processing Model
- Select
- View
- Request
- Response
- Format
- SPARQL Endpoint
- SELECT ?itemWHERE { }
- Endpoint
- DESCRIBE
- 24. Selecting Resources URL mapped to query patterns by API configuration Query variables injected from URL path or query string Simple path expressions for traversing graph Support for sorting and paging
- 25. Viewing Resources Default view is Concise Bounded Description Can specify arbitrary collections of properties in config or URL
- 26. Output Formats Simple JSON and XML formats Standard RDF serializations Custom formats, including HTML, via XSLT
- 27. @prefix spec: . @prefix api: . @prefix rdf: . @prefix rdfs: . @prefix recipe: . spec:api a api:API ; api:defaultPageSize "10" ; api:endpoint spec:foods . spec:foods a api:ListEndpoint ; api:uriTemplate "/foods" ; api:selector [api:filter "type=Food" ]; api:defaultViewer api:describeViewer . rdf:type api:label "type" . recipe:Food api:label "Food" .
- 28. { "format": "linked-data-api", "version": "0.2" "result": { "items": [ { "label": "Balsamic Vinegar", "isPrimaryTopicOf": "http://www.foodista.com/food/23HWFLXY "type": "http://linkedrecipes.org/schema/Food", "_about": "http://data.kasabi.com/dataset/foodista/food/23HWFLXY", "description": "Balsamic Vinegar is..." }, ... ], "modified": "Monday, 06-Jun-11 19:15:43 UTC", "itemsPerPage": 10, "startIndex": 0, "type": "http://purl.org/linked-data/api/vocab#Page", "first": "/api/foodista-linked-data-api/foods.json?_page=1", "_about": "/api/foodista-linked-data-api/foods.json?_page=1", "next": "/api/foodista-linked-data-api/foods.json?_page=2", ... }
- 29. Open Source Implementations Puelia (PHP) http://code.google.com/p/puelia-php/ Elda (Java) http://code.google.com/p/elda/
- 30. Linked Data API Summary Declarative configuration-driven approach More sophisticated than SSPs Integrates well with Linked Data publishing Slightly higher learning curve
- 31. Summary
- 32. Adopt hybrid approach to encourage adoption Combine Linked Data with SPARQLpoweredAPIs Recognise need for bridging, adapting between tools/systems/communities
- 33. Support a view source approachEnable Crowd-Sourcing of APIs by sharing configuration & queries
- 34. Try It For Yourself! http://beta.kasabi.com Linked Data, RDF and API hosting Demo: 9.30 tomorrow