.
This commit is contained in:
+14
-9
@@ -3,14 +3,14 @@ use crate::navigator::Navigator;
|
||||
use crate::rdf::term_helper::{TermHelper, TermHelperMut};
|
||||
use crate::widget::iri_input::iri_input;
|
||||
use crate::widget::navigation_area::navigation_area;
|
||||
use gl_graph::CurieHelper;
|
||||
use gl_graph::{language, CurieHelper};
|
||||
use gl_search::{Schema, SearchIndex};
|
||||
use http::StatusCode;
|
||||
use iced::alignment::Horizontal;
|
||||
use iced::keyboard::{Event, key};
|
||||
use iced::widget::button::Style;
|
||||
use iced::widget::{
|
||||
button, center, column, combo_box, container, grid, mouse_area, opaque, operation, pick_list,
|
||||
button, center, column, combo_box, container, mouse_area, opaque, operation, pick_list,
|
||||
row, scrollable, space, stack, table, text, text_input, toggler,
|
||||
};
|
||||
use iced::window::Settings;
|
||||
@@ -23,10 +23,10 @@ use ldp::reqwest_middleware::{ClientBuilder, ClientWithMiddleware};
|
||||
use ldp::{RdfSource, RdfSourceUpdateResponse, ResourceRequestBuilder, SerializationOptions};
|
||||
use oxigraph::io::RdfFormat;
|
||||
use oxigraph::model::vocab::{rdf, rdfs};
|
||||
use oxigraph::model::{BaseDirection, Dataset, Graph, NamedNode, NamedOrBlankNode, NamedOrBlankNodeRef, Quad, Term, TermRef, Triple, TripleRef};
|
||||
use oxigraph::model::{BaseDirection, Graph, NamedNode, NamedOrBlankNode, NamedOrBlankNodeRef, Quad, Term, TermRef, Triple, TripleRef};
|
||||
use tracing::{debug, error, trace};
|
||||
use gl_graph::class::Class;
|
||||
use gl_graph::ontology::{Ontology, ReadOnlyEntity, ResourceDescription};
|
||||
use gl_graph::ontology::{ConnectedOntology, OntologyBuilder, ReadOnlyEntity, ResourceDescription};
|
||||
use gl_search::tantivy::schema::Value;
|
||||
use crate::tasks;
|
||||
|
||||
@@ -34,7 +34,7 @@ use crate::tasks;
|
||||
pub(crate) enum Message {
|
||||
None,
|
||||
ConnectToOntologyService(String),
|
||||
ConnectedToOntologyService(Ontology),
|
||||
ConnectedToOntologyService(ConnectedOntology),
|
||||
CacheDatatypes(HashMap<NamedNode, ResourceDescription>),
|
||||
CacheReadOnlyEntities(HashSet<ReadOnlyEntity>),
|
||||
PopulateCaches,
|
||||
@@ -106,7 +106,7 @@ struct SearchState {
|
||||
pub(crate) struct Publisher {
|
||||
http_client: ClientWithMiddleware,
|
||||
curie_helper: CurieHelper,
|
||||
ontology: Option<Ontology>,
|
||||
ontology: Option<ConnectedOntology>,
|
||||
read_only_entities: HashSet<ReadOnlyEntity>,
|
||||
abbreviated_datatypes: Vec<String>,
|
||||
resource_descriptions: HashMap<NamedNode, ResourceDescription>,
|
||||
@@ -192,7 +192,10 @@ impl Publisher {
|
||||
|
||||
match message {
|
||||
Message::ConnectToOntologyService(endpoint) => {
|
||||
task = tasks::connect_to_ontology_service(endpoint)
|
||||
let builder = OntologyBuilder::from_string(&endpoint, language::ENGLISH_OR_UNTAGGED.clone())
|
||||
.expect("Unable to parse endpoint of ontology service");
|
||||
|
||||
task = tasks::connect_to_ontology_service(builder)
|
||||
.chain(Task::done(Message::PopulateCaches));
|
||||
}
|
||||
Message::ConnectedToOntologyService(ontology) => {
|
||||
@@ -217,8 +220,10 @@ impl Publisher {
|
||||
self.read_only_entities = entities;
|
||||
}
|
||||
Message::LookupResourceDescription(node) => {
|
||||
if let Some(ontology) = &mut self.ontology {
|
||||
task = tasks::lookup_resource_description(ontology.clone(), node)
|
||||
if !self.resource_descriptions.contains_key(&node) {
|
||||
if let Some(ontology) = &mut self.ontology {
|
||||
task = tasks::lookup_resource_description(ontology.clone(), node)
|
||||
}
|
||||
}
|
||||
}
|
||||
Message::CacheResourceDescription(node, description) => {
|
||||
|
||||
+26
-31
@@ -26,7 +26,8 @@ use tracing_subscriber::util::SubscriberInitExt;
|
||||
use tracing_subscriber::{EnvFilter, fmt};
|
||||
use url::Url;
|
||||
use gl_graph::indexer::Indexer;
|
||||
use gl_graph::{language, CurieHelper};
|
||||
use gl_graph::{language, CurieHelper, vocab};
|
||||
use gl_graph::ontology::OntologyBuilder;
|
||||
use gl_inference::proto::ontology_client::OntologyClient;
|
||||
use gl_inference::proto::OntologyQueryRequest;
|
||||
|
||||
@@ -66,7 +67,11 @@ fn main() -> color_eyre::Result<()> {
|
||||
.build()?;
|
||||
|
||||
runtime.block_on(async {
|
||||
let mut client = OntologyClient::connect("http://[::1]:3000").await.unwrap();
|
||||
let mut client = OntologyClient::connect("http://[::1]:3000")
|
||||
.await
|
||||
.unwrap()
|
||||
.max_decoding_message_size(1024 * 1024 * 1024);
|
||||
|
||||
let response = client.query(request).await.unwrap();
|
||||
println!("{}", response.get_ref().results);
|
||||
});
|
||||
@@ -103,8 +108,15 @@ fn main() -> color_eyre::Result<()> {
|
||||
let curie_helper = CurieHelper::new(gl_graph::PREFIXES.clone());
|
||||
let indexer = Indexer::new(language::ENGLISH_OR_UNTAGGED.clone(), &curie_helper);
|
||||
|
||||
let mut client = OntologyClient::connect("http://[::1]:3000").await?;
|
||||
let documents = indexer.ontology(&mut client).await?;
|
||||
let mut client = OntologyBuilder::from_string("http://[::1]:3000", language::ENGLISH_OR_UNTAGGED.clone())?
|
||||
.connect()
|
||||
.await?;
|
||||
let resource_descriptions = client.resource_descriptions_from_classes([
|
||||
vocab::rdf::PROPERTY,
|
||||
vocab::rdfs::CLASS,
|
||||
vocab::skos::CONCEPT,
|
||||
]).await?;
|
||||
let documents = indexer.ontology(resource_descriptions);
|
||||
debug_span!("Index Ontology", documents = field::Empty).in_scope(|| {
|
||||
for document in documents {
|
||||
writer.add_document(document).unwrap();
|
||||
@@ -122,13 +134,16 @@ fn main() -> color_eyre::Result<()> {
|
||||
.build();
|
||||
|
||||
let starting_url = Url::parse("http://fedora.quill.lan/rest/")?;
|
||||
let mut dataset = Dataset::new();
|
||||
let mut graph = Graph::new();
|
||||
let mut traversal = Traverse::new(http_client, starting_url, None);
|
||||
let mut rdf_source_count = 0usize;
|
||||
while let Some(result) = traversal.next().await {
|
||||
match result {
|
||||
Ok(rdf_source) => {
|
||||
dataset.extend(rdf_source.dataset());
|
||||
let triples = rdf_source.dataset()
|
||||
.iter()
|
||||
.map(|quad| TripleRef::from(quad));
|
||||
graph.extend(triples);
|
||||
rdf_source_count += 1;
|
||||
},
|
||||
Err(err) => error!(?err),
|
||||
@@ -140,32 +155,12 @@ fn main() -> color_eyre::Result<()> {
|
||||
let curie_helper = CurieHelper::new(gl_graph::PREFIXES.clone());
|
||||
let indexer = Indexer::new(language::ENGLISH_OR_UNTAGGED.clone(), &curie_helper);
|
||||
|
||||
let mut client = OntologyClient::connect("http://[::1]:3000").await?;
|
||||
let mut request = OntologyQueryRequest::default();
|
||||
let mut client = OntologyBuilder::from_string("http://[::1]:3000", language::ENGLISH_OR_UNTAGGED.clone())?
|
||||
.connect()
|
||||
.await?;
|
||||
|
||||
let mut output_buffer = Vec::new();
|
||||
let mut serializer = RdfSerializer::from_format(RdfFormat::Turtle)
|
||||
.for_writer(output_buffer);
|
||||
for quad in &dataset {
|
||||
serializer.serialize_triple(TripleRef::from(quad))?;
|
||||
}
|
||||
output_buffer = serializer.finish()?;
|
||||
let turtle = String::from_utf8_lossy(&output_buffer).to_string();
|
||||
|
||||
request.sparql_query = None;
|
||||
request.turtle = Some(turtle);
|
||||
request.prefixes = HashMap::new();
|
||||
request.base = None;
|
||||
request.inferences_only = false;
|
||||
|
||||
let response = client.query(request).await?;
|
||||
let graph_with_inferences = RdfParser::from_format(RdfFormat::Turtle)
|
||||
.for_slice(&response.get_ref().results)
|
||||
.filter_map(Result::ok)
|
||||
.map(Triple::from)
|
||||
.collect::<Graph>();
|
||||
|
||||
for document in indexer.graph(&graph_with_inferences)? {
|
||||
let graph_with_inferences = client.run_inference(&graph).await?;
|
||||
for document in indexer.graph(&graph_with_inferences) {
|
||||
writer.add_document(document)?;
|
||||
}
|
||||
|
||||
|
||||
+13
-15
@@ -1,22 +1,20 @@
|
||||
use iced::Task;
|
||||
use oxigraph::model::{Graph, NamedNode};
|
||||
use gl_graph::language;
|
||||
use gl_graph::ontology::Ontology;
|
||||
use gl_graph::ontology::{ConnectedOntology, OntologyBuilder};
|
||||
use crate::app::Message;
|
||||
|
||||
pub(crate) fn connect_to_ontology_service(endpoint: String) -> Task<Message> {
|
||||
Task::future(Ontology::new(endpoint, (&*language::ENGLISH_OR_UNTAGGED).clone()))
|
||||
.then(|result| {
|
||||
match result {
|
||||
Ok(ontology) => Task::done(Message::ConnectedToOntologyService(ontology)),
|
||||
Err(err) => Task::done(Message::ShowError(err.to_string()))
|
||||
}
|
||||
})
|
||||
pub(crate) fn connect_to_ontology_service(builder: OntologyBuilder) -> Task<Message> {
|
||||
Task::perform(builder.connect(), |result| {
|
||||
match result {
|
||||
Ok(ontology) => Message::ConnectedToOntologyService(ontology),
|
||||
Err(err) => Message::ShowError(err.to_string())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
pub(crate) fn lookup_resource_description(mut ontology: Ontology, subject: NamedNode) -> Task<Message> {
|
||||
pub(crate) fn lookup_resource_description(mut ontology: ConnectedOntology, subject: NamedNode) -> Task<Message> {
|
||||
let subject_clone = subject.clone();
|
||||
Task::perform(async move { ontology.resource_description(subject_clone).await }, |result| {
|
||||
Task::perform(async move { ontology.resource_description_from_subject(subject_clone).await }, |result| {
|
||||
match result {
|
||||
Ok(description) => Message::CacheResourceDescription(subject, description),
|
||||
Err(err) => Message::ShowError(err.to_string()),
|
||||
@@ -24,7 +22,7 @@ pub(crate) fn lookup_resource_description(mut ontology: Ontology, subject: Named
|
||||
})
|
||||
}
|
||||
|
||||
pub(crate) fn list_datatypes(mut ontology: Ontology) -> Task<Message> {
|
||||
pub(crate) fn list_datatypes(mut ontology: ConnectedOntology) -> Task<Message> {
|
||||
Task::perform(async move { ontology.datatypes().await }, |result| {
|
||||
match result {
|
||||
Ok(datatypes) => Message::CacheDatatypes(datatypes),
|
||||
@@ -33,7 +31,7 @@ pub(crate) fn list_datatypes(mut ontology: Ontology) -> Task<Message> {
|
||||
})
|
||||
}
|
||||
|
||||
pub(crate) fn list_read_only_entities(mut ontology: Ontology) -> Task<Message> {
|
||||
pub(crate) fn list_read_only_entities(mut ontology: ConnectedOntology) -> Task<Message> {
|
||||
Task::perform(async move { ontology.list_read_only().await }, |result| {
|
||||
match result {
|
||||
Ok(entities) => Message::CacheReadOnlyEntities(entities),
|
||||
@@ -42,7 +40,7 @@ pub(crate) fn list_read_only_entities(mut ontology: Ontology) -> Task<Message> {
|
||||
})
|
||||
}
|
||||
|
||||
pub(crate) fn run_inference(mut ontology: Ontology, graph: Graph) -> Task<Message> {
|
||||
pub(crate) fn run_inference(mut ontology: ConnectedOntology, graph: Graph) -> Task<Message> {
|
||||
Task::perform(async move { ontology.run_inference(&graph).await }, |result| {
|
||||
match result {
|
||||
Ok(inferences) => Message::SetInferredTriples(inferences),
|
||||
|
||||
Reference in New Issue
Block a user