RDFLib is a pure Python package for working with RDF. RDFLib contains most things you need to work with RDF, including:
The RDFlib community maintains many RDF-related Python code repositories with different purposes. For example:
Please see the list for all packages/repositories here:
5.x.ysupports Python 2.7 and 3.4+ and is mostly backwards compatible with 4.2.2. Only bug fixes will be applied.
6.x.yis the next major release which will support Python 3.6+. (Current master branch)
RDFLib may be installed with Python's package management tool pip:
$ pip install rdflib
Alternatively manually download the package from the Python Package Index (PyPI) at https://pypi.python.org/pypi/rdflib
The current version of RDFLib is 5.0.0, see the
file for what's new in this release.
RDFLib aims to be a pythonic RDF API. RDFLib's main data object is a
Graph which is a Python collection
of RDF Subject, Predicate, Object Triples:
To create graph and load it with RDF data from DBPedia then print the results:
import rdflib g = rdflib.Graph() g.load('http://dbpedia.org/resource/Semantic_Web') for s, p, o in g: print(s, p, o)
The components of the triples are URIs (resources) or Literals (values).
URIs are grouped together by namespace, common namespaces are included in RDFLib:
from rdflib.namespace import DC, DCTERMS, DOAP, FOAF, SKOS, OWL, RDF, RDFS, VOID, XMLNS, XSD
You can use them like this:
semweb = rdflib.URIRef('http://dbpedia.org/resource/Semantic_Web') type = g.value(semweb, rdflib.RDFS.label)
rdflib.RDFS is the RDFS Namespace,
graph.value returns an
object of the triple-pattern given (or an arbitrary one if more
Or like this, adding a triple to a graph
g.add(( rdflib.URIRef("http://example.com/person/nick"), FOAF.givenName, rdflib.Literal("Nick", datatype=XSD.string) ))
The triple (in n-triples notation)
<http://example.com/person/nick> <http://xmlns.com/foaf/0.1/givenName> "Nick"^^<http://www.w3.org/2001/XMLSchema#string> .
is created where the property
FOAF.giveName is the URI
XSD.string is the
You can bind namespaces to prefixes to shorten the URIs for RDF/XML, Turtle, N3, TriG, TriX & JSON-LD serializations:
g.bind("foaf", FOAF) g.bind("xsd", XSD)
This will allow the n-triples triple above to be serialised like this:
With these results:
PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> <http://example.com/person/nick> foaf:givenName "Nick"^^xsd:string .
New Namespaces can also be defined:
dbpedia = rdflib.Namespace('http://dbpedia.org/ontology/') abstracts = list(x for x in g.objects(semweb, dbpedia['abstract']) if x.language=='en')
See also ./examples
The library contains parsers and serializers for RDF/XML, N3, NTriples, N-Quads, Turtle, TriX, RDFa and Microdata. JSON-LD parsing/serializing can be achieved using the JSON-LD plugin.
The library presents a Graph interface which can be backed by any one of a number of Store implementations.
This core RDFLib package includes store implementations for in-memory storage and persistent storage on top of the Berkeley DB.
A SPARQL 1.1 implementation is included - supporting SPARQL 1.1 Queries and Update statements.
Multiple other projects are contained within the RDFlib "family", see https://github.com/RDFLib/.
See https://rdflib.readthedocs.io for our documentation built from the code.
For general "how do I..." queries, please use https://stackoverflow.com and tag your question with
See https://rdflib.dev for the release schedule.
RDFLib survives and grows via user contributions! Please read our contributing guide to get started. Please consider lodging Pull Requests here:
You can also raise issues here:
If you want to contact the rdflib maintainers, please do so via the rdflib-dev mailing list: