1 from logic import KB
2 from SPARQLWrapper import SPARQLWrapper, JSON, XML
3 from exceptions import NotImplementedError
4
6 '''SPARQL endpoint knowledge base'''
7 - def __init__( self, sentence=None, endpoint=None ):
8 '''Constructor method
9 Usage:
10 sentence - RDF triple to be added to KB (not implemented; default:None)
11 endpoint - URL of endpoint to query'''
12 self.sparql = SPARQLWrapper( endpoint )
13 if sentence:
14 self.tell( sentence )
15
16 - def tell( self, sentence ):
17 '''Adding triples to RDF store - not implemented'''
18 raise NotImplementedError, 'Adding sentences to RDF knowledge bases is not implemented'
19
20 - def ask( self, query ):
21 '''Queries the endpoint'''
22 self.sparql.setQuery( query )
23 self.sparql.setReturnFormat( XML )
24 res = self.sparql.query().convert().getElementsByTagName( 'result' )
25 res = [ dict( [ ( bin.attributes[ 'name' ].nodeValue, bin.firstChild.firstChild.nodeValue ) for bin in node.getElementsByTagName( 'binding' ) ] ) for node in res ]
26 return res
27
28
30 '''Removing triples from RDF store - not implemented'''
31 raise NotImplementedError, 'Removing sentences to RDF knowledge bases is not implemented'
32
33
34 if __name__ == '__main__':
35 s = SPARQLKB( endpoint='http://lod.openlinksw.com/sparql' )
36 for result in s.ask( '''
37 PREFIX gr:<http://purl.org/goodrelations/v1#>
38 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
39
40 SELECT ?l ?p ?c ?s
41 WHERE {
42 ?s a gr:Offering.
43 ?s rdfs:label ?l.
44 ?s gr:hasPriceSpecification ?ps.
45 ?ps gr:hasCurrencyValue ?p.
46 ?ps gr:hasCurrency ?c
47 FILTER( regex( ?l, "yoghurt", "i" ) )
48 } ORDER BY ?p LIMIT 500 ''' ):
49 print result[ 'l' ], result[ 'p' ], result[ 'c' ]
50
51 s = SPARQLKB( endpoint='http://dbpedia.org/sparql' )
52 for result in s.ask( '''
53 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
54 SELECT ?label
55 WHERE {
56 <http://dbpedia.org/resource/Croatia>
57 rdfs:label
58 ?label
59 }''' ):
60 print result[ 'label' ]
61