What?
A simple guide usable by any Javascript developer seeking to
exploit SPARQL without hassles.
Why?
SPARQL is a powerful query language, results serialization
format, and an HTTP based data access protocol from
the W3C. It provides a mechanism for accessing and integrating data
across Deductive Database Systems (colloquially
referred to as triple or quad stores in Semantic Web and Linked Data circles) -- database systems
(or data spaces) that manage proposition oriented records in
3-tuple (triples) or 4-tuple (quads) form.
How?
SPARQL queries are actually HTTP payloads (typically). Thus,
using a RESTful client-server interaction pattern, you can dispatch
calls to a SPARQL compliant data server and receive a payload for
local processing.
Steps:
- Determine which SPARQL endpoint you want to access e.g.
DBpedia or a local Virtuoso instance (typically:
http://localhost:8890/sparql).
- If using Virtuoso, and you want to populate its quad store
using SPARQL, assign "SPARQL_SPONGE" privileges to user
"SPARQL" (this is basic control, more sophisticated WebID based
ACLs are available for controlling SPARQL access).
Script:
/*
Demonstrating use of a single query to populate a # Virtuoso Quad Store via Javascript.
*/
/*
HTTP URL is constructed accordingly with JSON query results format as the default via mime type.
*/
function sparqlQuery(query, baseURL, format) {
if(!format)
format="application/json";
var params={
"default-graph": "", "should-sponge": "soft", "query": query,
"debug": "on", "timeout": "", "format": format,
"save": "display", "fname": ""
};
var querypart="";
for(var k in params) {
querypart+=k+"="+encodeURIComponent(params[k])+"&";
}
var queryURL=baseURL + '?' + querypart;
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
}
else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET",queryURL,false);
xmlhttp.send();
return JSON.parse(xmlhttp.responseText);
}
/*
setting Data Source Name (DSN)
*/
var dsn="http://dbpedia.org/resource/DBpedia";
/*
Virtuoso pragma "DEFINE get:soft "replace" instructs Virtuoso SPARQL engine to perform an HTTP GET using the IRI in FROM clause as Data Source URL with regards to
DBMS record inserts
*/
var query="DEFINE get:soft \"replace\"\nSELECT DISTINCT * FROM <"+dsn+"> WHERE {?s ?p ?o}";
var data=sparqlQuery(query, "/sparql/");
Output
Place the snippet above into the <script/> section of an
HTML document to see the query result.
Conclusion
JSON was chosen over XML (re. output format) since this is about
a "no-brainer installation and utilization" guide for a Javascript
developer that already knows how to use Javascript for HTTP based
data access within HTML. SPARQL just provides an added bonus to URL
dexterity (delivered via URI abstraction) with regards to
constructing Data Source Names or Addresses.
Related