Fork of https://github.com/oxigraph/oxigraph.git for the purpose of NextGraph project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
oxigraph/python/pyoxigraph/sparql.py

83 lines
2.8 KiB

from typing import List
from .pyoxigraph import Variable as PyVariable
from .pyoxigraph import QuerySolutions as PyQuerySolutions
from .pyoxigraph import QuerySolution as PyQuerySolution
from .pyoxigraph import QueryTriples as PyQueryTriples
class Variable(PyVariable):
"""A SPARQL query variable.
:param value: the variable name as a string.
:raises ValueError: if the variable name is invalid according to the SPARQL grammar.
The :py:func:`str` function provides a serialization compatible with SPARQL:
>>> str(Variable('foo'))
'?foo'
"""
def __init__(self, value: str) -> None:
...
@property
def value(self) -> str:
"""the variable name.
>>> Variable("foo").value
'foo'
"""
return super().value
class QuerySolutions(PyQuerySolutions):
"""An iterator of :py:class:`QuerySolution` returned by a SPARQL ``SELECT`` query
>>> store = Store()
>>> store.add(Quad(NamedNode('http://example.com'), NamedNode('http://example.com/p'), Literal('1')))
>>> list(store.query('SELECT ?s WHERE { ?s ?p ?o }'))
[<QuerySolution s=<NamedNode value=http://example.com>>]
"""
@property
def variables(self) -> List[Variable]:
"""the ordered list of all variables that could appear in the query results
>>> store = Store()
>>> store.query('SELECT ?s WHERE { ?s ?p ?o }').variables
[<Variable value=s>]
"""
return super().variables
class QuerySolution(PyQuerySolution):
"""Tuple associating variables and terms that are the result of a SPARQL ``SELECT`` query.
It is the equivalent of a row in SQL.
It could be indexes by variable name (:py:class:`Variable` or :py:class:`str`) or position in the tuple (:py:class:`int`).
Unpacking also works.
>>> store = Store()
>>> store.add(Quad(NamedNode('http://example.com'), NamedNode('http://example.com/p'), Literal('1')))
>>> solution = next(store.query('SELECT ?s ?p ?o WHERE { ?s ?p ?o }'))
>>> solution[Variable('s')]
<NamedNode value=http://example.com>
>>> solution['s']
<NamedNode value=http://example.com>
>>> solution[0]
<NamedNode value=http://example.com>
>>> s, p, o = solution
>>> s
<NamedNode value=http://example.com>
"""
class QueryTriples(PyQueryTriples):
"""An iterator of :py:class:`Triple` returned by a SPARQL ``CONSTRUCT`` or ``DESCRIBE`` query
>>> store = Store()
>>> store.add(Quad(NamedNode('http://example.com'), NamedNode('http://example.com/p'), Literal('1')))
>>> list(store.query('CONSTRUCT WHERE { ?s ?p ?o }'))
[<Triple subject=<NamedNode value=http://example.com> predicate=<NamedNode value=http://example.com/p> object=<Literal value=1 datatype=<NamedNode value=http://www.w3.org/2001/XMLSchema#string>>>]
"""