Python SHACL 验证器
项目描述
pySHACL
SHACL的Python验证器。
这是一个纯Python模块,允许对RDF图进行验证,以符合SHACL图。该模块使用rdflib Python库来处理RDF,并依赖于OWL-RL Python模块来扩展数据图,基于OWL2 RL配置文件。
本模块的开发是为了遵守SHACL建议
Holger Knublauch;Dimitris Kontokostas. 形状约束语言(SHACL)。2017年7月20日。W3C建议。URL:https://www.w3.org/TR/shacl/ ED:https://w3c.github.io/data-shapes/shacl/
帮助与支持社区
SHACL社区有一个用于讨论SHACL及其规范相关主题的Discord服务器。
使用此邀请链接加入服务器:https://discord.gg/RTbGfJqdKB
有一个用于讨论此Python库的#pyshacl频道,您也可以请求一般性的SHACL帮助。
安装
使用PIP安装(使用Python3 pip安装程序 pip3
)
$ pip3 install pyshacl
或在python虚拟env中安装(以下示例命令行指令适用于基于Linux/Unix的操作系统)
$ python3 -m virtualenv --python=python3 --no-site-packages .venv
$ source ./.venv/bin/activate
$ pip3 install pyshacl
退出虚拟环境
$ deactivate
命令行使用
对于命令行使用:(以下示例命令行指令适用于基于Linux/Unix的操作系统)
$ pyshacl -s /path/to/shapesGraph.ttl -m -i rdfs -a -j -f human /path/to/dataGraph.ttl
其中
-s
是(可选)要使用的形状图的路径-e
是(可选)导入额外本体图的路径-i
是预推理选项-f
是验证报告的输出格式(《human》=可读的验证报告)-m
启用meta-shacl功能-a
启用SHACL高级功能-j
启用SHACL-JS功能(如果安装了pyhsacl[js]
)
系统退出代码是:0
= 数据图符合规范 1
= 数据图不符合规范 2
= 验证器遇到了RuntimeError(详细信息请检查stderr输出) 3
= 未实现;验证器遇到了尚未实现的SHACL功能。
完整的CLI使用选项
$ pyshacl -h
$ python3 -m pyshacl -h
usage: pyshacl [-h] [-s [SHACL]] [-e [ONT]] [-i {none,rdfs,owlrl,both}] [-m]
[-im] [-a] [-j] [-it] [--abort] [--allow-info] [-w]
[--max-depth [MAX_DEPTH]] [-d]
[-f {human,table,turtle,xml,json-ld,nt,n3}]
[-df {auto,turtle,xml,json-ld,nt,n3}]
[-sf {auto,turtle,xml,json-ld,nt,n3}]
[-ef {auto,turtle,xml,json-ld,nt,n3}] [-V] [-o [OUTPUT]]
[--server]
DataGraph
PySHACL 0.26.0 command line tool.
positional arguments:
DataGraph The file containing the Target Data Graph.
optional arguments:
--server Ignore all the rest of the options, start the HTTP Server.
-h, --help show this help message and exit
-s [SHACL], --shacl [SHACL]
A file containing the SHACL Shapes Graph.
-e [ONT], --ont-graph [ONT]
A file path or URL to a document containing extra
ontological information. RDFS and OWL definitions from this
are used to inoculate the DataGraph.
-i {none,rdfs,owlrl,both}, --inference {none,rdfs,owlrl,both}
Choose a type of inferencing to run against the Data
Graph before validating.
-m, --metashacl Validate the SHACL Shapes graph against the shacl-
shacl Shapes Graph before validating the Data Graph.
-im, --imports Allow import of sub-graphs defined in statements with
owl:imports.
-a, --advanced Enable features from the SHACL Advanced Features
specification.
-j, --js Enable features from the SHACL-JS Specification.
-it, --iterate-rules Run Shape's SHACL Rules iteratively until the
data_graph reaches a steady state.
--abort Abort on first invalid data.
--allow-info, --allow-infos
Shapes marked with severity of Info will not cause
result to be invalid.
-w, --allow-warning, --allow-warnings
Shapes marked with severity of Warning or Info will
not cause result to be invalid.
--max-depth [MAX_DEPTH]
The maximum number of SHACL shapes "deep" that the
validator can go before reaching an "endpoint"
constraint.
-d, --debug Output additional runtime messages.
-f {human,table,turtle,xml,json-ld,nt,n3}, --format {human,table,turtle,xml,json-ld,nt,n3}
Choose an output format. Default is "human".
-df {auto,turtle,xml,json-ld,nt,n3}, --data-file-format {auto,turtle,xml,json-ld,nt,n3}
Explicitly state the RDF File format of the input
DataGraph file. Default="auto".
-sf {auto,turtle,xml,json-ld,nt,n3}, --shacl-file-format {auto,turtle,xml,json-ld,nt,n3}
Explicitly state the RDF File format of the input
SHACL file. Default="auto".
-ef {auto,turtle,xml,json-ld,nt,n3}, --ont-file-format {auto,turtle,xml,json-ld,nt,n3}
Explicitly state the RDF File format of the extra
ontology file. Default="auto".
-V, --version Show PySHACL version and exit.
-o [OUTPUT], --output [OUTPUT]
Send output to a file (defaults to stdout).
--server Ignore all the rest of the options, start the HTTP
Server. Same as `pyshacl_server`.
Python模块使用
对于本模块的基本使用,您可以像这样调用pyshacl
模块的validate
函数
from pyshacl import validate
r = validate(data_graph,
shacl_graph=sg,
ont_graph=og,
inference='rdfs',
abort_on_first=False,
allow_infos=False,
allow_warnings=False,
meta_shacl=False,
advanced=False,
js=False,
debug=False)
conforms, results_graph, results_text = r
其中
data_graph
是rdflib的Graph
对象或要验证的图的文件路径shacl_graph
是rdflib的Graph
对象或包含要验证的SHACL形状的图的文件路径或Web URL,或者为None,如果SHACL形状包含在数据图中。ont_graph
是rdflib的Graph
对象或包含额外本体信息的图的文件路径或Web URL,或者为None,如果不需要。此处的RDFS和OWL定义用于感染数据图。inference
是一个Python字符串值,表示是否在验证之前执行OWL推理扩展data_graph
。选项是'rdfs'、'owlrl'、'both'或'none'。默认是'none'。abort_on_first
(可选)bool
值,表示程序在遇到第一个验证失败后是否应该终止,或者继续。默认是继续。allow_infos
(可选)bool
值,标记为Info严重性的形状不会导致结果无效。allow_warnings
(可选)bool
值,标记为Warning或Info严重性的形状不会导致结果无效。meta_shacl
(可选)bool
值,表示程序是否应该启用Meta-SHACL功能。默认是False。advanced
: (可选)bool
值,用于启用SHACL高级功能js
: (可选)bool
值,用于启用SHACL-JS功能(如果安装了pyshacl[js]
)debug
(可选)bool
值,用于指示程序是否应输出调试文本,包括未导致总体不符的违规。因此,当debug为True时,不要通过违规消息的缺失来判断合规性。默认值为False。
在validate
函数上可用的其他一些可选关键字变量
data_graph_format
:覆盖给定数据图源文件的格式检测。shacl_graph_format
:覆盖给定shacl图源文件的格式检测。ont_graph_format
:覆盖给定额外本体图源文件的格式检测。iterate_rules
:迭代SHACL规则,直到找到稳态(仅在高级模式下有效)。do_owl_imports
:启用功能,允许使用owl:imports
导入形状图和本体图中的子图。注意,您明确不能在目标数据图上使用此功能。serialize_report_graph
:将报告结果图转换为序列化表示形式(例如,'turtle')。check_dash_result
:将验证结果与给定的预期DASH测试套件结果进行比较。check_sht_result
:将验证结果与给定的预期SHT测试套件结果进行比较。
返回值
- 一个包含三个组件的
tuple
Python模块调用
您可以通过使用Python3可执行文件来获取命令行工具的等效功能
$ python3 -m pyshacl
集成OpenAPI-3.0兼容的HTTP REST服务
PySHACL现在具有一个内置的验证服务,通过OpenAPI3.0兼容的REST API公开。
由于需要额外的依赖项来运行,此功能是一个可选的额外功能。
您必须首先通过启用http
额外选项来安装PySHACL
$ pip3 install -U pyshacl[http]
安装后,您可以通过执行CLI入口点来启动服务
$ pyshacl --server
# or
$ pyshacl_server
# or
$ python3 -m pyshacl server
# or
$ docker run --rm -e PYSHACL_SERVER=TRUE -i -t docker.io/ashleysommer/pyshacl:latest
默认情况下,此服务将在本地地址127.0.0.1
上的端口8099
运行。
要查看服务的SwaggerUI文档,请导航到http://127.0.0.1:8099/docs/swagger
,对于ReDoc版本,请访问http://127.0.0.1:8099/docs/redoc
。
要查看OpenAPI3模式,请参阅http://127.0.0.1:8099/docs/openapi.json
配置HTTP REST服务
- 您可以通过传递环境变量
PYSHACL_SERVER=TRUE
强制PySHACL CLI以HTTP服务器模式启动。这在容器化服务中很有用,其中您将仅以此模式运行PySHACL。 PYSHACL_SERVER_LISTEN=1.2.3.4
监听不同的IP地址或主机名PYSHACL_SERVER_PORT=8080
监听给定的不同TCP端口PYSHACL_SERVER_HOSTNAME=example.org
当您在反向代理或容器化环境中托管服务器时,使用此选项,以便PySHACL服务器知道您的对外主机名是什么
错误
在某些情况下,pySHACL可以产生一个Validation Failure
。这是一个由SHACL规范定义的正式错误,并要求在SHACL图中的特定条件下生成。如果验证器产生一个Validation Failure
,则由validate()
函数返回的results_graph
变量将是ValidationFailure
的实例。查看该实例的message
属性以获取有关验证失败的更多信息。
验证器可以生成的其他错误
ShapeLoadError
:当SHACL图中的SHACL Shape处于无效状态且无法加载到验证引擎中时,将抛出此错误。ConstraintLoadError
:当SHACL约束组件处于无效状态且无法加载到验证引擎时抛出此错误。ReportableRuntimeError
:由于不同原因发生错误,应将原因反馈给验证器用户。RuntimeError
:验证器遇到了导致其抛出错误的情况,但原因并不影响用户。
与ValidationFailure
不同,这些错误不是通过validate()
函数作为结果返回的,而是由验证引擎抛出异常,必须在try ... except
块中捕获。在ShapeLoadError
和ConstraintLoadError
的情况下,请查看异常实例的str()
字符串表示形式,其中包含错误消息以及SHACL规范文档中相关部分的链接。
Windows CLI
Pyinstaller可以使用来创建具有与Linux/Mac CLI程序相同特性的Windows可执行文件。必要的.spec
文件已包含在pyshacl/pyshacl-cli.spec
中。pyshacl-cli.spec
PyInstaller规范文件为pySHACL命令行实用程序创建一个.exe
文件。请参阅上面的pySHACL命令行实用程序使用说明。
有关如何在Windows上安装PyInstaller的信息,请参阅PyInstaller安装指南。
一旦安装了pyinstaller,就可以使用pyinstaller生成pyshacl.exe
CLI文件,如下所示
$ cd src/pyshacl
$ pyinstaller pyshacl-cli.spec
这将在src/pyshacl
目录中的dist
目录中输出pyshacl.exe
。
现在,您可以通过pyshacl.exe
运行pySHACL命令行实用程序。请参阅上面的pySHACL命令行实用程序使用说明。
Docker
从Dockerhub拉取官方docker镜像:docker pull docker.io/ashleysommer/pyshacl:latest
或者使用docker build . -t pyshacl
从PySHACL存储库自行构建镜像。
现在您可以在容器中运行PySHACL;但您需要挂载数据以进行验证。例如,为了验证graph.ttl
与shacl.ttl
,运行
docker run --rm -i -t --mount type=bind,src=`pwd`,dst=/data pyshacl -s /data/shacl.ttl /data/graph.ttl
兼容性
PySHACL是Python3库。为获得最佳兼容性,请使用Python v3.7或更高版本。Python3 v3.6或更低版本不支持,并且此库在Python v2.7.x或更低版本上不工作。
PySHACL现在是一个PEP518 & PEP517项目,它使用pyproject.toml
和poetry
来管理依赖项、构建和安装。
要从PyPI使用pip安装时获得最佳兼容性,请升级到pip v18.1.0或更高版本。
- 如果您使用的是Ubuntu 16.04或18.04,则需要运行
sudo pip3 install --upgrade pip
以获取较新版本。
功能
功能矩阵保存在FEATURES文件中。
变更日志
综合变更日志保存在CHANGELOG文件中。
基准测试
此项目包含一个脚本来测量使用每种不同的推理选项对已推理的相同源图进行验证的性能差异。在您的计算机上运行它,以查看验证器为您操作的速度。
许可证
此存储库根据Apache License,版本2.0授权。有关详细信息,请参阅LICENSE契约。
贡献者
请参阅CONTRIBUTORS文件。
引用
DOI:10.5281/zenodo.4750840(适用于所有版本/最新版本)
联系方式
项目负责人:Nicholas Car 高级实验科学家 澳大利亚CSIRO陆地与水,环境信息组 布里斯班,昆士兰州,澳大利亚 nicholas.car@csiro.au http://orcid.org/0000-0002-8742-7730
首席开发者: Ashley Sommer 信息学软件工程师 澳大利亚联邦科学和工业研究组织(CSIRO)土地与水资源,环境信息学小组 布里斯班,昆士兰州,澳大利亚 Ashley.Sommer@csiro.au https://orcid.org/0000-0003-0590-0131
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码发行版
构建发行版
pyshacl-0.26.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 48d44f317cd9aad8e3fdb5df8aa5706fa92dc6b2746419698035e84a320fb89d |
|
MD5 | 161729cc44b4d7c8b302689d188665a2 |
|
BLAKE2b-256 | e3010c77a83e251753fda65b1b1126cbdfc201200ecd38d300f87281c86849a9 |
pyshacl-0.26.0-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a4bef4296d56305a30e0a97509e541ebe4f2cc2d5da73536d0541233e28f2d22 |
|
MD5 | a05d7fd72fa1d0896493b0c16ce478f9 |
|
BLAKE2b-256 | 7f72c63543a6d4a9c012c9d23dd684db5d30a7aa2ea01ff58e8518169d4f8a13 |