Overview
rudof is a tool to help describe and validate Knowledge Graphs.
It supports:
- RDF and RDF 1.2
- Labeled Property Graph data with YarsPG syntax.
- Query languages: SPARQL and SPARQL 1.2.
- RDF validation languages: ShEx, SHACL, DCTAP
- Labeled property graph schemas: PG-Schema.
The library is implemented in Rust and it also provides Python bindings, a Rust API and an interactive Shell.
rudof can be used to validate RDF data represented with different syntaxes like Turtle, NTriples, etc.
as well as RDF data available through SPARQL endpoints like Wikidata.
It can also be used to convert between different RDF data validation technologies (like ShEx, SHACL, or DCTAP), and to generate UML like visualizations and HTML views.
More links about rudof:
- Linux, Windows and macOS binaries.
- Source code in Github repository.
- The List of issues.
- The Discussions page.
- A set of How-to guides is also published.
- The collection of Frequently-Asked-Questions.
Publications and tutorials
- rudof-MCP: A Model Context Protocol Server for Semantic Web Operations , Samuel Bustamante Larriet, Diego Martín Fernández, Álvaro García Fernández, Daniel Fernández Álvarez, Jose Emilio Labra Gayo, Extended Semantic Web Conference, ESWC26, Posters and Demos - 2026
- PG-Schema with Property Constraints validator in Rudof, Jose Emilio Labra Gayo, Dominik Tomaszuk, Diego Martín Fernández, Samuel Bustamante Larriet, Álvaro García Fernández, Daniel Fernández Álvarez, Knowledge Capture and Knowledge Representation Conference, KCAP25, Posters and Demos - 2025
- Introduction to `rudof for Wikibase users. Wikibase stakeholders Group meeting. Video recording of the presentation is available here.
- A rudof: A Rust Library for handling RDF data models and Shapes was presented at International Semantic Web Conference (Baltimore, USA, October 2024) in the Demos and Posters session.
Modules
rudof has been implemented using a modular structure and the different modules are available as Rust crates:
graph TD;
user((Person)) --> rudof_cli;
application(application);
application -->|Rust| rudof_lib ;
application --> |Python| pyrudof ;
rudof_iri --> oxrdf;
rudof_iri --> reqwest ;
dctap --> calamine ;
dctap --> csv ;
sparql_service --> oxigraph ;
rudof_rdf --> oxigraph ;
subgraph rudof
rudof_lib[<a href='https://crates.io/crates/rudof_lib'>rudof_lib</a>];
rudof_cli[<a href='https://crates.io/crates/rudof_cli'>rudof_cli</a>];
pyrudof[<a href='https://pypi.org/project/pyrudof/'>pyrudof</a>];
shex_ast[<a href='https://crates.io/crates/shex_ast'>shex_ast</a>];
rudof_rdf[<a href='https://crates.io/crates/rudof_rdf'>rudof_rdf</a>];
shex_validation[<a href='https://crates.io/crates/shex_validation'>shex_validation</a>];
shacl[<a href='https://crates.io/crates/shacl'>shacl</a>];
rudof_iri[<a href='https://crates.io/crates/rudof_iri'>rudof_iri</a>];
prefixmap[<a href='https://crates.io/crates/prefixmap'>prefixmap</a>];
rbe[<a href='https://crates.io/crates/rbe'>rbe</a>];
shapes_converter[<a href='https://crates.io/crates/shapes_converter'>shapes_converter</a>];
shapes_comparator[<a href='https://crates.io/crates/shapes_comparator'>shapes_comparator</a>];
dctap[<a href='https://crates.io/crates/dctap'>dctap</a>];
sparql_service[<a href='https://crates.io/crates/sparql_service'>sparql_service</a>];
pyrudof --> rudof_lib ;
rudof_cli --> rudof_lib ;
shex_ast --> rudof_rdf ;
shex_validation-->shex_ast;
rudof_rdf-->rudof_iri;
shacl-->rudof_rdf;
shacl-->sparql_service;
shex_ast-->prefixmap;
rudof_rdf-->prefixmap;
shex_validation-->rbe;
dctap-->prefixmap;
dctap --> rudof_iri;
shapes_comparator-->shex_ast;
shapes_comparator-->shacl;
shapes_converter-->shacl;
shapes_converter-->shex_ast;
shapes_converter-->dctap;
prefixmap --> rudof_iri ;
shex_validation --> shex_ast
sparql_service --> rudof_iri ;
rudof_lib --> shex_validation ;
rudof_lib --> shacl ;
rudof_lib --> shapes_converter ;
rudof_lib --> sparql_service ;
rudof_lib --> shapes_comparator ;
end
subgraph external dependencies
oxigraph[<a href='https://crates.io/crates/oxigraph'>oxigraph</a>] ;
oxrdf[<a href='https://crates.io/crates/oxrdf'>oxrdf</a>] ;
calamine[<a href='https://docs.rs/calamine/latest/calamine/'>calamine</a>] ;
reqwest[<a href='https://docs.rs/reqwest/latest/reqwest/'>reqwest</a>] ;
csv[<a href='https://docs.rs/csv/latest/csv/'>csv</a>]
end
- ShEx Validation algorithm.
- ShEx AST, that represents the ShEx Abstract syntax based on ShExJ (JSON-LD), and bundles the ShEx Compact syntax parser that follows the ShEx compact grammar.
- Rudof RDF, a RDF Interface in Rust.
- PrefixMap: Turtle based prefixMap representation
- Conversions between different RDF data modelling technologies.
- Comparator between shapes.
- SHACL, that represents the SHACL core abstract syntax and implements the SHACL validation algorithm.
- RBE, Regular Bag Expressions.
- ShEx testsuite, the code in charge of checking the ShEx testsuite.
Related projects
An incomplete list of projects which are related to rudof is the following:
- ShEx-s, a Scala implementation of ShEx (This project started as a re-implementation of ShEx-s in Rust).
- SHACL-s, a Scala implementation of SHACL.
- ShEx.js, a Javascript implementation of ShEx.
- Oxigraph, a SPARQL implementation in Rust that also contains RDF libraries.
- Nemo, an in-memory rule engine that also contains some
nomparsers.
Contributors
- Jose Emilio Labra Gayo
- Samuel Bustamante Larriet
- Álvaro García Fernández
- Ángel Iglesias Préstamo
- Diego Martín Fernández
- Marc-Antoine Arnaud
- Jonas Smedegaard
- Full list of contributors
Funding and sponsors
The project has been partially funded by some grants or institutions like:
- WESO - WEb Semantics Oviedo is the research group at the University of Oviedo, Spain where some of the contributors are participating and has driven the main features implemented by
rudof. - USDA - United States Department of Agriculture
- Spanish Research Agency through the project ANGLIRU - Applying kNowledge Graphs for research Data Interoperability and Reusability (CODE MCI-21-PID2020-117912RB-C21).
- Database Center for Life Science, Japan has provided funding for attending several Biohackathons and RDF Summit events where some of the ideas behind
rudofmaterialized as well as the logo.
In case you want to help the project, please contact Jose E. Labra Gayo.
Supporters and adopters
The following is a list of rudof adopters and supporters:
- WESO (WEb Semantics Oviedo). Most of the contributors are part of this research group at the University of Oviedo
- USDA - United States Department of Agriculture has been partially funding this project through a Non-Assistance Cooperative Agreement with WESO where
rudofis used to develop Data Shapes based on the National Agricultural Library Thesaurus Concept Space. - Luminvent is using
rudofto validate RDF using Rust code.
If you are using rudof and want to be listed, please contact us or add a Pull Request.