Skip to main content

plastron-rdf

RDF-to-Python mapping framework

How it works

An RDF resource class encapsulates a subject URI, an RDF graph, a set of inserts and deletes made to that graph, and a mapping from particular RDF predicates to Python attributes, for easy access and manipulation of the RDF graph.

The mapping is created by declaring class attributes on the RDF resource class using one of two descriptor classes: DataProperty or ObjectProperty. Use a DataProperty when all the values of its predicate will be RDF literals. Use an ObjectProperty when the values will be URIs.

Each descriptor takes one required argument, and several optional ones. The required argument predicate is the URI of the RDF predicate for this mapping. The optional arguments are:

  • required: boolean, defaults to False
  • repeatable: boolean, defaults to False. If it is False, generally it means that a resource is not valid if it has more than a single triple using the same predicate. The exception to this is for DataProperty attributes. A resource may have multiple triples using the same predicate and still be considered valid as long as each Literal value has a different language code.
  • validate: callable returning a boolean, used for additional custom validation beyond the required and repeatable built-ins.

For DataProperty attributes, you can also specify:

  • datatype: URI of the data type of this field. This has two functions:

    1. Used in conjunction with the predicate URI to select the triples to return the values of for this attribute. This allows you to reuse the same predicate URI for different attributes. Note that a DataProperty with datatype=None (the default) will only return values without a datatype. Note that because of the way RDF literals are defined, an attribute cannot have a non-None datatype and a language code.

    2. When adding values to this attribute, if they have no datatype, this datatype is added to them before they are added to the resource's graph.

from rdflib import URIRef

from plastron.rdfmapping.descriptors import DataProperty
from plastron.rdfmapping.resources import RDFResourceBase

# an RDF resource class inherits from the RDFResourceBase abstract class,
# or another subclass thereof
class Book(RDFResourceBase):
    title = DataProperty(
        predicate=URIRef('http://purl.org/dc/terms/title'),
        required=True,
    )
    author = DataProperty(
        predicate=URIRef('http://purl.org/dc/elements/1.1/creator'),
        required=True,
        repeatable=True,
    )
    publication_date = DataProperty(
        predicate=URIRef('http://purl.org/dc/terms/published'),
        datatype=URIRef('http://id.loc.gov/datatypes/edtf/EDTF'),
    )

When one of these attributes is accessed from an instance, it returns either an RDFDataProperty or an RDFObjectProperty object.

>>> book = Book()
>>> book.title
<plastron.rdfmapping.descriptors.RDFDataProperty object at ...>

Using that object, you can manipulate and query its values:

>>> book.title = 'Good Omens'  # set the title
>>> str(book.title)            # get it back as a string
'Good Omens'
>>> len(book.title)            # get the number of values for this attribute
1
>>> book.title.add(            # add a second value
...     Literal('The Nice and Accurate Prophecies of Agnes Nutter')
... )
>>> len(book.title)            # see the length change
2
>>> book.title.remove(         # remove the second value
...     Literal('The Nice and Accurate Prophecies of Agnes Nutter')
... )
>>> len(book.title)            # and the length changes back again
1
>>> book.title.clear()         # clear all the values
>>> len(book.title)
0
>>> book.title = 'Good Omens'  # back where we started

You can check the validity of the resource as a whole, or of each of its individual properties. Checking the resource as a whole returns a ValidationResultsDict object of attribute names mapped to ValidationResult objects, while checking each property returns a ValidationResult, either ValidationSuccess (which evaluates to True in a boolean context) or ValidationFailure (which evaluates to False).

>>> book.is_valid       # this is False, because we have not added any authors
False
>>> book.label.is_valid
<plastron.rdfmapping.properties.ValidationSuccess object at ...>
>>> book.author.is_valid
<plastron.rdfmapping.properties.ValidationFailure object at ...>
>>> bool(book.author.is_valid)  # bool-ifies to False
False
>>> str(book.author.is_valid)   # stringifies to a validation message
'is required'

The ValidationResultsDict is a subclass of a regular dictionary, with added methods to get the items that are successes and the items that are failures.

>>> results = book.validate()
>>> results.keys()
dict_keys(['title', 'author', 'date'])
>>> results.values()
dict_values([<plastron.rdfmapping.properties.ValidationSuccess object at ...>,
 <plastron.rdfmapping.properties.ValidationFailure object at ...>,
 <plastron.rdfmapping.properties.ValidationSuccess object at ...>])
>>> {name: str(result) for name, result in results if isinstance(result, ValidationFailure)}
{'author': 'is required'}
>>> [name for name, result in results if isinstance(result, ValidationSuccess)]
['title', 'date']

Metadata

Release files for plastron-rdf 4.8.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for plastron-rdf 4.8.2
File Size Uploaded Provenance Actions
plastron_rdf-4.8.2.tar.gz 14.3 kB Without provenance Details for plastron_rdf-4.8.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for plastron-rdf 4.8.2
File Interpreter ABI Platform Actions
plastron_rdf-4.8.2-py3-none-any.whl Python 3 none any Details for plastron_rdf-4.8.2-py3-none-any.whl

Total release size: 27.1 kB

Release files / plastron_rdf-4.8.2.tar.gz

Download URL plastron_rdf-4.8.2.tar.gz
Size 14.3 kB
Tags Source
SHA-256 checksum
How to use checksums
cc51aca026e63388672c275e49897bb868402b26e8140e894cb13a06a136dd07
BLAKE2b-256 checksum
How to use checksums
c92f9564fd82f907a1ac8c29389e70a0192800ead5f1c8a1ae12a06803c018e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.10

Release files / plastron_rdf-4.8.2-py3-none-any.whl

Download URL plastron_rdf-4.8.2-py3-none-any.whl
Size 12.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
42f318a6a1417711481b85c12df15f99b3a0a57d6abea7fdc0e9454324de95d5
BLAKE2b-256 checksum
How to use checksums
d13570a7b19a918e87f9b6d4dfa7934c9314c225c8fd1929c725a3879b331f89
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.10

Security for plastron-rdf 4.8.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page