mirror of
https://github.com/gsi-upm/sitc
synced 2025-12-15 09:38:16 +00:00
Add Beatles introduction
This commit is contained in:
@@ -1,12 +1,22 @@
|
||||
'''
|
||||
Helper functions and ipython magic for the SPARQL exercises.
|
||||
|
||||
The tests in the notebooks rely on the `LAST_QUERY` variable, which is updated by the `%%sparql` magic after every query.
|
||||
This variable contains the full query used (`LAST_QUERY["query"]`), the endpoint it was sent to (`LAST_QUERY["endpoint"]`), and a dictionary with the response of the endpoint (`LAST_QUERY["results"]`).
|
||||
For convenience, the results are also given as tuples (`LAST_QUERY["tuples"]`), and as a dictionary of of `{column:[values]}` (`LAST_QUERY["columns"]`).
|
||||
'''
|
||||
from IPython.core.magic import (register_line_magic, register_cell_magic,
|
||||
register_line_cell_magic)
|
||||
|
||||
from IPython.display import HTML, display, Image
|
||||
from IPython.display import HTML, display, Image, display_javascript
|
||||
from urllib.request import Request, urlopen
|
||||
from urllib.parse import quote_plus, urlencode
|
||||
from urllib.error import HTTPError
|
||||
|
||||
import json
|
||||
import sys
|
||||
|
||||
js = "IPython.CodeCell.options_default.highlight_modes['magic_sparql'] = {'reg':[/^%%sparql/]};"
|
||||
display_javascript(js, raw=True)
|
||||
|
||||
|
||||
def send_query(query, endpoint):
|
||||
@@ -20,7 +30,11 @@ def send_query(query, endpoint):
|
||||
headers={'content-type': 'application/x-www-form-urlencoded',
|
||||
'accept': FORMATS},
|
||||
method='POST')
|
||||
return json.loads(urlopen(r).read().decode('utf-8'));
|
||||
res = urlopen(r)
|
||||
data = res.read().decode('utf-8')
|
||||
if res.getcode() == 200:
|
||||
return json.loads(data)
|
||||
raise Exception('Error getting results: {}'.format(data))
|
||||
|
||||
|
||||
def tabulate(tuples, header=None):
|
||||
@@ -39,11 +53,14 @@ def tabulate(tuples, header=None):
|
||||
|
||||
LAST_QUERY = {}
|
||||
|
||||
def solution():
|
||||
return LAST_QUERY
|
||||
|
||||
|
||||
def query(query, endpoint=None, print_table=False):
|
||||
global LAST_QUERY
|
||||
|
||||
endpoint = endpoint or "http://dbpedia.org/sparql"
|
||||
endpoint = endpoint or "http://fuseki.cluster.gsi.dit.upm.es/sitc/"
|
||||
results = send_query(query, endpoint)
|
||||
tuples = to_table(results)
|
||||
|
||||
@@ -80,12 +97,30 @@ def to_table(results):
|
||||
|
||||
@register_cell_magic
|
||||
def sparql(line, cell):
|
||||
'''
|
||||
Sparql magic command for ipython. It can be used in a cell like this:
|
||||
|
||||
```
|
||||
%%sparql
|
||||
|
||||
... Your SPARQL query ...
|
||||
|
||||
```
|
||||
|
||||
by default, it will use the DBpedia endpoint, but you can use a different endpoint like this:
|
||||
|
||||
```
|
||||
%%sparql http://my-sparql-endpoint...
|
||||
|
||||
... Your SPARQL query ...
|
||||
```
|
||||
'''
|
||||
try:
|
||||
return query(cell, endpoint=line, print_table=True)
|
||||
except HTTPError as ex:
|
||||
error_message = ex.read().decode('utf-8')
|
||||
print('Error {}. Reason: {}'.format(ex.status, ex.reason))
|
||||
print(error_message)
|
||||
print(error_message, file=sys.stderr)
|
||||
|
||||
|
||||
def show_photos(values):
|
||||
|
||||
Reference in New Issue
Block a user