1 个不稳定版本
0.1.0 | 2022年2月23日 |
---|
#844 in 科学
31KB
507 行
horned-visit

具有可重载实现的 horned-owl
访问者特性。
🗺️ 概述
此库为 horned-owl
对象模型提供访问者特性,可用于轻松实现查询或编辑本体算法。
🔌 使用方法
将 horned-owl
和 horned-visit
的最新版本添加到您的 Cargo.toml
清单文件中的 [dependencies]
部分
[dependencies]
horned-owl = "0.11.0"
horned-visit = "0.1.0"
然后使用 horned_visit::Visit
或 horned_visit::VisitMut
特性来实现算法。`horned_visit::visit` 和 `horned_visit::visit_mut` 模块包含默认方法实现。
💡 示例
OWL2 不要求声明所有实体(见 规范),但根据惯例可能需要这样做以帮助捕获错误。以下是如何使用 horned-visit
实现一个算法的示例,确保在本体文档中声明了所有引用 OWL2 类的 IRI
extern crate horned_owl;
extern crate horned_visit;
use std::collections::HashSet;
use std::fs::File;
use std::io::BufReader;
use horned_owl::model::*;
use horned_visit::Visit;
#[derive(Default, Debug)]
struct ClassDeclarationChecker<'ast> {
declared: HashSet<&'ast IRI>,
used: HashSet<&'ast IRI>
}
impl<'ast> Visit<'ast> for ClassDeclarationChecker<'ast> {
fn visit_declare_class(&mut self, declare_class: &'ast DeclareClass) {
self.declared.insert(&declare_class.0.0);
horned_visit::visit::visit_declare_class(self, declare_class);
}
fn visit_class(&mut self, class: &'ast Class) {
self.used.insert(&class.0);
}
}
pub fn classes_well_declared(ontology: &horned_owl::ontology::set::SetOntology) -> bool {
let mut checker = ClassDeclarationChecker::default();
ontology.iter().for_each(|aa| checker.visit_annotated_axiom(aa));
checker.used.is_subset(&checker.declared)
}
let mut f = File::open("tests/data/bfo.owl").map(BufReader::new).unwrap();
let ontology = horned_owl::io::rdf::reader::read(&mut f).unwrap().0.into();
assert!(classes_well_declared(&ontology));
💭 反馈
⚠️ 问题跟踪器
发现了一个错误?有增强请求吗?如果您需要报告或询问,请访问项目的 GitHub 问题跟踪器。如果您正在填写错误报告,请尽可能提供有关问题的信息,并尝试在简单、易于复现的情况下重现相同的错误。
📋 更新日志
此项目遵循 语义版本控制 并提供 更新日志,格式为 Keep a Changelog。
📜 许可证
此库根据开源 MIT 许可证 提供。
本项目由Martin Larralde在欧洲分子生物学实验室的Zeller团队的博士课题期间开发。
依赖项
约6MB
约105K SLoC