Example of finding relationships between band genres using SPARQL queries over DBPedia Linked Data
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Import the necessary packages | |
from SPARQLWrapper import SPARQLWrapper, JSON | |
# Add some helper functions | |
# A function that will return the results of running a SPARQL query with | |
# a defined set of prefixes over a specified endpoint. | |
# It follows the same five-step process apart from creating the query, which | |
# is provided as an argument to the function. | |
def runQuery(endpoint, prefix, q): | |
''' Run a SPARQL query with a declared prefix over a specified endpoint ''' | |
sparql = SPARQLWrapper(endpoint) | |
sparql.setQuery(prefix+q) # concatenate the strings representing the prefixes and the query | |
sparql.setReturnFormat(JSON) | |
return sparql.query().convert() | |
# Import pandas to provide facilities for creating a DataFrame to hold results | |
import pandas as pd | |
# Function to convert query results into a DataFrame | |
# The results are assumed to be in JSON format and therefore the Python dictionary will have | |
# the results indexed by 'results' and then 'bindings'. | |
def dict2df(results): | |
''' A function to flatten the SPARQL query results and return the column values ''' | |
data = [] | |
for result in results["results"]["bindings"]: | |
tmp = {} | |
for el in result: | |
tmp[el] = result[el]['value'] | |
data.append(tmp) | |
df = pd.DataFrame(data) | |
return df | |
# Function to run a query and return results in a DataFrame | |
def dfResults(endpoint, prefix, q): | |
''' Generate a data frame containing the results of running | |
a SPARQL query with a declared prefix over a specified endpoint ''' | |
return dict2df(runQuery(endpoint, prefix, q)) | |
# Print a limited number of results of a query | |
def printQuery(results, limit=''): | |
''' Print the results from the SPARQL query ''' | |
resdata = results["results"]["bindings"] | |
if limit != '': | |
resdata = results["results"]["bindings"][:limit] | |
for result in resdata: | |
for ans in result: | |
print('{0}: {1}'.format(ans, result[ans]['value'])) | |
print() | |
# Run a query and print out a limited number of results | |
def printRunQuery(endpoint, prefix, q, limit=''): | |
''' Print the results from the SPARQL query ''' | |
results = runQuery(endpoint, prefix, q) | |
printQuery(results, limit) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment