Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/creactistore/_templates/lib/semanticxo/sparql.py
diff options
context:
space:
mode:
Diffstat (limited to 'creactistore/_templates/lib/semanticxo/sparql.py')
-rw-r--r--creactistore/_templates/lib/semanticxo/sparql.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/creactistore/_templates/lib/semanticxo/sparql.py b/creactistore/_templates/lib/semanticxo/sparql.py
new file mode 100644
index 0000000..fe873e9
--- /dev/null
+++ b/creactistore/_templates/lib/semanticxo/sparql.py
@@ -0,0 +1,42 @@
+'''
+Created on 25 Aug 2011
+
+@author: cgueret
+'''
+# python import
+import httplib, urllib, cjson
+
+# rdflib import
+from rdflib_ import URIRef, Literal
+
+
+class SPARQL(object):
+
+ def __init__(self, url):
+ self._url = url
+
+ def execute_select(self, query):
+ results = []
+ params = {'query': query, 'format' : 'json'}
+ headers = {'Content-Type': 'application/x-www-form-urlencoded'}
+ try:
+ # Open the connection
+ conn = httplib.HTTPConnection(self._url)
+ conn.request("POST", "/sparql", urllib.urlencode(params), headers=headers)
+ # Get the results
+ response = conn.getresponse()
+ r = cjson.decode(response.read(), all_unicode=False)
+ # Recode them
+ for entry in r['results']['bindings']:
+ result = {}
+ for (name,data) in entry.iteritems():
+ value = Literal(data['value'])
+ if data['type']=='uri':
+ value = URIRef(data['value'])
+ result[name] = value
+ results.append(result)
+ conn.close()
+ except:
+ pass
+ # returns select results or empty list
+ return results