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
rudof
was 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_compact[<a href='https://crates.io/crates/shex_compact'>shex_compact</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>]; shapemap[<a href='https://crates.io/crates/shapemap'>shapemap</a>]; rbe[<a href='https://crates.io/crates/rbe'>rbe</a>]; shapes_converter[<a href='https://crates.io/crates/shapes_converter'>shapes_converter</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_compact-->shex_ast; shex_validation-->shex_ast; srdf-->iri_s; shacl_ast-->srdf; shacl_validation-->shacl_ast; shex_validation-->shapemap; shapemap-->prefixmap; shex_ast-->prefixmap; srdf-->prefixmap; shex_validation-->rbe; dctap-->prefixmap; dctap --> iri_s; shapes_converter-->shacl_ast; shapes_converter-->shex_ast; shapes_converter-->dctap; prefixmap --> iri_s ; shex_validation --> shex_compact sparql_service --> iri_s ; rudof_lib --> shex_validation ; rudof_lib --> shacl_validation ; rudof_lib --> shapes_converter ; 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).
- ShapeMap, a ShapeMap implementation.
- SRDF, a Simple RDF Interface in Rust.
- PrefixMap: Turtle based prefixMap representation
- Conversions between different RDF data modelling technologies.
- 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.
- SHACL testsuite, the Code in charge of checking the SHACL 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
nom
parsers.
Contributors
- Jose Emilio Labra Gayo
- Ángel Iglesias Préstamo
- 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
rudof
materialized 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
rudof
is used to develop Data Shapes based on the National Agricultural Library Thesaurus Concept Space. - Luminvent is using
rudof
to validate RDF using Rust code.
If you are using rudof
and want to be listed, please contact us or add a Pull Request.