#语法 #解析器 #函数式 #OWL #解析器-序列化器 #owl2

horned-functional

用于 horned-owl 的 OWL2 函数式语法解析器

9 个不稳定版本 (3 个破坏性更新)

0.4.0 2022 年 2 月 15 日
0.3.3 2022 年 1 月 21 日
0.2.0 2021 年 12 月 12 日
0.1.2 2020 年 4 月 10 日
0.1.0 2019 年 7 月 24 日

#1022 in 科学

每月 36 次下载
用于 fastobo-owl

MITLGPL-3.0

130KB
2.5K SLoC

Rust 2K SLoC // 0.0% comments Pest 357 SLoC // 0.0% comments

horned-functional Star me

OWL2 函数式语法解析器,用于 horned-owl

Actions Codecov License Source Crate Documentation Changelog GitHub issues DOI

🗺️ 概述

此库为 horned-owl 晶格提供扩展,以便使用 OWL 函数式语法。它提供了一个使用 pest 编写的解析器和序列化器。

🔌 使用方法

horned-owlhorned-functional 的最新版本添加到您的 Cargo.toml 清单的 [dependencies] 部分

[dependencies]
horned-owl = "0.11.0"
horned-functional = "0.4.0"

🔍 解析器

要轻松读取包括前缀在内的整个 OWL 文档,请使用 horned_functional::to_string 函数

use horned_owl::ontology::set::SetOntology;

let s = std::fs::read_to_string("tests/data/ms.obo.ofn")
    .expect("failed to read OWL file");
let (ontology, prefixes) = horned_functional::from_str::<SetOntology, _>(&s)
    .expect("failed to parse OWL file");

所有 OWL 元素都可以使用 FromFunctional 特性以函数式语法进行解析,使用 from_ofn 方法从序列化字符串读取

use horned_owl::model::Axiom;
use horned_functional::FromFunctional;

let axiom = Axiom::from_ofn("Declaration(Class(<http://purl.obolibrary.org/obo/MS_1000031>))")
    .expect("failed to parse axiom");

如果序列化版本包含缩写的 IRIs,则可以将自定义前缀映射传递给 from_ofn_ctx 方法

use horned_owl::model::Axiom;
use horned_functional::FromFunctional;

let mut mapping = curie::PrefixMapping::default();
mapping.add_prefix("obo", "http://purl.obolibrary.org/obo/").ok();

let ctx = horned_functional::Context::from(&mapping);
let axiom = Axiom::from_ofn_ctx("Declaration(Class(obo:MS_1000031))", &ctx)
    .expect("failed to parse axiom");

✏️ 序列化器

要轻松序列化包括前缀在内的整个 OWL 文档,请使用 horned_functional::to_string 函数

let mut file = std::fs::File::open("tests/data/ms.owx")
    .map(std::io::BufReader::new)
    .expect("failed to open OWL file");
let (ontology, prefixes) = horned_owl::io::owx::reader::read(&mut file)
    .expect("failed to read OWL file");

// `horned_functional::to_string` needs an AxiomMappedOntology
let axiom_mapped = ontology.into();

// serialize using the same prefixes as the input OWL/XML file
let ofn = horned_functional::to_string(&axiom_mapped, &prefixes);

// serialize without abbreviated IRIs
let ofn = horned_functional::to_string(&axiom_mapped, None);

所有OWL元素都可以使用自定义的Display实现以功能语法显示,允许在format!println!write!宏中使用功能语法。format!println!write!。只需将AsFunctional特质添加到作用域中,并使用as_ofn方法来获取任何支持元素的显示类型。

use horned_owl::model::*;
use horned_functional::AsFunctional;

let build = Build::new();

// build a Declaration(ObjectProperty(<http://purl.obolibrary.org/obo/RO_0002175>))
let op = build.object_property("http://purl.obolibrary.org/obo/RO_0002175");
let axiom = Axiom::from(DeclareObjectProperty(op));

println!("Axiom: {}", axiom.as_ofn());

💭 反馈

⚠️ 问题跟踪器

发现了一个错误?有一个增强请求?如果您需要报告或询问某些内容,请访问项目的GitHub问题跟踪器。如果您正在提交一个错误,请尽可能多地提供有关问题的信息,并尝试在简单、易于复现的情况下重现相同的错误。

📋 更新日志

本项目遵循语义化版本控制,并提供更新日志,格式为Keep a Changelog

📜 许可证

此库在开源MIT许可证下提供。

📰 引用

该项目由Martin Larralde开发,作为BBOP团队劳伦斯伯克利国家实验室的硕士实习项目的一部分,在Chris Mungall的指导下进行。引用此项目如下:

Larralde M. Developing Python and Rust libraries to improve the ontology ecosystem [version 1; not peer reviewed]. F1000Research 2019, 8(ISCB Comm J):1500 (poster) (https://doi.org/10.7490/f1000research.1117405.1)

依赖

~7MB
~122K SLoC