This commit is contained in:
Alex Wied
2026-07-12 13:52:13 -04:00
parent 66d21de8fe
commit 54f417c96d
4 changed files with 109 additions and 61 deletions
+9 -4
View File
@@ -1,7 +1,7 @@
use crate::error;
use crate::rdf::vocab::gl;
use oxigraph::model::vocab::{rdf, rdfs, xsd};
use oxigraph::model::{Dataset, LiteralRef, NamedNode, NamedNodeRef, NamedOrBlankNode, NamedOrBlankNodeRef, Term, TermRef, Triple, TripleRef};
use oxigraph::model::{Dataset, Graph, LiteralRef, NamedNode, NamedNodeRef, NamedOrBlankNode, NamedOrBlankNodeRef, Term, TermRef, Triple, TripleRef};
use oxigraph::sparql::{QueryResults, SparqlEvaluator};
use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet};
use std::fmt::Display;
@@ -327,12 +327,17 @@ WHERE {{
pub fn exclude_read_only(&self) -> impl Fn(TripleRef<'_>) -> bool + 'static {
let true_term = TermRef::Literal(LiteralRef::new_typed_literal("true", xsd::BOOLEAN));
let dataset = self.store
let read_only_graph = self.store
.quads_for_pattern(None, Some(gl::READ_ONLY), Some(true_term), None)
.filter_map(Result::ok)
.collect::<Dataset>();
.map(Triple::from)
.collect::<Graph>();
move |triple| {
dataset.quads_for_subject(triple.subject).count() == 0
if triple.predicate == rdf::TYPE && let TermRef::NamedNode(class) = triple.object {
read_only_graph.triples_for_subject(class).count() == 0
} else {
read_only_graph.triples_for_subject(triple.predicate).count() == 0
}
}
}