This commit is contained in:
Alex Wied
2026-06-30 19:25:15 -04:00
parent 5cea8e8307
commit 2a6e9432d9
21 changed files with 1039 additions and 235 deletions
+36 -4
View File
@@ -1,9 +1,37 @@
use oxigraph::model::{NamedNode, Quad, Term};
use oxigraph::model::vocab::{rdf, xsd};
use tracing::info;
use oxilangtag::LanguageTag;
pub fn quad_to_term(quad: &Quad) -> &Term {
&quad.object
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> {
@@ -14,7 +42,11 @@ pub fn term_to_named_node(term: &Term) -> Option<&NamedNode> {
}
}
pub fn term_to_string(term: &Term) -> Option<&str> {
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 => {