Select Git revision
StructuralData.cs
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
StructuralData.cs 3.49 KiB
using Coscine.Configuration;
using Coscine.Database.Models;
using Coscine.Metadata;
using VDS.RDF;
using VDS.RDF.Query;
namespace SQL2Linked
{
public abstract class StructuralData<S, T> where S : class where T : DatabaseModel<S>, new()
{
public T Model { get; init; }
public ConsulConfiguration Configuration { get; init; }
public RdfStoreConnector RdfStoreConnector { get; init; }
public static string Prefix { get; set; }
public readonly SparqlRemoteEndpoint QueryEndpoint;
public StructuralData()
{
Configuration = new ConsulConfiguration();
RdfStoreConnector = new RdfStoreConnector(Configuration.GetStringAndWait("coscine/local/virtuoso/additional/url"));
Model = new T();
Prefix = Configuration.GetStringAndWait("coscine/global/epic/prefix");
QueryEndpoint = new SparqlRemoteEndpoint(new Uri(Configuration.GetStringAndWait("coscine/local/virtuoso/additional/url")));
}
public abstract IEnumerable<IGraph> ConvertToLinkedData(IEnumerable<S> entries);
public void Migrate(bool dummyMode)
{
var spacer = new string('-', 35);
Console.WriteLine($"\n{spacer}\n{typeof(T).Name}\n{spacer}");
var graphs = ConvertToLinkedData(Model.GetAll());
if (!dummyMode)
{
StoreGraphs(graphs);
}
}
private void StoreGraphs(IEnumerable<IGraph> graphs)
{
foreach (var graph in graphs)
{
Console.WriteLine($" ({graph.BaseUri})");
var exists = RdfStoreConnector.HasGraph(graph.BaseUri);
if (exists)
{
Console.WriteLine($" - Graph {graph.BaseUri} exists");
// Clear the existing graph from the store
RdfStoreConnector.ClearGraph(graph.BaseUri);
Console.WriteLine($" - Cleared Graph {graph.BaseUri}");
}
// Add the new graph to the store
RdfStoreConnector.AddGraph(graph);
Console.WriteLine($" - Graph {graph.BaseUri} added successfully");
Console.WriteLine();
}
}
public void AssertToGraphUriNode(IGraph graph, string graphSubject, string graphPredicate, string graphObject)
{
graph.Assert(
new Triple(
graph.CreateUriNode(new Uri(graphSubject)),
graph.CreateUriNode(new Uri(graphPredicate)),
graph.CreateUriNode(new Uri(graphObject))
)
);
}
public void AssertToGraphLiteralNode(IGraph graph, string graphSubject, string graphPredicate, string graphObject, Uri? objectType = null)
{
graph.Assert(
new Triple(
graph.CreateUriNode(new Uri(graphSubject)),
graph.CreateUriNode(new Uri(graphPredicate)),
graph.CreateLiteralNode(graphObject, objectType)
)
);
}
public void AssertToGraphBlankAndUriNode(IGraph graph, IBlankNode graphSubject, string graphPredicate, string graphObject)
{
graph.Assert(
new Triple(
graphSubject,
graph.CreateUriNode(new Uri(graphPredicate)),
graph.CreateUriNode(new Uri(graphObject))
)
);
}
}
}