47 lines
1.2 KiB
Rust
47 lines
1.2 KiB
Rust
use oxigraph::model::{NamedNode, Quad, Term};
|
|||
|
|
use oxigraph::model::vocab::{rdf, xsd};
|
||
|
|
|
||
|
|
fn quad_to_term(quad: &Quad) -> &Term {
|
||
|
|
&quad.object
|
||
|
|
}
|
||
|
|
|
||
|
|
fn term_to_named_node(term: &Term) -> Option<&NamedNode> {
|
||
|
|
if let Term::NamedNode(node) = term {
|
||
|
|
Some(node)
|
||
|
|
} else {
|
||
|
|
None
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
fn term_to_string(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
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
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
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
fn term_to_u64(term: &Term) -> Option<u64> {
|
||
|
|
if let Term::Literal(literal) = term &&
|
||
|
|
literal.datatype() == xsd::NON_NEGATIVE_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 }
|
||
|
|
}
|