87个版本
0.2.1-alpha9 | 2022年11月7日 |
---|---|
0.2.0 | 2022年10月31日 |
0.1.53 | 2022年2月23日 |
0.1.49 | 2021年10月5日 |
0.1.6 | 2020年2月7日 |
#282 在 数据库实现
182 每月下载次数
1.5MB
2.5K SLoC
Reasonable
一个具有合理性能的OWL 2 RL推理器
性能
比较 reasonable、OWLRL 和 Allegro 的性能。评估包括将不同大小的 Brick 模型加载到各自的推理引擎中,并计时产生材料化所需的时间。reasonable
在此工作负载上比 Allegro 快约 7 倍,比 OWLRL 快 38 倍。
如何使用
Python
为了方便使用,我们使用 pyo3 项目为此项目生成 Python 3.x 绑定。安装这些绑定应该和 pip install reasonable
一样简单。
请参阅 brickschema
包以处理 Brick 模型。该包为此推理器和其他几个推理器提供了通用接口。
使用示例
import reasonable
# import triples from an rdflib Graph
import rdflib
g = rdflib.Graph()
g.parse("example_models/ontologies/Brick.n3", format="n3")
g.parse("example_models/small1.n3", format="n3")
r = reasonable.PyReasoner()
r.from_graph(g)
triples = r.reason()
print("from rdflib:", len(triples))
# import triples from files on disk
r = reasonable.PyReasoner()
r.load_file("example_models/ontologies/Brick.n3")
r.load_file("example_models/small1.n3")
triples = r.reason()
print("from files:", len(triples))
Rust
请参阅 Rust 文档
Rust 使用示例
use ::reasonable::owl::Reasoner;
use std::env;
use std::time::Instant;
use log::info;
fn main() {
env_logger::init();
let mut r = Reasoner::new();
env::args().skip(1).map(|filename| {
info!("Loading file {}", &filename);
r.load_file(&filename).unwrap()
}).count();
let reasoning_start = Instant::now();
info!("Starting reasoning");
r.reason();
info!("Reasoning completed in {:.02}sec", reasoning_start.elapsed().as_secs_f64());
r.dump_file("output.ttl").unwrap();
}
OWL 2 规则
使用此处定义的规则 定义。
待办事项:实现 RDF/RDFS 推理语义,如 此处 所述
注意:尚未实现产生异常的规则;等待确定处理这些错误的最佳方式。
等价语义
已完成 | 规则名称 | 备注 |
---|---|---|
否 | eq-ref |
实现非常低效;导致大量波动 |
是 | eq-sym |
|
是 | eq-trans |
|
是 | eq-rep-s |
|
是 | eq-rep-p |
|
是 | eq-rep-o |
|
否 | eq-diff1 |
抛出异常 |
否 | eq-diff2 |
抛出异常 |
否 | eq-diff3 |
抛出异常 |
属性公理语义
已完成 | 规则名称 | 备注 |
---|---|---|
否 | prp-ap |
|
是 | prp-dom |
|
是 | prp-rng |
|
是 | prp-fp |
|
是 | prp-ifp |
|
是 | prp-irp |
抛出异常 |
是 | prp-symp |
|
是 | prp-asyp |
抛出异常 |
是 | prp-trp |
|
是 | prp-spo1 |
|
否 | prp-spo2 |
|
是 | prp-eqp1 |
|
是 | prp-eqp2 |
|
是 | prp-pdw |
抛出异常 |
否 | prp-adp |
抛出异常 |
是 | prp-inv1 |
|
是 | prp-inv2 |
|
否 | prp-key |
|
否 | prp-npa1 |
抛出异常 |
否 | prp-npa2 |
抛出异常 |
类语义
已完成 | 规则名称 | 备注 |
---|---|---|
是 | cls-thing |
|
是 | cls-nothing1 |
|
是 | cls-nothing2 |
抛出异常 |
是 | cls-int1 |
|
是 | cls-int2 |
|
是 | cls-uni |
|
是 | cls-com |
抛出异常 |
是 | cls-svf1 |
|
是 | cls-svf2 |
|
是 | cls-avf |
|
是 | cls-hv1 |
|
是 | cls-hv2 |
|
否 | cls-maxc1 |
抛出异常 |
否 | cls-maxc2 |
|
否 | cls-maxqc1 |
抛出异常 |
否 | cls-maxqc2 |
抛出异常 |
否 | cls-maxqc3 |
|
否 | cls-maxqc4 |
|
否 | cls-oo |
类公理语义
已完成 | 规则名称 | 备注 |
---|---|---|
是 | cax-sco |
|
是 | cax-eqc1 |
|
是 | cax-eqc2 |
|
是 | cax-dw |
抛出异常 |
否 | cax-adc |
抛出异常 |
其他
- 目前没有数据类型语义
开发笔记
要发布 reasonable
的新版本,给提交标记版本(例如 v1.3.2
)并将标签推送到 GitHub。这将执行 publish
动作,构建并上传到 PyPi。
依赖
~10–23MB
~301K SLoC