Package spade :: Module SPARQLKB
[hide private]
[frames] | no frames]

Source Code for Module spade.SPARQLKB

 1  from logic import KB 
 2  from SPARQLWrapper import SPARQLWrapper, JSON, XML 
 3  from exceptions import NotImplementedError 
 4   
5 -class SPARQLKB( KB ):
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
29 - def retract( self, sentence ):
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