2 个版本
0.1.12 | 2024年8月13日 |
---|---|
0.1.5 | 2024年8月12日 |
#1361 在 数据库接口
每月 247 次下载
440KB
11K SLoC
SHAPES-rs
本仓库包含一个在 Rust 中实现的 RDF 数据形状库。该实现支持 ShEx,SHACL,DCTap 以及不同 RDF 数据建模形式之间的转换。
代码可以作为 Rust 库使用,但也包含一个名为 rudof
的二进制程序,该程序可以用作 RDF 游乐场。
我们提供了 Linux、Windows、Mac 和 Docker 的二进制文件(见 发布),以及 Python 绑定。
安装
官方版本
您可以从 最新版本页面 下载二进制文件。在那里,您还可以找到用于在系统上使用包管理器安装的编译包。
Ubuntu
从 https://github.com/weso/shapes-rs/releases 下载二进制文件,并运行以下命令安装 .deb
包(将 X.X.X 替换为最新版本)
wget https://github.com/weso/shapes-rs/releases/download/X.X.X/rudof_vX.X.X_amd64.deb
sudo dpkg -i rudof_vX.X.X_amd64.deb
Windows
可以从 https://github.com/weso/shapes-rs/releases 下载二进制文件
Mac
二进制文件可在 https://github.com/weso/shapes-rs/releases 获取
从源代码编译
从源代码编译
shapes-rs
已用 Rust 实现,并使用 cargo 编译。可以使用命令 cargo run
编译和本地运行代码。
例如
cargo run -- validate --data examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm
从源代码编译并安装二进制文件(Debian)
安装 cargo deb
(仅第一次)
cargo install cargo-deb
通过以下方式创建 .deb
软件包:
cargo deb
然后运行
sudo dpkg -i target/debian/shapes-rs_0.0.11-1_amd64.deb
Docker
该库也以 Docker 镜像的形式发布。
使用方法
一些示例
文件夹 examples
包含了几个示例文件,这些文件包含 ShEx 方案和 RDF 数据。
使用 ShapeMap 验证简单的 RDF 文件与 ShEx 方案
rudof validate --data examples/user.ttl --schema examples/user.shex --shapemap examples/user.sm
我们维护了一个维基页面,其中包含一些常见的 使用场景和操作指南。
调试信息
可以通过以下方式更改调试级别信息:
export RUST_LOG=value
其中 value
可以是 debug
以显示更详细的信息,或 info
以显示基本信息。
命令行使用
RDF Data shapes implementation in Rust
Usage: rudof [OPTIONS] [COMMAND]
Commands:
shapemap Information about ShEx shapemaps
shex Information about ShEx schemas
validate RDF Validation using ShEx or SHACL
shex-validate RDF Validation using ShEx schemas
shacl-validate RDF Validation using SHACL shapes
data Information about RDF data
node Information about RDF nodes which are part of RDF Graphs
shacl Information about SHACL shapes
dctap Information and processing of DCTAP files
convert Conversion between different Data modeling technologies
help Print this message or the help of the given subcommand(s)
Options:
-d, --debug...
-h, --help Print help (see more with '--help')
-V, --version Print version
获取 ShEx 方案信息
$ rudof shex --help
Information about ShEx schemas
Usage: rudof shex [OPTIONS] --schema <Schema file name>
Options:
-s, --schema <Schema file name>
-f, --format <Schema format>
[default: shexc] [possible values: internal, shexc, shexj, turtle, ntriples, rdfxml, trig, n3, nquads]
-r, --result-format <Result schema format>
[default: shexj] [possible values: internal, shexc, shexj, turtle, ntriples, rdfxml, trig, n3, nquads]
-t, --show elapsed time
--statistics
-o, --output-file <Output file name, default = terminal>
-h, --help
Print help
获取 RDF 数据信息
$ rudof data --help
Information about RDF data
Usage: rudof data [OPTIONS] --data <RDF data path>
Options:
-d, --data <RDF data path>
-t, --data-format <RDF Data format>
[default: turtle] [possible values: turtle, ntriples, rdfxml, trig, n3, nquads]
-o, --output-file <Output file name, default = terminal>
-h, --help
Print help
获取 RDF 数据中的节点信息
此命令可以用于获取节点的邻域。
$ rudof node --help
Information about RDF nodes which are part of RDF Graphs
Usage: rudof node [OPTIONS] --node <NODE>
Options:
-n, --node <NODE>
-d, --data <RDF data path>
-t, --data-format <RDF Data format>
[default: turtle] [possible values: turtle, ntriples, rdfxml, trig, n3, nquads]
-e, --endpoint <Endpoint with RDF data>
-m, --show-node-mode <Show Node Mode>
[default: outgoing] [possible values: outgoing, incoming, both]
--show hyperlinks
-p, --predicates <PREDICATES>
-o, --output-file <Output file name, default = terminal>
-h, --help
Print help
例如,以下命令显示了 Wikidata 端点中节点 wd:Q80
的邻域。
rudof node -e wikidata -n wd:Q80
将 RDF 节点与某些数据进行验证
$ rudof validate --help
RDF Validation using ShEx or SHACL
Usage: rudof validate [OPTIONS] --schema <Schema file name>
Options:
-M, --mode <Validation mode>
[default: shex] [possible values: shex, shacl]
-s, --schema <Schema file name>
-f, --schema-format <Schema format>
[default: shexc] [possible values: internal, shexc, shexj, turtle, ntriples, rdfxml, trig, n3, nquads]
-m, --shapemap <ShapeMap file name>
--shapemap-format <ShapeMap format>
[default: compact] [possible values: compact, internal]
-n, --node <NODE>
-l, --shape-label <shape label (default = START)>
-d, --data <RDF data path>
-t, --data-format <RDF Data format>
[default: turtle] [possible values: turtle, ntriples, rdfxml, trig, n3, nquads]
-e, --endpoint <Endpoint with RDF data>
--max-steps <max steps to run>
[default: 100]
-o, --output-file <Output file name, default = terminal>
-h, --help
Print help
示例:假设有一个 ShEx 文件位于 examples/user.shex
,以及一个 RDF turtle 文件位于 examples/user.ttl
,我们可以请求验证节点 :a
与形状标签 :User
使用
rudof validate -s examples/user.shex -d examples/user.ttl -n :a -l :User
如果 examples/user.sm
中有一个 shapemap,我们可以使用以下方式验证:
rudof validate -s examples/user.shex -d examples/user.ttl -m examples/user.sm
将 RDF 节点与某些 SHACL Shape 进行验证
rudof shacl-validate --shapes examples/simple_shacl.ttl --data examples/simple.ttl
形状形式之间的转换
$ rudof convert --help
Conversion between different Data modeling technologies
Usage: rudof convert [OPTIONS] --input-mode <Input mode> --source-file <Source file name> --export-mode <Result mode>
Options:
-m, --input-mode <Input mode>
[possible values: shex, dctap]
-s, --source-file <Source file name>
-f, --format <Input file format>
[default: shexc] [possible values: csv, shexc, shexj, turtle]
-r, --result-format <Result format>
[default: default] [possible values: default, internal, json, shexc, shexj, turtle, plantuml, html, svg, png]
-o, --output-file <Output file name, default = terminal>
-t, --target-folder <Target folder>
-l, --shape-label <shape label (default = START)>
-x, --export-mode <Result mode>
[possible values: sparql, shex, uml, html]
-h, --help
Print help
主要模块
仓库分为以下模块
- iri_s 定义简单的 IRIs。
- srdf 简单的 RDF 模型,它将被用于验证。
- prefixmap 前缀映射实现。
- shapemap ShapeMap 实现。
- shex_ast 定义 ShEx 抽象语法。
- shex_compact 包含处理 ShEx 紧凑语法的代码。
- shex_validation 包含使用 ShEx 验证 RDF 所需的代码。
- shex_testsuite 包含运行 ShEx 测试套件的代码。
- shacl_ast 定义 SHACL 内核抽象语法。
- shacl_validation 包含使用 SHACL 验证 RDF 所需的代码。
- dctap 包含处理 DCTAP 文件的代码。
- shapes_converter 包含在不同形状形式之间进行转换所需的代码。
发布 crates
cargo workspaces publish
工作空间
该项目使用 cargo 工作空间,可以使用以下方式安装:
cargo install cargo-workspaces
单元测试
为了测试所有子项目
cargo test --all
测试特定子项目
cargo test -p shex_validation
使用 ShEx 测试套件
ShEx 测试套件包含在一个 git 子模块中。为了获取它,需要进行以下操作:
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.yml]
-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
ShEx 验证符合性测试
cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/validation/manifest.jsonld validation
方案测试
cargo run -p shex_testsuite -- -m shex_testsuite/shexTest/schemas/manifest.jsonld -f schemas -p failed
许可证
根据以下任一许可证许可:
- Apache许可证,版本2.0(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献者
贡献
除非您明确声明,否则任何有意提交以包含在根据Apache-2.0许可证定义的工作中的贡献,都应如上所述双授权,不附加任何额外条款或条件。
依赖项
~19–36MB
~604K SLoC