prez
prez copied to clipboard
Prez is a data-configurable Linked Data API framework that delivers profiles of Knowledge Graph data according to the Content Negotiation by Profile standard.
Prez
Prez is a data-configurable Linked Data API framework that delivers profiles of Knowledge Graph data according to the Content Negotiation by Profile standard.
Where's the UI?
Prez delivers data only - usually RDF but could be GeoJSON, XML etc. - and it delivers a special form of RDF which includes labels for all objects and predicates Prez can find in its database.
If you want a UI that can render Prez' labelled RDF as HTML and other fancy graphical widgets, see the Prez UI.
Contents
- Subsystems
- Installation
- Running
- Data Validation
- Contact
- Contributing
- License
Subsystems
Prez comes with several pre-configured subsystems:
- VocPrez - for vocabularies, based on the SKOS data model
- SpacePrez - for spatial data, based on OGC API specification and the GeoSPARQL data model
- CatPrez - for DCAT data catalogs
Prez uses the modern FastAPI Python web framework, so it's fast! It also has few requirements beyond FastAPI so should be pretty easy to install and run in most cases.
It expects "high quality" data to work well: Prez itself won't patch up bad or missing data. In this way it remains relatively simple and this ensures value is retained in the data and not in hidden code.
NOTE: There are a number of data quality assessment tools and processes you can run to ensure that the data you want Prez to access is fit for purpose. See Data Validation below.
Prez accesses data stored in an RDF database - a 'triplestore' - and uses the SPARQL Protocol to do so. Any SPARQL Protocol-compliant DB may be used.
Redirect Service
As a Linked Data server, Prez provides a redirect service at /identifier/redirect
that accepts a query parameter iri
, looks up the iri
in the database for a foaf:homepage
predicate with a value, and if it exists, return a redirect response to the value.
This functionality is useful for institutions who issue their own persistent identifiers under a domain name that they control. The mapping from the persistent identifier to the target web resource is stored in the backend SPARQL store.
This is an alternative solution to persistent identifier services such as the w3id.org. In some cases, it can be used together with such persistent identifier services to avoid the need to provide the redirect mapping in webserver config (NGINX, Apache HTTP, etc.) and instead, define the config as RDF data.
Installation
To get a copy of Prez on your computer, run:
git clone https://github.com/RDFLib/prez
Prez is developed with Poetry, a Python packaging and dependency tool.
Poetry presents all of Prez's
dependencies (other Python packages)
in the pyproject.toml
file located in the project root directory.
To install the Python dependencies run:
poetry install
Note: Poetry must be installed on the system. To check if you have Poetry installed run
poetry --version
. For tips on installing and managing specific dependency groups check the documentation.
Running
This section is for developing Prez locally. See the Running options below for running Prez in production.
To run the development server (with auto-reload on code changes):
poetry run python main.py
In order for Prez to work, a triple store such as Apache Jena or GraphDB must be available for Prez to interface with. Connection to the triple store is done via environment variables.
Prez runs as a standard FastAPI application, so for all the normal HOW TO running questions, see FastAPI's documentation:
Environment Variables
You need to configure at least one environment variable for Prez to run.
The full set of available variables are found in prez/config.py
.
Minimal
The minimal set of environment variables with example values to run prez is listed below:
SPARQL_ENDPOINT=http://localhost:3030/mydataset
If the SPARQL endpoint requires authentication, you must also set:
SPARQL_USERNAME=myusername
, and
SPARQL_PASSWORD=mypassword
To run Prez using Pyoxigraph as the sparql store (useful for testing and development) set:
SPARQL_REPO_TYPE=pyoxigraph
In this case, you do not need to set the SPARQL_ENDPOINT
Details
Further configuration can be done via environment variables. These can be set in a '.env' file which will get read in
via python-dotenv.
Alternatively, set them directly in the environment from which Prez is run.
The environment variables are used to
instantiate a Pydantic Settings
object which is used throughout Prez to configure its behavior. To see how prez
interprets/uses these environment variables check the prez/config.py
file.
Environment Variable | Description |
---|---|
SPARQL_ENDPOINT | Read-only SPARQL endpoint for SpacePrez |
SPARQL_USERNAME | A username for Basic Auth against the SPARQL endpoint, if required by the SPARQL endpoint. |
SPARQL_PASSWORD | A password for Basic Auth against the SPARQL endpoint, if required by the SPARQL endpoint. |
PROTOCOL | The protocol used to deliver Prez. Usually 'http'. |
HOST | The host on which to server prez, typically 'localhost'. |
PORT | The port Prez is made accessible on. Default is 8000, could be 80 or anything else that your system has permission to use |
SYSTEM_URI | Documentation property. An IRI for the Prez system as a whole. This value appears in the landing page RDF delivered by Prez ('/') |
LOG_LEVEL | One of CRITICAL, ERROR, WARNING, INFO, DEBUG. Defaults to INFO. |
LOG_OUTPUT | "file", "stdout", or "both" ("file" and "stdout"). Defaults to stdout. |
PREZ_TITLE | The title to use for Prez instance |
PREZ_DESC | A description to use for the Prez instance |
DISABLE_PREFIX_GENERATION | Default value is false . Very large datasets may want to disable this setting and provide a predefined set of prefixes for namespaces as described in Link Generation. |
Running in a Container
Prez container images are available as github packages here.
Image variants
The image name is ghcr.io/rdflib/prez
.
The latest
tag points to the latest stable release of Prez. All latest stable releases have a major, major and minor, and major, minor and patch tag pointing to it.
For example, for a release with a git tag of 3.2.4, the following tags will be on the container image:
-
3
-
3.2
-
3.2.4
-
latest
New commits to the main
branch creates a rolling dev image with the dev
tag. The dev builds will also include a tag in the form of major.minor.{patch+1}-dev.{commits-since-last-release}.{short-commit-sha}. This conforms to semantic versioning and will be recognized by orchestration systems to perform automatic releases.
For example, if the latest release is 3.2.4 and there have been 7 new commits since the release and the short commit SHA is fc82562, then the container image tag will be:
-
3.2.5-dev.7.fc82562
To run the pulled docker image:
docker run -p 8000:8000 \
-e SPARQL_ENDPOINT=<your_sparql_endpoint> \
<your_image_id>
The above command starts a Docker container running Prez on port 8000, connected to the specified sparql endpoint.
Testing
Prez uses PyTest and Coverage for testing and test coverage reports.
To run all available tests:
poetry run pytest tests
To run all available tests for coverage analysis:
poetry run coverage run -m pytest tests
To generate a coverage report:
poetry run coverage report
Data Validation
For Prez to deliver data via its various subsystems, the data needs to conform to some minimum requirements: you can't, for instance, run VocPrez without an SKOS ConceptSchemes defined!
Profiles
Formal RDF data profiles - standards that constrain other standards - are specified for Space, Voc & CatPrez. See:
- SpacePrez Profile Specification
- VocPrez Profile Specification
-
CatPrez Profile Specification
- yes yes, we know this one is offline for the moment. To be fixed shortly!
The specifications of the various profiles should be straightforward to read. Just be aware that they profile - inherit from and further constrain - other profiles so that there are quite a few 'background' data rules that must be met.
Validation
All the profiles listed above provide validators that can be used with RDF data to test to see if it's valid. If it is, Prez will be just fine with it.
The profiles' validators are all available from the profiles themselves (navigate to the listings of other profile resources via the specification links above) and they are also loaded into the RDFTools online tool which you can use without downloading or installing anything:
Look for the VocPrez Compounded and similar validators. The 'compounded' bit means that validator will validate data against all VocPrez and inherited requirements.
Contact
NOTE: This open source tool is actively developed and supported by KurrawongAI, a small Australian Knowledge Graph company, developers at the University of Melbourne and by open source contributors too.
To flag problems or raise questions, please create issues in the Issue Tracker or you can contact developers using their details below.
Here are the lead developers:
KurrawongAI https://kurrawong.net
David Habgood [email protected]
Nicholas Car [email protected]
Edmond Chuc [email protected]
University of Melbourne - Prez UI mainly Jamie Feiss [email protected]
Contributing
We love contributions to this tool and encourage you to create Issues in this repository's Issue Tracker or to submit a Pull Requests!
There is documentation on contributing to Prez, see README-Dev.md.
License
This version of Prez and the contents of this repository are also available under the BSD-3-Clause License. See this repository's LICENSE file for details.