Latest commit

History

3,030 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rudof

Latest VersionPyPIrudofdependency statusCodeScene generalpre-commit

This repo contains an RDF and Knowledge Graphs processing tool implemented in Rust.

The implementation supports RDF and property graphs data, as well as ShEx, SHACL, DCTap, PGSchema, and conversions between different RDF data modeling formalisms.

The code can be used as a Rust library but it also contains a binary called rudof which can be used as an RDF playground.

We provide binaries for Linux, Windows, Mac and Docker (see releases), as well as Python bindings.

Features

rudof currently supports the following:

  • RDF and RDF 1.2 parsing, conversion and visualization.
  • SPARQL querying to RDF data and endpoints
  • Parsing SPARQL service description
  • ShEx
  • SHACL
  • DCTAP
  • Property graphs and Schemas for Property Graphs (PGSchemahttps://dl.acm.org/doi/10.1145/3589778)

Future features we are planning to add:

  • rdf-config
  • LinkML

Installation

Official releases

You can download a binary from the latest release page. There you will also find the compiled packages for the installation on your system using a package manager.

Published Debian packages

rudof is available as a Debian package for Debian-based distributions (like Ubuntu).

It is also possible to download the binary from https://github.com/rudof-project/rudof/releases and install the .deb package running the following commands after replacing X.X.X by the latest version:

wget https://github.com/rudof-project/rudof/releases/download/vX.X.X/rudof_vX.X.X_amd64.deb
sudo dpkg -i rudof_vX.X.X_amd64.deb

Windows

The binary can be downloaded from https://github.com/rudof-project/rudof/releases.

Mac

The binary is available at: https://github.com/rudof-project/rudof/releases so you can download the corresponding binary to your machine.

The usual way to run/install a binary in Mac is to download it in a folder, add that folder to your PATH and activating the binary using:

chmod +x <binary_file>

After that, the processor may complain the first time about security and you have to agree to use it. Once you agree, it should work.

Compiling from source

Compiling from source

rudof has been implemented in Rust and is compiled using cargo. The command cargo run can be used to compile and run locally the code.

For example:

cargo run -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

Troubleshooting

If the example doesn’t work as expected, here are a few things you can try:

  • Use the --release flag to compile in release mode, which can resolve some build issues and improve performance:
cargo run --release -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm
  • Run the command inside WSL (Windows Subsystem for Linux). If you're using Windows, compiling the project in WSL can help resolve environment-related issues, as Rust tends to compile more reliably and efficiently in Linux-based systems.

Compiling from source and installing the binary (Debian)

Install cargo deb (only the first time)

cargo install cargo-deb

Create the .deb package by:

cargo deb

And run:

sudo dpkg -i target/debian/rudof_<VERSION>_amd64.deb

Alternative for Linux

To create a binary for Linux with debug information:

cargo build --target x86_64-unknown-linux-gnu

The binary will be created in: target/x86_64-unknown-linux-gnu/debug/rudof

If you want a release binary which is more optimized, you can run:

cargo build --target x86_64-unknown-linux-gnu

In this case, the binary will be target/x86_64-unknown-linux-gnu/release/rudof

Docker

The library is also published as a Docker image (angelip2303/rudof:latest).

Usage

Some examples

The folder examples contains several example files with ShEx schemas and RDF data.

Validate a simple RDF file with a ShEx schema using a ShapeMap

rudof validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

We maintain a Wiki page with some common Usage scenarios and How-to guides.

Debugging information

It is possible to change the debug level information with:

export RUST_LOG=info

where value can be info, debug or trace to show more information. It is also possible to have more control about the logs using more complex filters. For example, to show trace for the elements in crate shacl_validation, and supress any logs for crates hyper and reqwest (which can be quite verbose with traces), you can use:

export RUST_LOG=info,shacl_validation=trace,hyper=off,reqwest=off

In case you use nu_shell, you can use:

$env.RUST_LOG = 'info,shacl_validation=trace,hyper=off,reqwest=off'

Command line usage

RDF and Knowledge Graphs processing tool
Usage: rudof [OPTIONS] [COMMAND]
Commands:
mcp Export rudof as an MCP server
shapemap Show information about ShEx ShapeMaps
shex Show information about ShEx schemas
pgschema Show information about Property Graph Schemas
validate Validate RDF data using ShEx or SHACL
shex-validate Validate RDF using ShEx schemas
shacl-validate Validate RDF data using SHACL shapes
data Show information about RDF data
node Show information about a node in an RDF Graph
shacl Show information about SHACL shapes
dctap Arguments for the `dctap`command
convert Arguments for the `convert`command
compare Compare two shapes (which can be in different formats)
rdf-config Show information about rdf config
service Show information about SPARQL service
query Run SPARQL queries
generate Generate synthetic RDF data from ShEx or SHACL schemas
materialize Materialize an RDF graph from a ShEx schema and Map semantic-action state
pgschema-validate Validate Property Graph data using PGSchema
completion Generates a shell completion script for the specified shell
config Dump the effective configuration rudof is using as TOML
help Print this message or the help of the given subcommand(s)
Options:
-d, --debug... Increase logging verbosity
-h, --help Print help
-V, --version Print version

You can see the manual

Main modules

The repo is divided in the following modules:

  • rudof_iri defines simple IRIs.
  • srdf simple RDF model which will be used for validation.
  • prefixmap Prefix maps implementation.
  • shapemap ShapeMap implementation.
  • shex_ast defines the ShEx Abstract syntax
  • shex_compact contains the code required to handle ShEx compact syntax.
  • shex_validation contains the code required to validate RDF using ShEx.
  • shex_testsuite contains the code required to run the ShEx testsuite.
  • shacl_ast defines the SHACL core Abstract syntax.
  • shacl_validation contains the code required to validate RDF using SHACL.
  • dctap contains the code required to do handle DCTAP files.
  • shapes_converter contains the code required to do conversion between different shapes formalisms.

Publishing the crates

cargo workspaces publish

Worskpaces

The project is using cargo workspaces wihch can be installed with:

cargo install cargo-workspaces

Unit-testing

In order to test all the sub-projects

cargo test --all

Testing one specific subproject:

cargo test -p shex_validation

Using the ShEx test-suite

The ShEx testsuite is included in a git submodule. In order to obtain it, it is necessary to do:

git submodule update --init --recursive
cargo run -p shex_testsuite
Usage: shex_testsuite [OPTIONS]
Options:
-m, --manifest <Manifest FILE (.jsonld)>
Name of Manifest file [default: shex_testsuite/shexTest/validation/manifest.jsonld]
-c, --config <Config file>
[default: shex_testsuite/config.toml]
-x, --run_mode <MANIFEST_RUN_MODE>
[default: collect-errors] [possible values: collect-errors, fail-first-error]
-f, --manifest_mode <MANIFEST_MODE>
[possible values: schemas, validation, negative-syntax, negative-structure]
-p, --print_result_mode <PRINT_RESULT_MODE>
[default: basic] [possible values: basic, failed, passed, not-implemented, all]
-e, --entry <Entry names>
-t, --trait <Trait names>
-h, --help
Print help
-V, --version
Print version

Validation conformance tests for ShEx

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld 

If you want to see the failed tests, you can run:

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld -p failed

Schemas tests

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/schemas/manifest.jsonld -f schemas -p failed

Benchmarks

Performance benchmarks live in benchmarks/. They are not published to crates.io and are not executed in CI. Run them locally with Criterion.

License

Licensed under either of

at your option.

Contributors

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Local development

Precommit has been configured to run formatters and linters before each commit. It is recommended to use it to ensure that the code is formatted and linted correctly before pushing it to the repository.

In order to install it, you can run:

# Installs pre-commit it self
pip install pre-commit
# Installs the pre-commit hooks defined in .pre-commit-config.yaml
pre-commit install

Nix

If you have Nix with flakes enabled, the repository provides a ready-to-use development shell that includes all required dependencies.

Simply run the following command from the root of the repository:

nix develop

This drops you into a shell with everything pre-configured. No manual installation of Rust, cargo, or any other tool is needed.

You can also run a one-off command without entering the shell interactively:

nix develop --command cargo test

If you use direnv, add a .envrc file with use flake to activate the development environment automatically whenever you cd into the repository:

echo"use flake"> .envrc && direnv allow

About

RDF data shapes implementation in Rust

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

3,030 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rudof

Latest VersionPyPIrudofdependency statusCodeScene generalpre-commit

This repo contains an RDF and Knowledge Graphs processing tool implemented in Rust.

The implementation supports RDF and property graphs data, as well as ShEx, SHACL, DCTap, PGSchema, and conversions between different RDF data modeling formalisms.

The code can be used as a Rust library but it also contains a binary called rudof which can be used as an RDF playground.

We provide binaries for Linux, Windows, Mac and Docker (see releases), as well as Python bindings.

Features

rudof currently supports the following:

  • RDF and RDF 1.2 parsing, conversion and visualization.
  • SPARQL querying to RDF data and endpoints
  • Parsing SPARQL service description
  • ShEx
  • SHACL
  • DCTAP
  • Property graphs and Schemas for Property Graphs (PGSchemahttps://dl.acm.org/doi/10.1145/3589778)

Future features we are planning to add:

  • rdf-config
  • LinkML

Installation

Official releases

You can download a binary from the latest release page. There you will also find the compiled packages for the installation on your system using a package manager.

Published Debian packages

rudof is available as a Debian package for Debian-based distributions (like Ubuntu).

It is also possible to download the binary from https://github.com/rudof-project/rudof/releases and install the .deb package running the following commands after replacing X.X.X by the latest version:

wget https://github.com/rudof-project/rudof/releases/download/vX.X.X/rudof_vX.X.X_amd64.deb
sudo dpkg -i rudof_vX.X.X_amd64.deb

Windows

The binary can be downloaded from https://github.com/rudof-project/rudof/releases.

Mac

The binary is available at: https://github.com/rudof-project/rudof/releases so you can download the corresponding binary to your machine.

The usual way to run/install a binary in Mac is to download it in a folder, add that folder to your PATH and activating the binary using:

chmod +x <binary_file>

After that, the processor may complain the first time about security and you have to agree to use it. Once you agree, it should work.

Compiling from source

Compiling from source

rudof has been implemented in Rust and is compiled using cargo. The command cargo run can be used to compile and run locally the code.

For example:

cargo run -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

Troubleshooting

If the example doesn’t work as expected, here are a few things you can try:

  • Use the --release flag to compile in release mode, which can resolve some build issues and improve performance:
cargo run --release -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm
  • Run the command inside WSL (Windows Subsystem for Linux). If you're using Windows, compiling the project in WSL can help resolve environment-related issues, as Rust tends to compile more reliably and efficiently in Linux-based systems.

Compiling from source and installing the binary (Debian)

Install cargo deb (only the first time)

cargo install cargo-deb

Create the .deb package by:

cargo deb

And run:

sudo dpkg -i target/debian/rudof_<VERSION>_amd64.deb

Alternative for Linux

To create a binary for Linux with debug information:

cargo build --target x86_64-unknown-linux-gnu

The binary will be created in: target/x86_64-unknown-linux-gnu/debug/rudof

If you want a release binary which is more optimized, you can run:

cargo build --target x86_64-unknown-linux-gnu

In this case, the binary will be target/x86_64-unknown-linux-gnu/release/rudof

Docker

The library is also published as a Docker image (angelip2303/rudof:latest).

Usage

Some examples

The folder examples contains several example files with ShEx schemas and RDF data.

Validate a simple RDF file with a ShEx schema using a ShapeMap

rudof validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

We maintain a Wiki page with some common Usage scenarios and How-to guides.

Debugging information

It is possible to change the debug level information with:

export RUST_LOG=info

where value can be info, debug or trace to show more information. It is also possible to have more control about the logs using more complex filters. For example, to show trace for the elements in crate shacl_validation, and supress any logs for crates hyper and reqwest (which can be quite verbose with traces), you can use:

export RUST_LOG=info,shacl_validation=trace,hyper=off,reqwest=off

In case you use nu_shell, you can use:

$env.RUST_LOG = 'info,shacl_validation=trace,hyper=off,reqwest=off'

Command line usage

RDF and Knowledge Graphs processing tool
Usage: rudof [OPTIONS] [COMMAND]
Commands:
mcp Export rudof as an MCP server
shapemap Show information about ShEx ShapeMaps
shex Show information about ShEx schemas
pgschema Show information about Property Graph Schemas
validate Validate RDF data using ShEx or SHACL
shex-validate Validate RDF using ShEx schemas
shacl-validate Validate RDF data using SHACL shapes
data Show information about RDF data
node Show information about a node in an RDF Graph
shacl Show information about SHACL shapes
dctap Arguments for the `dctap`command
convert Arguments for the `convert`command
compare Compare two shapes (which can be in different formats)
rdf-config Show information about rdf config
service Show information about SPARQL service
query Run SPARQL queries
generate Generate synthetic RDF data from ShEx or SHACL schemas
materialize Materialize an RDF graph from a ShEx schema and Map semantic-action state
pgschema-validate Validate Property Graph data using PGSchema
completion Generates a shell completion script for the specified shell
config Dump the effective configuration rudof is using as TOML
help Print this message or the help of the given subcommand(s)
Options:
-d, --debug... Increase logging verbosity
-h, --help Print help
-V, --version Print version

You can see the manual

Main modules

The repo is divided in the following modules:

  • rudof_iri defines simple IRIs.
  • srdf simple RDF model which will be used for validation.
  • prefixmap Prefix maps implementation.
  • shapemap ShapeMap implementation.
  • shex_ast defines the ShEx Abstract syntax
  • shex_compact contains the code required to handle ShEx compact syntax.
  • shex_validation contains the code required to validate RDF using ShEx.
  • shex_testsuite contains the code required to run the ShEx testsuite.
  • shacl_ast defines the SHACL core Abstract syntax.
  • shacl_validation contains the code required to validate RDF using SHACL.
  • dctap contains the code required to do handle DCTAP files.
  • shapes_converter contains the code required to do conversion between different shapes formalisms.

Publishing the crates

cargo workspaces publish

Worskpaces

The project is using cargo workspaces wihch can be installed with:

cargo install cargo-workspaces

Unit-testing

In order to test all the sub-projects

cargo test --all

Testing one specific subproject:

cargo test -p shex_validation

Using the ShEx test-suite

The ShEx testsuite is included in a git submodule. In order to obtain it, it is necessary to do:

git submodule update --init --recursive
cargo run -p shex_testsuite
Usage: shex_testsuite [OPTIONS]
Options:
-m, --manifest <Manifest FILE (.jsonld)>
Name of Manifest file [default: shex_testsuite/shexTest/validation/manifest.jsonld]
-c, --config <Config file>
[default: shex_testsuite/config.toml]
-x, --run_mode <MANIFEST_RUN_MODE>
[default: collect-errors] [possible values: collect-errors, fail-first-error]
-f, --manifest_mode <MANIFEST_MODE>
[possible values: schemas, validation, negative-syntax, negative-structure]
-p, --print_result_mode <PRINT_RESULT_MODE>
[default: basic] [possible values: basic, failed, passed, not-implemented, all]
-e, --entry <Entry names>
-t, --trait <Trait names>
-h, --help
Print help
-V, --version
Print version

Validation conformance tests for ShEx

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld 

If you want to see the failed tests, you can run:

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld -p failed

Schemas tests

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/schemas/manifest.jsonld -f schemas -p failed

Benchmarks

Performance benchmarks live in benchmarks/. They are not published to crates.io and are not executed in CI. Run them locally with Criterion.

License

Licensed under either of

at your option.

Contributors

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Local development

Precommit has been configured to run formatters and linters before each commit. It is recommended to use it to ensure that the code is formatted and linted correctly before pushing it to the repository.

In order to install it, you can run:

# Installs pre-commit it self
pip install pre-commit
# Installs the pre-commit hooks defined in .pre-commit-config.yaml
pre-commit install

Nix

If you have Nix with flakes enabled, the repository provides a ready-to-use development shell that includes all required dependencies.

Simply run the following command from the root of the repository:

nix develop

This drops you into a shell with everything pre-configured. No manual installation of Rust, cargo, or any other tool is needed.

You can also run a one-off command without entering the shell interactively:

nix develop --command cargo test

If you use direnv, add a .envrc file with use flake to activate the development environment automatically whenever you cd into the repository:

echo"use flake"> .envrc && direnv allow

About

RDF data shapes implementation in Rust

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

3,030 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rudof

Latest VersionPyPIrudofdependency statusCodeScene generalpre-commit

This repo contains an RDF and Knowledge Graphs processing tool implemented in Rust.

The implementation supports RDF and property graphs data, as well as ShEx, SHACL, DCTap, PGSchema, and conversions between different RDF data modeling formalisms.

The code can be used as a Rust library but it also contains a binary called rudof which can be used as an RDF playground.

We provide binaries for Linux, Windows, Mac and Docker (see releases), as well as Python bindings.

Features

rudof currently supports the following:

  • RDF and RDF 1.2 parsing, conversion and visualization.
  • SPARQL querying to RDF data and endpoints
  • Parsing SPARQL service description
  • ShEx
  • SHACL
  • DCTAP
  • Property graphs and Schemas for Property Graphs (PGSchemahttps://dl.acm.org/doi/10.1145/3589778)

Future features we are planning to add:

  • rdf-config
  • LinkML

Installation

Official releases

You can download a binary from the latest release page. There you will also find the compiled packages for the installation on your system using a package manager.

Published Debian packages

rudof is available as a Debian package for Debian-based distributions (like Ubuntu).

It is also possible to download the binary from https://github.com/rudof-project/rudof/releases and install the .deb package running the following commands after replacing X.X.X by the latest version:

wget https://github.com/rudof-project/rudof/releases/download/vX.X.X/rudof_vX.X.X_amd64.deb
sudo dpkg -i rudof_vX.X.X_amd64.deb

Windows

The binary can be downloaded from https://github.com/rudof-project/rudof/releases.

Mac

The binary is available at: https://github.com/rudof-project/rudof/releases so you can download the corresponding binary to your machine.

The usual way to run/install a binary in Mac is to download it in a folder, add that folder to your PATH and activating the binary using:

chmod +x <binary_file>

After that, the processor may complain the first time about security and you have to agree to use it. Once you agree, it should work.

Compiling from source

Compiling from source

rudof has been implemented in Rust and is compiled using cargo. The command cargo run can be used to compile and run locally the code.

For example:

cargo run -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

Troubleshooting

If the example doesn’t work as expected, here are a few things you can try:

  • Use the --release flag to compile in release mode, which can resolve some build issues and improve performance:
cargo run --release -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm
  • Run the command inside WSL (Windows Subsystem for Linux). If you're using Windows, compiling the project in WSL can help resolve environment-related issues, as Rust tends to compile more reliably and efficiently in Linux-based systems.

Compiling from source and installing the binary (Debian)

Install cargo deb (only the first time)

cargo install cargo-deb

Create the .deb package by:

cargo deb

And run:

sudo dpkg -i target/debian/rudof_<VERSION>_amd64.deb

Alternative for Linux

To create a binary for Linux with debug information:

cargo build --target x86_64-unknown-linux-gnu

The binary will be created in: target/x86_64-unknown-linux-gnu/debug/rudof

If you want a release binary which is more optimized, you can run:

cargo build --target x86_64-unknown-linux-gnu

In this case, the binary will be target/x86_64-unknown-linux-gnu/release/rudof

Docker

The library is also published as a Docker image (angelip2303/rudof:latest).

Usage

Some examples

The folder examples contains several example files with ShEx schemas and RDF data.

Validate a simple RDF file with a ShEx schema using a ShapeMap

rudof validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

We maintain a Wiki page with some common Usage scenarios and How-to guides.

Debugging information

It is possible to change the debug level information with:

export RUST_LOG=info

where value can be info, debug or trace to show more information. It is also possible to have more control about the logs using more complex filters. For example, to show trace for the elements in crate shacl_validation, and supress any logs for crates hyper and reqwest (which can be quite verbose with traces), you can use:

export RUST_LOG=info,shacl_validation=trace,hyper=off,reqwest=off

In case you use nu_shell, you can use:

$env.RUST_LOG = 'info,shacl_validation=trace,hyper=off,reqwest=off'

Command line usage

RDF and Knowledge Graphs processing tool
Usage: rudof [OPTIONS] [COMMAND]
Commands:
mcp Export rudof as an MCP server
shapemap Show information about ShEx ShapeMaps
shex Show information about ShEx schemas
pgschema Show information about Property Graph Schemas
validate Validate RDF data using ShEx or SHACL
shex-validate Validate RDF using ShEx schemas
shacl-validate Validate RDF data using SHACL shapes
data Show information about RDF data
node Show information about a node in an RDF Graph
shacl Show information about SHACL shapes
dctap Arguments for the `dctap`command
convert Arguments for the `convert`command
compare Compare two shapes (which can be in different formats)
rdf-config Show information about rdf config
service Show information about SPARQL service
query Run SPARQL queries
generate Generate synthetic RDF data from ShEx or SHACL schemas
materialize Materialize an RDF graph from a ShEx schema and Map semantic-action state
pgschema-validate Validate Property Graph data using PGSchema
completion Generates a shell completion script for the specified shell
config Dump the effective configuration rudof is using as TOML
help Print this message or the help of the given subcommand(s)
Options:
-d, --debug... Increase logging verbosity
-h, --help Print help
-V, --version Print version

You can see the manual

Main modules

The repo is divided in the following modules:

  • rudof_iri defines simple IRIs.
  • srdf simple RDF model which will be used for validation.
  • prefixmap Prefix maps implementation.
  • shapemap ShapeMap implementation.
  • shex_ast defines the ShEx Abstract syntax
  • shex_compact contains the code required to handle ShEx compact syntax.
  • shex_validation contains the code required to validate RDF using ShEx.
  • shex_testsuite contains the code required to run the ShEx testsuite.
  • shacl_ast defines the SHACL core Abstract syntax.
  • shacl_validation contains the code required to validate RDF using SHACL.
  • dctap contains the code required to do handle DCTAP files.
  • shapes_converter contains the code required to do conversion between different shapes formalisms.

Publishing the crates

cargo workspaces publish

Worskpaces

The project is using cargo workspaces wihch can be installed with:

cargo install cargo-workspaces

Unit-testing

In order to test all the sub-projects

cargo test --all

Testing one specific subproject:

cargo test -p shex_validation

Using the ShEx test-suite

The ShEx testsuite is included in a git submodule. In order to obtain it, it is necessary to do:

git submodule update --init --recursive
cargo run -p shex_testsuite
Usage: shex_testsuite [OPTIONS]
Options:
-m, --manifest <Manifest FILE (.jsonld)>
Name of Manifest file [default: shex_testsuite/shexTest/validation/manifest.jsonld]
-c, --config <Config file>
[default: shex_testsuite/config.toml]
-x, --run_mode <MANIFEST_RUN_MODE>
[default: collect-errors] [possible values: collect-errors, fail-first-error]
-f, --manifest_mode <MANIFEST_MODE>
[possible values: schemas, validation, negative-syntax, negative-structure]
-p, --print_result_mode <PRINT_RESULT_MODE>
[default: basic] [possible values: basic, failed, passed, not-implemented, all]
-e, --entry <Entry names>
-t, --trait <Trait names>
-h, --help
Print help
-V, --version
Print version

Validation conformance tests for ShEx

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld 

If you want to see the failed tests, you can run:

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld -p failed

Schemas tests

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/schemas/manifest.jsonld -f schemas -p failed

Benchmarks

Performance benchmarks live in benchmarks/. They are not published to crates.io and are not executed in CI. Run them locally with Criterion.

License

Licensed under either of

at your option.

Contributors

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Local development

Precommit has been configured to run formatters and linters before each commit. It is recommended to use it to ensure that the code is formatted and linted correctly before pushing it to the repository.

In order to install it, you can run:

# Installs pre-commit it self
pip install pre-commit
# Installs the pre-commit hooks defined in .pre-commit-config.yaml
pre-commit install

Nix

If you have Nix with flakes enabled, the repository provides a ready-to-use development shell that includes all required dependencies.

Simply run the following command from the root of the repository:

nix develop

This drops you into a shell with everything pre-configured. No manual installation of Rust, cargo, or any other tool is needed.

You can also run a one-off command without entering the shell interactively:

nix develop --command cargo test

If you use direnv, add a .envrc file with use flake to activate the development environment automatically whenever you cd into the repository:

echo"use flake"> .envrc && direnv allow

About

RDF data shapes implementation in Rust

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

3,030 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rudof

Latest VersionPyPIrudofdependency statusCodeScene generalpre-commit

This repo contains an RDF and Knowledge Graphs processing tool implemented in Rust.

The implementation supports RDF and property graphs data, as well as ShEx, SHACL, DCTap, PGSchema, and conversions between different RDF data modeling formalisms.

The code can be used as a Rust library but it also contains a binary called rudof which can be used as an RDF playground.

We provide binaries for Linux, Windows, Mac and Docker (see releases), as well as Python bindings.

Features

rudof currently supports the following:

  • RDF and RDF 1.2 parsing, conversion and visualization.
  • SPARQL querying to RDF data and endpoints
  • Parsing SPARQL service description
  • ShEx
  • SHACL
  • DCTAP
  • Property graphs and Schemas for Property Graphs (PGSchemahttps://dl.acm.org/doi/10.1145/3589778)

Future features we are planning to add:

  • rdf-config
  • LinkML

Installation

Official releases

You can download a binary from the latest release page. There you will also find the compiled packages for the installation on your system using a package manager.

Published Debian packages

rudof is available as a Debian package for Debian-based distributions (like Ubuntu).

It is also possible to download the binary from https://github.com/rudof-project/rudof/releases and install the .deb package running the following commands after replacing X.X.X by the latest version:

wget https://github.com/rudof-project/rudof/releases/download/vX.X.X/rudof_vX.X.X_amd64.deb
sudo dpkg -i rudof_vX.X.X_amd64.deb

Windows

The binary can be downloaded from https://github.com/rudof-project/rudof/releases.

Mac

The binary is available at: https://github.com/rudof-project/rudof/releases so you can download the corresponding binary to your machine.

The usual way to run/install a binary in Mac is to download it in a folder, add that folder to your PATH and activating the binary using:

chmod +x <binary_file>

After that, the processor may complain the first time about security and you have to agree to use it. Once you agree, it should work.

Compiling from source

Compiling from source

rudof has been implemented in Rust and is compiled using cargo. The command cargo run can be used to compile and run locally the code.

For example:

cargo run -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

Troubleshooting

If the example doesn’t work as expected, here are a few things you can try:

  • Use the --release flag to compile in release mode, which can resolve some build issues and improve performance:
cargo run --release -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm
  • Run the command inside WSL (Windows Subsystem for Linux). If you're using Windows, compiling the project in WSL can help resolve environment-related issues, as Rust tends to compile more reliably and efficiently in Linux-based systems.

Compiling from source and installing the binary (Debian)

Install cargo deb (only the first time)

cargo install cargo-deb

Create the .deb package by:

cargo deb

And run:

sudo dpkg -i target/debian/rudof_<VERSION>_amd64.deb

Alternative for Linux

To create a binary for Linux with debug information:

cargo build --target x86_64-unknown-linux-gnu

The binary will be created in: target/x86_64-unknown-linux-gnu/debug/rudof

If you want a release binary which is more optimized, you can run:

cargo build --target x86_64-unknown-linux-gnu

In this case, the binary will be target/x86_64-unknown-linux-gnu/release/rudof

Docker

The library is also published as a Docker image (angelip2303/rudof:latest).

Usage

Some examples

The folder examples contains several example files with ShEx schemas and RDF data.

Validate a simple RDF file with a ShEx schema using a ShapeMap

rudof validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

We maintain a Wiki page with some common Usage scenarios and How-to guides.

Debugging information

It is possible to change the debug level information with:

export RUST_LOG=info

where value can be info, debug or trace to show more information. It is also possible to have more control about the logs using more complex filters. For example, to show trace for the elements in crate shacl_validation, and supress any logs for crates hyper and reqwest (which can be quite verbose with traces), you can use:

export RUST_LOG=info,shacl_validation=trace,hyper=off,reqwest=off

In case you use nu_shell, you can use:

$env.RUST_LOG = 'info,shacl_validation=trace,hyper=off,reqwest=off'

Command line usage

RDF and Knowledge Graphs processing tool
Usage: rudof [OPTIONS] [COMMAND]
Commands:
mcp Export rudof as an MCP server
shapemap Show information about ShEx ShapeMaps
shex Show information about ShEx schemas
pgschema Show information about Property Graph Schemas
validate Validate RDF data using ShEx or SHACL
shex-validate Validate RDF using ShEx schemas
shacl-validate Validate RDF data using SHACL shapes
data Show information about RDF data
node Show information about a node in an RDF Graph
shacl Show information about SHACL shapes
dctap Arguments for the `dctap`command
convert Arguments for the `convert`command
compare Compare two shapes (which can be in different formats)
rdf-config Show information about rdf config
service Show information about SPARQL service
query Run SPARQL queries
generate Generate synthetic RDF data from ShEx or SHACL schemas
materialize Materialize an RDF graph from a ShEx schema and Map semantic-action state
pgschema-validate Validate Property Graph data using PGSchema
completion Generates a shell completion script for the specified shell
config Dump the effective configuration rudof is using as TOML
help Print this message or the help of the given subcommand(s)
Options:
-d, --debug... Increase logging verbosity
-h, --help Print help
-V, --version Print version

You can see the manual

Main modules

The repo is divided in the following modules:

  • rudof_iri defines simple IRIs.
  • srdf simple RDF model which will be used for validation.
  • prefixmap Prefix maps implementation.
  • shapemap ShapeMap implementation.
  • shex_ast defines the ShEx Abstract syntax
  • shex_compact contains the code required to handle ShEx compact syntax.
  • shex_validation contains the code required to validate RDF using ShEx.
  • shex_testsuite contains the code required to run the ShEx testsuite.
  • shacl_ast defines the SHACL core Abstract syntax.
  • shacl_validation contains the code required to validate RDF using SHACL.
  • dctap contains the code required to do handle DCTAP files.
  • shapes_converter contains the code required to do conversion between different shapes formalisms.

Publishing the crates

cargo workspaces publish

Worskpaces

The project is using cargo workspaces wihch can be installed with:

cargo install cargo-workspaces

Unit-testing

In order to test all the sub-projects

cargo test --all

Testing one specific subproject:

cargo test -p shex_validation

Using the ShEx test-suite

The ShEx testsuite is included in a git submodule. In order to obtain it, it is necessary to do:

git submodule update --init --recursive
cargo run -p shex_testsuite
Usage: shex_testsuite [OPTIONS]
Options:
-m, --manifest <Manifest FILE (.jsonld)>
Name of Manifest file [default: shex_testsuite/shexTest/validation/manifest.jsonld]
-c, --config <Config file>
[default: shex_testsuite/config.toml]
-x, --run_mode <MANIFEST_RUN_MODE>
[default: collect-errors] [possible values: collect-errors, fail-first-error]
-f, --manifest_mode <MANIFEST_MODE>
[possible values: schemas, validation, negative-syntax, negative-structure]
-p, --print_result_mode <PRINT_RESULT_MODE>
[default: basic] [possible values: basic, failed, passed, not-implemented, all]
-e, --entry <Entry names>
-t, --trait <Trait names>
-h, --help
Print help
-V, --version
Print version

Validation conformance tests for ShEx

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld 

If you want to see the failed tests, you can run:

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld -p failed

Schemas tests

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/schemas/manifest.jsonld -f schemas -p failed

Benchmarks

Performance benchmarks live in benchmarks/. They are not published to crates.io and are not executed in CI. Run them locally with Criterion.

License

Licensed under either of

at your option.

Contributors

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Local development

Precommit has been configured to run formatters and linters before each commit. It is recommended to use it to ensure that the code is formatted and linted correctly before pushing it to the repository.

In order to install it, you can run:

# Installs pre-commit it self
pip install pre-commit
# Installs the pre-commit hooks defined in .pre-commit-config.yaml
pre-commit install

Nix

If you have Nix with flakes enabled, the repository provides a ready-to-use development shell that includes all required dependencies.

Simply run the following command from the root of the repository:

nix develop

This drops you into a shell with everything pre-configured. No manual installation of Rust, cargo, or any other tool is needed.

You can also run a one-off command without entering the shell interactively:

nix develop --command cargo test

If you use direnv, add a .envrc file with use flake to activate the development environment automatically whenever you cd into the repository:

echo"use flake"> .envrc && direnv allow

About

RDF data shapes implementation in Rust

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

3,030 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rudof

Latest VersionPyPIrudofdependency statusCodeScene generalpre-commit

This repo contains an RDF and Knowledge Graphs processing tool implemented in Rust.

The implementation supports RDF and property graphs data, as well as ShEx, SHACL, DCTap, PGSchema, and conversions between different RDF data modeling formalisms.

The code can be used as a Rust library but it also contains a binary called rudof which can be used as an RDF playground.

We provide binaries for Linux, Windows, Mac and Docker (see releases), as well as Python bindings.

Features

rudof currently supports the following:

  • RDF and RDF 1.2 parsing, conversion and visualization.
  • SPARQL querying to RDF data and endpoints
  • Parsing SPARQL service description
  • ShEx
  • SHACL
  • DCTAP
  • Property graphs and Schemas for Property Graphs (PGSchemahttps://dl.acm.org/doi/10.1145/3589778)

Future features we are planning to add:

  • rdf-config
  • LinkML

Installation

Official releases

You can download a binary from the latest release page. There you will also find the compiled packages for the installation on your system using a package manager.

Published Debian packages

rudof is available as a Debian package for Debian-based distributions (like Ubuntu).

It is also possible to download the binary from https://github.com/rudof-project/rudof/releases and install the .deb package running the following commands after replacing X.X.X by the latest version:

wget https://github.com/rudof-project/rudof/releases/download/vX.X.X/rudof_vX.X.X_amd64.deb
sudo dpkg -i rudof_vX.X.X_amd64.deb

Windows

The binary can be downloaded from https://github.com/rudof-project/rudof/releases.

Mac

The binary is available at: https://github.com/rudof-project/rudof/releases so you can download the corresponding binary to your machine.

The usual way to run/install a binary in Mac is to download it in a folder, add that folder to your PATH and activating the binary using:

chmod +x <binary_file>

After that, the processor may complain the first time about security and you have to agree to use it. Once you agree, it should work.

Compiling from source

Compiling from source

rudof has been implemented in Rust and is compiled using cargo. The command cargo run can be used to compile and run locally the code.

For example:

cargo run -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

Troubleshooting

If the example doesn’t work as expected, here are a few things you can try:

  • Use the --release flag to compile in release mode, which can resolve some build issues and improve performance:
cargo run --release -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm
  • Run the command inside WSL (Windows Subsystem for Linux). If you're using Windows, compiling the project in WSL can help resolve environment-related issues, as Rust tends to compile more reliably and efficiently in Linux-based systems.

Compiling from source and installing the binary (Debian)

Install cargo deb (only the first time)

cargo install cargo-deb

Create the .deb package by:

cargo deb

And run:

sudo dpkg -i target/debian/rudof_<VERSION>_amd64.deb

Alternative for Linux

To create a binary for Linux with debug information:

cargo build --target x86_64-unknown-linux-gnu

The binary will be created in: target/x86_64-unknown-linux-gnu/debug/rudof

If you want a release binary which is more optimized, you can run:

cargo build --target x86_64-unknown-linux-gnu

In this case, the binary will be target/x86_64-unknown-linux-gnu/release/rudof

Docker

The library is also published as a Docker image (angelip2303/rudof:latest).

Usage

Some examples

The folder examples contains several example files with ShEx schemas and RDF data.

Validate a simple RDF file with a ShEx schema using a ShapeMap

rudof validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

We maintain a Wiki page with some common Usage scenarios and How-to guides.

Debugging information

It is possible to change the debug level information with:

export RUST_LOG=info

where value can be info, debug or trace to show more information. It is also possible to have more control about the logs using more complex filters. For example, to show trace for the elements in crate shacl_validation, and supress any logs for crates hyper and reqwest (which can be quite verbose with traces), you can use:

export RUST_LOG=info,shacl_validation=trace,hyper=off,reqwest=off

In case you use nu_shell, you can use:

$env.RUST_LOG = 'info,shacl_validation=trace,hyper=off,reqwest=off'

Command line usage

RDF and Knowledge Graphs processing tool
Usage: rudof [OPTIONS] [COMMAND]
Commands:
mcp Export rudof as an MCP server
shapemap Show information about ShEx ShapeMaps
shex Show information about ShEx schemas
pgschema Show information about Property Graph Schemas
validate Validate RDF data using ShEx or SHACL
shex-validate Validate RDF using ShEx schemas
shacl-validate Validate RDF data using SHACL shapes
data Show information about RDF data
node Show information about a node in an RDF Graph
shacl Show information about SHACL shapes
dctap Arguments for the `dctap`command
convert Arguments for the `convert`command
compare Compare two shapes (which can be in different formats)
rdf-config Show information about rdf config
service Show information about SPARQL service
query Run SPARQL queries
generate Generate synthetic RDF data from ShEx or SHACL schemas
materialize Materialize an RDF graph from a ShEx schema and Map semantic-action state
pgschema-validate Validate Property Graph data using PGSchema
completion Generates a shell completion script for the specified shell
config Dump the effective configuration rudof is using as TOML
help Print this message or the help of the given subcommand(s)
Options:
-d, --debug... Increase logging verbosity
-h, --help Print help
-V, --version Print version

You can see the manual

Main modules

The repo is divided in the following modules:

  • rudof_iri defines simple IRIs.
  • srdf simple RDF model which will be used for validation.
  • prefixmap Prefix maps implementation.
  • shapemap ShapeMap implementation.
  • shex_ast defines the ShEx Abstract syntax
  • shex_compact contains the code required to handle ShEx compact syntax.
  • shex_validation contains the code required to validate RDF using ShEx.
  • shex_testsuite contains the code required to run the ShEx testsuite.
  • shacl_ast defines the SHACL core Abstract syntax.
  • shacl_validation contains the code required to validate RDF using SHACL.
  • dctap contains the code required to do handle DCTAP files.
  • shapes_converter contains the code required to do conversion between different shapes formalisms.

Publishing the crates

cargo workspaces publish

Worskpaces

The project is using cargo workspaces wihch can be installed with:

cargo install cargo-workspaces

Unit-testing

In order to test all the sub-projects

cargo test --all

Testing one specific subproject:

cargo test -p shex_validation

Using the ShEx test-suite

The ShEx testsuite is included in a git submodule. In order to obtain it, it is necessary to do:

git submodule update --init --recursive
cargo run -p shex_testsuite
Usage: shex_testsuite [OPTIONS]
Options:
-m, --manifest <Manifest FILE (.jsonld)>
Name of Manifest file [default: shex_testsuite/shexTest/validation/manifest.jsonld]
-c, --config <Config file>
[default: shex_testsuite/config.toml]
-x, --run_mode <MANIFEST_RUN_MODE>
[default: collect-errors] [possible values: collect-errors, fail-first-error]
-f, --manifest_mode <MANIFEST_MODE>
[possible values: schemas, validation, negative-syntax, negative-structure]
-p, --print_result_mode <PRINT_RESULT_MODE>
[default: basic] [possible values: basic, failed, passed, not-implemented, all]
-e, --entry <Entry names>
-t, --trait <Trait names>
-h, --help
Print help
-V, --version
Print version

Validation conformance tests for ShEx

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld 

If you want to see the failed tests, you can run:

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld -p failed

Schemas tests

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/schemas/manifest.jsonld -f schemas -p failed

Benchmarks

Performance benchmarks live in benchmarks/. They are not published to crates.io and are not executed in CI. Run them locally with Criterion.

License

Licensed under either of

at your option.

Contributors

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Local development

Precommit has been configured to run formatters and linters before each commit. It is recommended to use it to ensure that the code is formatted and linted correctly before pushing it to the repository.

In order to install it, you can run:

# Installs pre-commit it self
pip install pre-commit
# Installs the pre-commit hooks defined in .pre-commit-config.yaml
pre-commit install

Nix

If you have Nix with flakes enabled, the repository provides a ready-to-use development shell that includes all required dependencies.

Simply run the following command from the root of the repository:

nix develop

This drops you into a shell with everything pre-configured. No manual installation of Rust, cargo, or any other tool is needed.

You can also run a one-off command without entering the shell interactively:

nix develop --command cargo test

If you use direnv, add a .envrc file with use flake to activate the development environment automatically whenever you cd into the repository:

echo"use flake"> .envrc && direnv allow

About

RDF data shapes implementation in Rust

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

3,030 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rudof

Latest VersionPyPIrudofdependency statusCodeScene generalpre-commit

This repo contains an RDF and Knowledge Graphs processing tool implemented in Rust.

The implementation supports RDF and property graphs data, as well as ShEx, SHACL, DCTap, PGSchema, and conversions between different RDF data modeling formalisms.

The code can be used as a Rust library but it also contains a binary called rudof which can be used as an RDF playground.

We provide binaries for Linux, Windows, Mac and Docker (see releases), as well as Python bindings.

Features

rudof currently supports the following:

  • RDF and RDF 1.2 parsing, conversion and visualization.
  • SPARQL querying to RDF data and endpoints
  • Parsing SPARQL service description
  • ShEx
  • SHACL
  • DCTAP
  • Property graphs and Schemas for Property Graphs (PGSchemahttps://dl.acm.org/doi/10.1145/3589778)

Future features we are planning to add:

  • rdf-config
  • LinkML

Installation

Official releases

You can download a binary from the latest release page. There you will also find the compiled packages for the installation on your system using a package manager.

Published Debian packages

rudof is available as a Debian package for Debian-based distributions (like Ubuntu).

It is also possible to download the binary from https://github.com/rudof-project/rudof/releases and install the .deb package running the following commands after replacing X.X.X by the latest version:

wget https://github.com/rudof-project/rudof/releases/download/vX.X.X/rudof_vX.X.X_amd64.deb
sudo dpkg -i rudof_vX.X.X_amd64.deb

Windows

The binary can be downloaded from https://github.com/rudof-project/rudof/releases.

Mac

The binary is available at: https://github.com/rudof-project/rudof/releases so you can download the corresponding binary to your machine.

The usual way to run/install a binary in Mac is to download it in a folder, add that folder to your PATH and activating the binary using:

chmod +x <binary_file>

After that, the processor may complain the first time about security and you have to agree to use it. Once you agree, it should work.

Compiling from source

Compiling from source

rudof has been implemented in Rust and is compiled using cargo. The command cargo run can be used to compile and run locally the code.

For example:

cargo run -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

Troubleshooting

If the example doesn’t work as expected, here are a few things you can try:

  • Use the --release flag to compile in release mode, which can resolve some build issues and improve performance:
cargo run --release -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm
  • Run the command inside WSL (Windows Subsystem for Linux). If you're using Windows, compiling the project in WSL can help resolve environment-related issues, as Rust tends to compile more reliably and efficiently in Linux-based systems.

Compiling from source and installing the binary (Debian)

Install cargo deb (only the first time)

cargo install cargo-deb

Create the .deb package by:

cargo deb

And run:

sudo dpkg -i target/debian/rudof_<VERSION>_amd64.deb

Alternative for Linux

To create a binary for Linux with debug information:

cargo build --target x86_64-unknown-linux-gnu

The binary will be created in: target/x86_64-unknown-linux-gnu/debug/rudof

If you want a release binary which is more optimized, you can run:

cargo build --target x86_64-unknown-linux-gnu

In this case, the binary will be target/x86_64-unknown-linux-gnu/release/rudof

Docker

The library is also published as a Docker image (angelip2303/rudof:latest).

Usage

Some examples

The folder examples contains several example files with ShEx schemas and RDF data.

Validate a simple RDF file with a ShEx schema using a ShapeMap

rudof validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

We maintain a Wiki page with some common Usage scenarios and How-to guides.

Debugging information

It is possible to change the debug level information with:

export RUST_LOG=info

where value can be info, debug or trace to show more information. It is also possible to have more control about the logs using more complex filters. For example, to show trace for the elements in crate shacl_validation, and supress any logs for crates hyper and reqwest (which can be quite verbose with traces), you can use:

export RUST_LOG=info,shacl_validation=trace,hyper=off,reqwest=off

In case you use nu_shell, you can use:

$env.RUST_LOG = 'info,shacl_validation=trace,hyper=off,reqwest=off'

Command line usage

RDF and Knowledge Graphs processing tool
Usage: rudof [OPTIONS] [COMMAND]
Commands:
mcp Export rudof as an MCP server
shapemap Show information about ShEx ShapeMaps
shex Show information about ShEx schemas
pgschema Show information about Property Graph Schemas
validate Validate RDF data using ShEx or SHACL
shex-validate Validate RDF using ShEx schemas
shacl-validate Validate RDF data using SHACL shapes
data Show information about RDF data
node Show information about a node in an RDF Graph
shacl Show information about SHACL shapes
dctap Arguments for the `dctap`command
convert Arguments for the `convert`command
compare Compare two shapes (which can be in different formats)
rdf-config Show information about rdf config
service Show information about SPARQL service
query Run SPARQL queries
generate Generate synthetic RDF data from ShEx or SHACL schemas
materialize Materialize an RDF graph from a ShEx schema and Map semantic-action state
pgschema-validate Validate Property Graph data using PGSchema
completion Generates a shell completion script for the specified shell
config Dump the effective configuration rudof is using as TOML
help Print this message or the help of the given subcommand(s)
Options:
-d, --debug... Increase logging verbosity
-h, --help Print help
-V, --version Print version

You can see the manual

Main modules

The repo is divided in the following modules:

  • rudof_iri defines simple IRIs.
  • srdf simple RDF model which will be used for validation.
  • prefixmap Prefix maps implementation.
  • shapemap ShapeMap implementation.
  • shex_ast defines the ShEx Abstract syntax
  • shex_compact contains the code required to handle ShEx compact syntax.
  • shex_validation contains the code required to validate RDF using ShEx.
  • shex_testsuite contains the code required to run the ShEx testsuite.
  • shacl_ast defines the SHACL core Abstract syntax.
  • shacl_validation contains the code required to validate RDF using SHACL.
  • dctap contains the code required to do handle DCTAP files.
  • shapes_converter contains the code required to do conversion between different shapes formalisms.

Publishing the crates

cargo workspaces publish

Worskpaces

The project is using cargo workspaces wihch can be installed with:

cargo install cargo-workspaces

Unit-testing

In order to test all the sub-projects

cargo test --all

Testing one specific subproject:

cargo test -p shex_validation

Using the ShEx test-suite

The ShEx testsuite is included in a git submodule. In order to obtain it, it is necessary to do:

git submodule update --init --recursive
cargo run -p shex_testsuite
Usage: shex_testsuite [OPTIONS]
Options:
-m, --manifest <Manifest FILE (.jsonld)>
Name of Manifest file [default: shex_testsuite/shexTest/validation/manifest.jsonld]
-c, --config <Config file>
[default: shex_testsuite/config.toml]
-x, --run_mode <MANIFEST_RUN_MODE>
[default: collect-errors] [possible values: collect-errors, fail-first-error]
-f, --manifest_mode <MANIFEST_MODE>
[possible values: schemas, validation, negative-syntax, negative-structure]
-p, --print_result_mode <PRINT_RESULT_MODE>
[default: basic] [possible values: basic, failed, passed, not-implemented, all]
-e, --entry <Entry names>
-t, --trait <Trait names>
-h, --help
Print help
-V, --version
Print version

Validation conformance tests for ShEx

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld 

If you want to see the failed tests, you can run:

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld -p failed

Schemas tests

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/schemas/manifest.jsonld -f schemas -p failed

Benchmarks

Performance benchmarks live in benchmarks/. They are not published to crates.io and are not executed in CI. Run them locally with Criterion.

License

Licensed under either of

at your option.

Contributors

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Local development

Precommit has been configured to run formatters and linters before each commit. It is recommended to use it to ensure that the code is formatted and linted correctly before pushing it to the repository.

In order to install it, you can run:

# Installs pre-commit it self
pip install pre-commit
# Installs the pre-commit hooks defined in .pre-commit-config.yaml
pre-commit install

Nix

If you have Nix with flakes enabled, the repository provides a ready-to-use development shell that includes all required dependencies.

Simply run the following command from the root of the repository:

nix develop

This drops you into a shell with everything pre-configured. No manual installation of Rust, cargo, or any other tool is needed.

You can also run a one-off command without entering the shell interactively:

nix develop --command cargo test

If you use direnv, add a .envrc file with use flake to activate the development environment automatically whenever you cd into the repository:

echo"use flake"> .envrc && direnv allow

About

RDF data shapes implementation in Rust

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

3,030 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rudof

Latest VersionPyPIrudofdependency statusCodeScene generalpre-commit

This repo contains an RDF and Knowledge Graphs processing tool implemented in Rust.

The implementation supports RDF and property graphs data, as well as ShEx, SHACL, DCTap, PGSchema, and conversions between different RDF data modeling formalisms.

The code can be used as a Rust library but it also contains a binary called rudof which can be used as an RDF playground.

We provide binaries for Linux, Windows, Mac and Docker (see releases), as well as Python bindings.

Features

rudof currently supports the following:

  • RDF and RDF 1.2 parsing, conversion and visualization.
  • SPARQL querying to RDF data and endpoints
  • Parsing SPARQL service description
  • ShEx
  • SHACL
  • DCTAP
  • Property graphs and Schemas for Property Graphs (PGSchemahttps://dl.acm.org/doi/10.1145/3589778)

Future features we are planning to add:

  • rdf-config
  • LinkML

Installation

Official releases

You can download a binary from the latest release page. There you will also find the compiled packages for the installation on your system using a package manager.

Published Debian packages

rudof is available as a Debian package for Debian-based distributions (like Ubuntu).

It is also possible to download the binary from https://github.com/rudof-project/rudof/releases and install the .deb package running the following commands after replacing X.X.X by the latest version:

wget https://github.com/rudof-project/rudof/releases/download/vX.X.X/rudof_vX.X.X_amd64.deb
sudo dpkg -i rudof_vX.X.X_amd64.deb

Windows

The binary can be downloaded from https://github.com/rudof-project/rudof/releases.

Mac

The binary is available at: https://github.com/rudof-project/rudof/releases so you can download the corresponding binary to your machine.

The usual way to run/install a binary in Mac is to download it in a folder, add that folder to your PATH and activating the binary using:

chmod +x <binary_file>

After that, the processor may complain the first time about security and you have to agree to use it. Once you agree, it should work.

Compiling from source

Compiling from source

rudof has been implemented in Rust and is compiled using cargo. The command cargo run can be used to compile and run locally the code.

For example:

cargo run -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

Troubleshooting

If the example doesn’t work as expected, here are a few things you can try:

  • Use the --release flag to compile in release mode, which can resolve some build issues and improve performance:
cargo run --release -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm
  • Run the command inside WSL (Windows Subsystem for Linux). If you're using Windows, compiling the project in WSL can help resolve environment-related issues, as Rust tends to compile more reliably and efficiently in Linux-based systems.

Compiling from source and installing the binary (Debian)

Install cargo deb (only the first time)

cargo install cargo-deb

Create the .deb package by:

cargo deb

And run:

sudo dpkg -i target/debian/rudof_<VERSION>_amd64.deb

Alternative for Linux

To create a binary for Linux with debug information:

cargo build --target x86_64-unknown-linux-gnu

The binary will be created in: target/x86_64-unknown-linux-gnu/debug/rudof

If you want a release binary which is more optimized, you can run:

cargo build --target x86_64-unknown-linux-gnu

In this case, the binary will be target/x86_64-unknown-linux-gnu/release/rudof

Docker

The library is also published as a Docker image (angelip2303/rudof:latest).

Usage

Some examples

The folder examples contains several example files with ShEx schemas and RDF data.

Validate a simple RDF file with a ShEx schema using a ShapeMap

rudof validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

We maintain a Wiki page with some common Usage scenarios and How-to guides.

Debugging information

It is possible to change the debug level information with:

export RUST_LOG=info

where value can be info, debug or trace to show more information. It is also possible to have more control about the logs using more complex filters. For example, to show trace for the elements in crate shacl_validation, and supress any logs for crates hyper and reqwest (which can be quite verbose with traces), you can use:

export RUST_LOG=info,shacl_validation=trace,hyper=off,reqwest=off

In case you use nu_shell, you can use:

$env.RUST_LOG = 'info,shacl_validation=trace,hyper=off,reqwest=off'

Command line usage

RDF and Knowledge Graphs processing tool
Usage: rudof [OPTIONS] [COMMAND]
Commands:
mcp Export rudof as an MCP server
shapemap Show information about ShEx ShapeMaps
shex Show information about ShEx schemas
pgschema Show information about Property Graph Schemas
validate Validate RDF data using ShEx or SHACL
shex-validate Validate RDF using ShEx schemas
shacl-validate Validate RDF data using SHACL shapes
data Show information about RDF data
node Show information about a node in an RDF Graph
shacl Show information about SHACL shapes
dctap Arguments for the `dctap`command
convert Arguments for the `convert`command
compare Compare two shapes (which can be in different formats)
rdf-config Show information about rdf config
service Show information about SPARQL service
query Run SPARQL queries
generate Generate synthetic RDF data from ShEx or SHACL schemas
materialize Materialize an RDF graph from a ShEx schema and Map semantic-action state
pgschema-validate Validate Property Graph data using PGSchema
completion Generates a shell completion script for the specified shell
config Dump the effective configuration rudof is using as TOML
help Print this message or the help of the given subcommand(s)
Options:
-d, --debug... Increase logging verbosity
-h, --help Print help
-V, --version Print version

You can see the manual

Main modules

The repo is divided in the following modules:

  • rudof_iri defines simple IRIs.
  • srdf simple RDF model which will be used for validation.
  • prefixmap Prefix maps implementation.
  • shapemap ShapeMap implementation.
  • shex_ast defines the ShEx Abstract syntax
  • shex_compact contains the code required to handle ShEx compact syntax.
  • shex_validation contains the code required to validate RDF using ShEx.
  • shex_testsuite contains the code required to run the ShEx testsuite.
  • shacl_ast defines the SHACL core Abstract syntax.
  • shacl_validation contains the code required to validate RDF using SHACL.
  • dctap contains the code required to do handle DCTAP files.
  • shapes_converter contains the code required to do conversion between different shapes formalisms.

Publishing the crates

cargo workspaces publish

Worskpaces

The project is using cargo workspaces wihch can be installed with:

cargo install cargo-workspaces

Unit-testing

In order to test all the sub-projects

cargo test --all

Testing one specific subproject:

cargo test -p shex_validation

Using the ShEx test-suite

The ShEx testsuite is included in a git submodule. In order to obtain it, it is necessary to do:

git submodule update --init --recursive
cargo run -p shex_testsuite
Usage: shex_testsuite [OPTIONS]
Options:
-m, --manifest <Manifest FILE (.jsonld)>
Name of Manifest file [default: shex_testsuite/shexTest/validation/manifest.jsonld]
-c, --config <Config file>
[default: shex_testsuite/config.toml]
-x, --run_mode <MANIFEST_RUN_MODE>
[default: collect-errors] [possible values: collect-errors, fail-first-error]
-f, --manifest_mode <MANIFEST_MODE>
[possible values: schemas, validation, negative-syntax, negative-structure]
-p, --print_result_mode <PRINT_RESULT_MODE>
[default: basic] [possible values: basic, failed, passed, not-implemented, all]
-e, --entry <Entry names>
-t, --trait <Trait names>
-h, --help
Print help
-V, --version
Print version

Validation conformance tests for ShEx

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld 

If you want to see the failed tests, you can run:

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld -p failed

Schemas tests

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/schemas/manifest.jsonld -f schemas -p failed

Benchmarks

Performance benchmarks live in benchmarks/. They are not published to crates.io and are not executed in CI. Run them locally with Criterion.

License

Licensed under either of

at your option.

Contributors

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Local development

Precommit has been configured to run formatters and linters before each commit. It is recommended to use it to ensure that the code is formatted and linted correctly before pushing it to the repository.

In order to install it, you can run:

# Installs pre-commit it self
pip install pre-commit
# Installs the pre-commit hooks defined in .pre-commit-config.yaml
pre-commit install

Nix

If you have Nix with flakes enabled, the repository provides a ready-to-use development shell that includes all required dependencies.

Simply run the following command from the root of the repository:

nix develop

This drops you into a shell with everything pre-configured. No manual installation of Rust, cargo, or any other tool is needed.

You can also run a one-off command without entering the shell interactively:

nix develop --command cargo test

If you use direnv, add a .envrc file with use flake to activate the development environment automatically whenever you cd into the repository:

echo"use flake"> .envrc && direnv allow

About

RDF data shapes implementation in Rust

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

3,030 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rudof

Latest VersionPyPIrudofdependency statusCodeScene generalpre-commit

This repo contains an RDF and Knowledge Graphs processing tool implemented in Rust.

The implementation supports RDF and property graphs data, as well as ShEx, SHACL, DCTap, PGSchema, and conversions between different RDF data modeling formalisms.

The code can be used as a Rust library but it also contains a binary called rudof which can be used as an RDF playground.

We provide binaries for Linux, Windows, Mac and Docker (see releases), as well as Python bindings.

Features

rudof currently supports the following:

  • RDF and RDF 1.2 parsing, conversion and visualization.
  • SPARQL querying to RDF data and endpoints
  • Parsing SPARQL service description
  • ShEx
  • SHACL
  • DCTAP
  • Property graphs and Schemas for Property Graphs (PGSchemahttps://dl.acm.org/doi/10.1145/3589778)

Future features we are planning to add:

  • rdf-config
  • LinkML

Installation

Official releases

You can download a binary from the latest release page. There you will also find the compiled packages for the installation on your system using a package manager.

Published Debian packages

rudof is available as a Debian package for Debian-based distributions (like Ubuntu).

It is also possible to download the binary from https://github.com/rudof-project/rudof/releases and install the .deb package running the following commands after replacing X.X.X by the latest version:

wget https://github.com/rudof-project/rudof/releases/download/vX.X.X/rudof_vX.X.X_amd64.deb
sudo dpkg -i rudof_vX.X.X_amd64.deb

Windows

The binary can be downloaded from https://github.com/rudof-project/rudof/releases.

Mac

The binary is available at: https://github.com/rudof-project/rudof/releases so you can download the corresponding binary to your machine.

The usual way to run/install a binary in Mac is to download it in a folder, add that folder to your PATH and activating the binary using:

chmod +x <binary_file>

After that, the processor may complain the first time about security and you have to agree to use it. Once you agree, it should work.

Compiling from source

Compiling from source

rudof has been implemented in Rust and is compiled using cargo. The command cargo run can be used to compile and run locally the code.

For example:

cargo run -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

Troubleshooting

If the example doesn’t work as expected, here are a few things you can try:

  • Use the --release flag to compile in release mode, which can resolve some build issues and improve performance:
cargo run --release -- validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm
  • Run the command inside WSL (Windows Subsystem for Linux). If you're using Windows, compiling the project in WSL can help resolve environment-related issues, as Rust tends to compile more reliably and efficiently in Linux-based systems.

Compiling from source and installing the binary (Debian)

Install cargo deb (only the first time)

cargo install cargo-deb

Create the .deb package by:

cargo deb

And run:

sudo dpkg -i target/debian/rudof_<VERSION>_amd64.deb

Alternative for Linux

To create a binary for Linux with debug information:

cargo build --target x86_64-unknown-linux-gnu

The binary will be created in: target/x86_64-unknown-linux-gnu/debug/rudof

If you want a release binary which is more optimized, you can run:

cargo build --target x86_64-unknown-linux-gnu

In this case, the binary will be target/x86_64-unknown-linux-gnu/release/rudof

Docker

The library is also published as a Docker image (angelip2303/rudof:latest).

Usage

Some examples

The folder examples contains several example files with ShEx schemas and RDF data.

Validate a simple RDF file with a ShEx schema using a ShapeMap

rudof validate examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm

We maintain a Wiki page with some common Usage scenarios and How-to guides.

Debugging information

It is possible to change the debug level information with:

export RUST_LOG=info

where value can be info, debug or trace to show more information. It is also possible to have more control about the logs using more complex filters. For example, to show trace for the elements in crate shacl_validation, and supress any logs for crates hyper and reqwest (which can be quite verbose with traces), you can use:

export RUST_LOG=info,shacl_validation=trace,hyper=off,reqwest=off

In case you use nu_shell, you can use:

$env.RUST_LOG = 'info,shacl_validation=trace,hyper=off,reqwest=off'

Command line usage

RDF and Knowledge Graphs processing tool
Usage: rudof [OPTIONS] [COMMAND]
Commands:
mcp Export rudof as an MCP server
shapemap Show information about ShEx ShapeMaps
shex Show information about ShEx schemas
pgschema Show information about Property Graph Schemas
validate Validate RDF data using ShEx or SHACL
shex-validate Validate RDF using ShEx schemas
shacl-validate Validate RDF data using SHACL shapes
data Show information about RDF data
node Show information about a node in an RDF Graph
shacl Show information about SHACL shapes
dctap Arguments for the `dctap`command
convert Arguments for the `convert`command
compare Compare two shapes (which can be in different formats)
rdf-config Show information about rdf config
service Show information about SPARQL service
query Run SPARQL queries
generate Generate synthetic RDF data from ShEx or SHACL schemas
materialize Materialize an RDF graph from a ShEx schema and Map semantic-action state
pgschema-validate Validate Property Graph data using PGSchema
completion Generates a shell completion script for the specified shell
config Dump the effective configuration rudof is using as TOML
help Print this message or the help of the given subcommand(s)
Options:
-d, --debug... Increase logging verbosity
-h, --help Print help
-V, --version Print version

You can see the manual

Main modules

The repo is divided in the following modules:

  • rudof_iri defines simple IRIs.
  • srdf simple RDF model which will be used for validation.
  • prefixmap Prefix maps implementation.
  • shapemap ShapeMap implementation.
  • shex_ast defines the ShEx Abstract syntax
  • shex_compact contains the code required to handle ShEx compact syntax.
  • shex_validation contains the code required to validate RDF using ShEx.
  • shex_testsuite contains the code required to run the ShEx testsuite.
  • shacl_ast defines the SHACL core Abstract syntax.
  • shacl_validation contains the code required to validate RDF using SHACL.
  • dctap contains the code required to do handle DCTAP files.
  • shapes_converter contains the code required to do conversion between different shapes formalisms.

Publishing the crates

cargo workspaces publish

Worskpaces

The project is using cargo workspaces wihch can be installed with:

cargo install cargo-workspaces

Unit-testing

In order to test all the sub-projects

cargo test --all

Testing one specific subproject:

cargo test -p shex_validation

Using the ShEx test-suite

The ShEx testsuite is included in a git submodule. In order to obtain it, it is necessary to do:

git submodule update --init --recursive
cargo run -p shex_testsuite
Usage: shex_testsuite [OPTIONS]
Options:
-m, --manifest <Manifest FILE (.jsonld)>
Name of Manifest file [default: shex_testsuite/shexTest/validation/manifest.jsonld]
-c, --config <Config file>
[default: shex_testsuite/config.toml]
-x, --run_mode <MANIFEST_RUN_MODE>
[default: collect-errors] [possible values: collect-errors, fail-first-error]
-f, --manifest_mode <MANIFEST_MODE>
[possible values: schemas, validation, negative-syntax, negative-structure]
-p, --print_result_mode <PRINT_RESULT_MODE>
[default: basic] [possible values: basic, failed, passed, not-implemented, all]
-e, --entry <Entry names>
-t, --trait <Trait names>
-h, --help
Print help
-V, --version
Print version

Validation conformance tests for ShEx

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld 

If you want to see the failed tests, you can run:

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld -p failed

Schemas tests

cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/schemas/manifest.jsonld -f schemas -p failed

Benchmarks

Performance benchmarks live in benchmarks/. They are not published to crates.io and are not executed in CI. Run them locally with Criterion.

License

Licensed under either of

at your option.

Contributors

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Local development

Precommit has been configured to run formatters and linters before each commit. It is recommended to use it to ensure that the code is formatted and linted correctly before pushing it to the repository.

In order to install it, you can run:

# Installs pre-commit it self
pip install pre-commit
# Installs the pre-commit hooks defined in .pre-commit-config.yaml
pre-commit install

Nix

If you have Nix with flakes enabled, the repository provides a ready-to-use development shell that includes all required dependencies.

Simply run the following command from the root of the repository:

nix develop

This drops you into a shell with everything pre-configured. No manual installation of Rust, cargo, or any other tool is needed.

You can also run a one-off command without entering the shell interactively:

nix develop --command cargo test

If you use direnv, add a .envrc file with use flake to activate the development environment automatically whenever you cd into the repository:

echo"use flake"> .envrc && direnv allow

About

RDF data shapes implementation in Rust

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages