Skip to content
Snippets Groups Projects
Commit 8af130f1 authored by Benedikt Heinrichs's avatar Benedikt Heinrichs
Browse files

Adapt the User Graph Creation Solution

parent e2401853
No related branches found
No related tags found
1 merge request!3Fix: Migrate user structural data to linked data
Pipeline #739415 skipped
......@@ -2,54 +2,50 @@
using Coscine.Database.Models;
using Coscine.Metadata;
using VDS.RDF;
using VDS.RDF.Query;
namespace SQL2Linked.Implementations
{
public class UserStructuralData : StructuralData<User, UserModel>
{
public readonly string UserUrlPrefix = "https://purl.org/coscine/users";
public readonly Uri FoafPerson = new Uri("http://xmlns.com/foaf/0.1/Person");
public readonly Uri RdfType = new("http://www.w3.org/1999/02/22-rdf-syntax-ns#type");
public readonly Uri FoafPerson = new("http://xmlns.com/foaf/0.1/Person");
public override IEnumerable<IGraph> ConvertToLinkedData(IEnumerable<User> entries)
{
var graphs = new List<IGraph>();
foreach (User entry in entries)
foreach (var entry in entries)
{
string userGraphName = $"{UserUrlPrefix}/{entry.Id}";
IGraph graph = RdfStoreConnector.GetGraph(userGraphName);
var userGraphName = $"{UserUrlPrefix}/{entry.Id}";
var graph = RdfStoreConnector.GetGraph(userGraphName);
// check if a triple with a foaf:Person already exists in the user graph
var getTriples = graph.GetTriplesWithObject(FoafPerson);
if (getTriples.Count() == 0)
if (!getTriples.Any())
{
// check if a user graph already exists
bool exists = RdfStoreConnector.HasGraph(userGraphName);
var exists = RdfStoreConnector.HasGraph(userGraphName);
if (!exists)
{
RdfStoreConnector.CreateNamedGraph(userGraphName);
}
// extend graph by triple https://purl.org/coscine/users/{userId} a foaf:Person
var commandString = new SparqlParameterizedString
{
CommandText = @"INSERT
{
GRAPH @userGraphName
{
[
a foaf:Person ;
]
}
}"
};
graph.Assert(
new Triple(
graph.CreateBlankNode(),
graph.CreateUriNode(RdfType),
graph.CreateUriNode(FoafPerson)
)
);
commandString.Namespaces.AddNamespace("foaf", FoafPrefixUrl);
commandString.SetUri("userGraphName", new Uri(userGraphName));
QueryEndpoint.QueryRaw(commandString.ToString());
Console.WriteLine($"Will migrate user '{entry.DisplayName}' with id '{entry.Id}'.");
}
else
{
Console.WriteLine($"Will NOT migrate user '{entry.DisplayName}' with id '{entry.Id}'.");
}
graphs.Add(graph);
}
......
......@@ -2,7 +2,6 @@
using Coscine.Database.Models;
using Coscine.Metadata;
using VDS.RDF;
using VDS.RDF.Query;
namespace SQL2Linked
{
......@@ -11,15 +10,12 @@ namespace SQL2Linked
public T Model { get; init; }
public ConsulConfiguration Configuration { get; init; }
public RdfStoreConnector RdfStoreConnector { get; init; }
public readonly SparqlRemoteEndpoint QueryEndpoint;
public readonly Uri FoafPrefixUrl = new Uri("http://xmlns.com/foaf/0.1/");
public StructuralData()
{
Configuration = new ConsulConfiguration();
RdfStoreConnector = new RdfStoreConnector(Configuration.GetStringAndWait("coscine/local/virtuoso/additional/url"));
Model = new T();
QueryEndpoint = new SparqlRemoteEndpoint(new Uri(string.Format("http://localhost:8890/sparql")));
}
public abstract IEnumerable<IGraph> ConvertToLinkedData(IEnumerable<S> entries);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment