Skip to content

sparqlstore_example

Simple examples showing how to use the SPARQLStore

Attributes:

HOST module-attribute

HOST = 'http://localhost:3030'

count module-attribute

count = 0

dbo module-attribute

dbo = Namespace('http://dbpedia.org/ontology/')

dbr module-attribute

dbr = Namespace('http://dbpedia.org/resource/')

graph module-attribute

graph = Graph(store=update_store, identifier='http://dbpedia.org')

pop module-attribute

pop = value(URIRef('http://dbpedia.org/resource/Berlin'), populationTotal)

sparql_store module-attribute

sparql_store = SPARQLStore(query_endpoint='http://fake-sparql-endpoint.com/repository/x', auth=('my_username', 'my_password'))

st module-attribute

st = SPARQLStore(query_endpoint='http://localhost:3030/db/sparql')

update_store module-attribute

update_store = SPARQLUpdateStore(query_endpoint='http://localhost:3030/db/sparql', update_endpoint='http://localhost:3030/db/update')

false show_docstring_attributes: false show_docstring_functions: false show_docstring_modules: false show_docstring_classes: false show_signature: false show_signature_annotations: false show_signature_type_parameters: false show_docstring_other_parameters: false show_docstring_parameters: false show_docstring_raises: false show_docstring_receives: false show_docstring_returns: false summary: false show_if_no_docstring: false

import sys
from urllib.request import urlopen

from rdflib import Graph, Namespace, URIRef
from rdflib.namespace import RDF, SKOS
from rdflib.plugins.stores.sparqlstore import SPARQLStore, SPARQLUpdateStore
from rdflib.term import Identifier, Literal

# Shows examples of the useage of SPARQLStore and SPARQLUpdateStore against local SPARQL1.1 endpoint if
# available. This assumes SPARQL1.1 query/update endpoints running locally at
# http://localhost:3030/db/
#
# It uses the same endpoint as the test_dataset.py!
#
# For the tests here to run, you can for example start fuseki with:
# ./fuseki-server --mem --update /db

# THIS WILL ADD DATA TO THE /db dataset


HOST = "http://localhost:3030"

if __name__ == "__main__":
    try:
        assert len(urlopen(HOST).read()) > 0
    except Exception:
        print(f"{HOST} is unavailable.")
        sys.exit(126)

    dbo = Namespace("http://dbpedia.org/ontology/")
    dbr = Namespace("http://dbpedia.org/resource/")

    # EXAMPLE Update Store:
    update_store = SPARQLUpdateStore(
        query_endpoint="http://localhost:3030/db/sparql",
        update_endpoint="http://localhost:3030/db/update",
    )
    graph = Graph(store=update_store, identifier="http://dbpedia.org")
    graph.add((dbr.Berlin, dbo.populationTotal, Literal(3)))
    graph.add((dbr.Brisbane, dbo.populationTotal, Literal(2)))
    graph.add((dbr["Category:Capitals_in_Europe"], RDF.type, SKOS.Concept))
    graph.add((dbr["Category:Holy_Grail"], RDF.type, SKOS.Concept))
    graph.add((dbr["Category:Hospital_ships_of_Japan"], RDF.type, SKOS.Concept))

    # EXAMPLE Store 1: using a Graph with the Store type string set to "SPARQLStore"
    graph = Graph("SPARQLStore", identifier="http://dbpedia.org")
    graph.open("http://localhost:3030/db/sparql")

    pop = graph.value(URIRef("http://dbpedia.org/resource/Berlin"), dbo.populationTotal)
    assert isinstance(pop, Identifier)

    print(
        "According to DBPedia, Berlin has a population of {0:,}".format(
            int(pop)
        ).replace(",", ".")
    )
    print()

    # EXAMPLE Query 2: using a SPARQLStore object directly
    st = SPARQLStore(query_endpoint="http://localhost:3030/db/sparql")

    for p in st.objects(
        URIRef("http://dbpedia.org/resource/Brisbane"), dbo.populationTotal
    ):
        assert isinstance(p, Identifier)
        print("According to DBPedia, Brisbane has a population of {0}".format(int(p)))
    print()

    # EXAMPLE Query 3: doing RDFlib triple navigation using SPARQLStore as a Graph()
    print("Triple navigation using SPARQLStore as a Graph():")
    graph = Graph("SPARQLStore", identifier="http://dbpedia.org")
    graph.open("http://localhost:3030/db/sparql")
    # we are asking DBPedia for 3 skos:Concept instances
    count = 0

    for s in graph.subjects(predicate=RDF.type, object=SKOS.Concept):
        count += 1
        print(f"\t- {s}")
        if count >= 3:
            break

    # EXAMPLE Query 4: doing RDFlib triple navigation using a Graph() with a SPARQLStore backend
    print("Triple navigation using a Graph() with a SPARQLStore backend:")
    st = SPARQLStore(query_endpoint="http://localhost:3030/db/sparql")
    graph = Graph(store=st)
    # we are asking DBPedia for 3 skos:Concept instances
    count = 0

    for s in graph.subjects(predicate=RDF.type, object=SKOS.Concept):
        count += 1
        print(f"\t- {s}")
        if count >= 3:
            break

    # EXAMPLE Store 5: using a SPARQL endpoint that requires Basic HTTP authentication
    # NOTE: this example won't run since the endpoint isn't live (or real)
    sparql_store = SPARQLStore(
        query_endpoint="http://fake-sparql-endpoint.com/repository/x",
        auth=("my_username", "my_password"),
    )
    # do normal Graph things