% Demonstrate built-in SPARQL integration in Prova
:- eval(ex059()).
% The most straightforward way of runninq SPARQL queries that indicates the required data right inside the FROM clause
ex059() :-
QueryString = '
PREFIX foaf:
PREFIX rdf:
SELECT ?contributor ?url ?type
FROM
WHERE {
?contributor foaf:name "Bob DuCharme" .
?contributor foaf:weblog ?url .
?contributor rdf:type ?type .
}
',
sparql_select(QueryString,url(URL),type(Type)|X),
println([[url,URL],[type,Type]|X],",").
% Another way of runninq Sparql queries that uses an explicitely constructed Jena Model
ex059a() :-
Model = com.hp.hpl.jena.rdf.model.ModelFactory.createDefaultModel(),
urlstream("http://planetrdf.com/bloggers.rdf",In),
Model.read(In,""),
% Model.write(System.out),
QueryString = '
PREFIX foaf:
SELECT ?url
WHERE {
?contributor foaf:name "Bob DuCharme" .
?contributor foaf:weblog ?url .
}
',
sparql_select(Model,QueryString,url(URL)),
println([url,"=",URL]).
urlstream(Address,IS) :-
URL = java.net.URL(Address),
IS = URL.openStream().
% SPARQL query without rest variable
ex059b() :-
QueryString = '
PREFIX foaf:
PREFIX rdf:
SELECT ?contributor ?url ?type
FROM
WHERE {
?contributor foaf:name "Bob DuCharme" .
?contributor foaf:weblog ?url .
?contributor rdf:type ?type .
}
',
sparql_select(QueryString,url(URL),type(Type),contributor(Contributor)),
println([[url,URL],[type,Type],[contributor,Contributor]],",").
% call a SPARQL web end point / service.
% The restricted key word "SPARQLQUERY" in the URL is replaced by the
% query string.
% The SPARQL endpoint must return a result in SPARQL XML format
%
ex059c() :-
SparqlServiceURL = 'http://hcls.deri.ie/sparql/?query=SPARQLQUERY&format=application/sparql-results+xml',
QueryString = '
PREFIX owl:
PREFIX go:
PREFIX obo:
PREFIX rdfs:
select ?name ?class ?definition
from
where
{ graph
{?class rdfs:subClassOf go:GO_0008150}
?class rdfs:label ?name.
?class obo:hasDefinition ?def.
?def rdfs:label ?definition
filter(regex(?name,"[Dd]endrite"))
}
',
sparql_select(SparqlServiceURL,QueryString,name(Name),class(Class),definition(Def)),
println([[name,Name],[class,Class],[definition,Def]],",").
% call a SPARQL end point with the query encoded directly in the URL
% The SPARQL endpoint must return a result in SPARQL XML format
%
ex059d() :-
SparqlServiceURL = 'http://hcls.deri.ie/sparql/?query=PREFIX+owl%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2002%2F07%2Fowl%23%3E%0D%0APREFIX+go%3A+%3Chttp%3A%2F%2Fpurl.org%2Fobo%2Fowl%2FGO%23%3E%0D%0APREFIX+obo%3A+%3Chttp%3A%2F%2Fwww.geneontology.org%2Fformats%2FoboInOwl%23%3E%0D%0APREFIX+rdfs%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0D%0A%0D%0Aselect++%3Fname++%3Fclass+%3Fdefinition%0D%0Afrom+%3Chttp%3A%2F%2Fpurl.org%2Fcommons%2Fhcls%2F20070416%3E%0D%0Awhere%0D%0A%7B+++graph+%3Chttp%3A%2F%2Fpurl.org%2Fcommons%2Fhcls%2F20070416%2Fclassrelations%3E%0D%0A++++++++%7B%3Fclass+rdfs%3AsubClassOf+go%3AGO_0008150%7D%0D%0A%3Fclass+rdfs%3Alabel+%3Fname.%0D%0A%3Fclass+obo%3AhasDefinition+%3Fdef.%0D%0A%3Fdef+rdfs%3Alabel+%3Fdefinition+%0D%0Afilter%28regex%28%3Fname%2C%22%5BDd%5Dendrite%22%29%29%0D%0A%7D%0D%0A++++&format=application/sparql-results+xml',
sparql_select(SparqlServiceURL,name(Name),class(Class),definition(Def)),
println([[name,Name],[class,Class],[definition,Def]],",").