This commit is contained in:
Alex Wied
2026-07-01 17:42:23 -04:00
parent 617c4465fb
commit 6b8f4ccb3d
9 changed files with 250 additions and 234 deletions
+12 -28
View File
@@ -2,38 +2,10 @@ use oxigraph::model::{NamedNode, Quad, Term};
use oxigraph::model::vocab::{rdf, xsd};
use oxilangtag::LanguageTag;
pub enum LanguageCondition {
ExactMatch(LanguageTag<String>),
RelaxedMatch(LanguageTag<String>),
Untagged,
}
pub fn quad_into_term(quad: Quad) -> Term {
quad.object
}
pub fn english() -> LanguageCondition {
LanguageCondition::RelaxedMatch(LanguageTag::parse("en".to_string()).unwrap())
}
pub fn language_matches(term: &Term, condition: &LanguageCondition) -> bool {
if let Term::Literal(literal) = term {
let tag = literal.language()
.map(LanguageTag::parse_and_normalize)
.and_then(Result::ok);
match (tag, condition) {
(Some(language), LanguageCondition::ExactMatch(expectation)) |
(Some(language), LanguageCondition::RelaxedMatch(expectation)) => language == *expectation,
(None, LanguageCondition::RelaxedMatch(_)) => true,
(None, LanguageCondition::Untagged) => true,
_ => false,
}
} else {
false
}
}
pub fn term_to_named_node(term: &Term) -> Option<&NamedNode> {
if let Term::NamedNode(node) = term {
Some(node)
@@ -59,6 +31,18 @@ pub fn term_as_str(term: &Term) -> Option<&str> {
}
}
/*pub fn term_to_tagged_string(term: &Term) -> Option<(String, Option<LanguageTag<String>>)> {
term_as_str(&term).and_then(|value| {
if let Term::Literal(literal) = term {
literal.language()
.map(|language| {
let tag = LanguageTag::parse(language.to_string()).ok();
(value.to_string(), tag)
})
} else { None }
})
}*/
pub fn term_to_boolean(term: &Term) -> Option<bool> {
if let Term::Literal(literal) = term {
if literal.datatype() == xsd::BOOLEAN {