Files
tools/publish/src/rdf/conversion.rs
T
2026-07-07 22:06:39 -04:00

63 lines
1.6 KiB
Rust

use oxigraph::model::{NamedNode, Quad, Term};
use oxigraph::model::vocab::{rdf, xsd};
pub fn quad_into_term(quad: Quad) -> Term {
quad.object
}
pub fn term_to_named_node(term: &Term) -> Option<&NamedNode> {
if let Term::NamedNode(node) = term {
Some(node)
} else {
None
}
}
pub fn term_into_named_node(term: Term) -> Option<NamedNode> {
if let Term::NamedNode(node) = term {
Some(node)
} else {
None
}
}
pub fn term_into_string(term: Term) -> Option<String> {
term_as_str(&term).map(String::from)
}
pub fn term_as_str(term: &Term) -> Option<&str> {
if let Term::Literal(literal) = term {
match literal.datatype() {
xsd::STRING | xsd::NORMALIZED_STRING | rdf::LANG_STRING | rdf::DIR_LANG_STRING => {
Some(literal.value())
}
_ => None,
}
} else {
None
}
}
pub fn term_to_boolean(term: &Term) -> Option<bool> {
if let Term::Literal(literal) = term {
if literal.datatype() == xsd::BOOLEAN {
literal.value().parse().ok()
} else {
None
}
} else {
None
}
}
pub fn term_to_u64(term: &Term) -> Option<u64> {
if let Term::Literal(literal) = term &&
(literal.datatype() == xsd::NON_NEGATIVE_INTEGER || literal.datatype() == xsd::INTEGER) {
let value: u64 = literal.value().parse().expect("Failed to parse u64 from ontology. It ought to be a non-negative integer.");
Some(value)
} else { None }
}
pub fn term_into_u64(term: Term) -> Option<u64> {
term_to_u64(&term)
}