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 { if let Term::NamedNode(node) = term { Some(node) } else { None } } pub fn term_into_string(term: Term) -> Option { 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 { 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 { 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 { term_to_u64(&term) }