Overview
rudof is a library that implements Shape Expressions, SHACL, DCTAP and other technologies in the RDF ecosystem.
The library is implemented in Rust and it also provides Python bindings.
rudof can be used as a command line tool or can be embedded as a library using cargo.
It can be used to validate RDF data represented with different syntaxes like Turtle, NTriples, to name a few.
As well as RDF data available through SPARQL endpoints like Wikidata.
rudof 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.
The main contributions of rudof are:
- We publish binaries in Linux, Windows and Apple which can be downloaded here.
- The source code is available in the Github repository.
- A Paper about
rudofwas presented at International Semantic Web Conference (Baltimore, USA, October 2024) in the Demos and Posters session. - The List of issues.
- The Discussions page.
- A set of How-to guides is also published.
- The collection of Frequently-Asked-Questions.
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 ;
iri_s --> oxigraph;
iri_s --> reqwest ;
dctap --> calamine ;
dctap --> csv ;
sparql_service --> 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>];
srdf[<a href='https://crates.io/crates/srdf'>srdf</a>];
shex_validation[<a href='https://crates.io/crates/shex_validation'>shex_validation</a>];
shacl_validation[<a href='https://crates.io/crates/shacl_validation'>shacl_validation</a>];
shacl_ast[<a href='https://crates.io/crates/shacl_ast'>shacl_ast</a>];
iri_s[<a href='https://crates.io/crates/iri_s'>iri_s</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 --> srdf ;
shex_validation-->shex_ast;
srdf-->iri_s;
shacl_ast-->srdf;
shacl_validation-->shacl_ast;
shex_ast-->prefixmap;
srdf-->prefixmap;
shex_validation-->rbe;
dctap-->prefixmap;
dctap --> iri_s;
shapes_comparator-->shex_ast;
shapes_comparator-->shacl_ast;
shapes_converter-->shacl_ast;
shapes_converter-->shex_ast;
shapes_converter-->dctap;
prefixmap --> iri_s ;
shex_validation --> shex_ast
sparql_service --> iri_s ;
rudof_lib --> shex_validation ;
rudof_lib --> shacl_validation ;
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>] ;
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 Compact syntax parser, a ShEx Compact syntax parser that follows the ShEx compact grammar.
- ShEx AST, that represents the ShEx Abstract syntax based on ShExJ (JSON-LD).
- SRDF, a Simple RDF Interface in Rust.
- PrefixMap: Turtle based prefixMap representation
- Conversions between different RDF data modelling technologies.
- Comparator between shapes.
- SHACL AST, that represents the SHACL core abstract syntax.
- 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
- Á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.