.
This commit is contained in:
@@ -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 => {
|
||||
|
||||
Reference in New Issue
Block a user