Select Git revision
RoleStructuralData.cs

Hanna Führ authored and
Benedikt Heinrichs
committed
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
RoleStructuralData.cs 2.86 KiB
using Coscine.Database.DataModel;
using Coscine.Database.Models;
using VDS.RDF;
namespace SQL2Linked.Implementations
{
public class RoleStructuralData : StructuralData<Role, RoleModel>
{
public readonly string RoleUrlPrefix = "https://purl.org/coscine/roles";
public readonly Uri RdfType = new("http://www.w3.org/1999/02/22-rdf-syntax-ns#type");
public readonly Uri orgRole = new("http://www.w3.org/ns/org#Role");
public readonly Uri dctermsTitle = new("http://purl.org/dc/terms/title");
public override IEnumerable<IGraph> ConvertToLinkedData(IEnumerable<Role> entries)
{
var graphs = new List<IGraph>();
foreach (var entry in entries)
{
var roleGraphName = $"{RoleUrlPrefix}/{entry.Id}";
var graph = RdfStoreConnector.GetGraph(roleGraphName);
// check if a triple with a org:role already exists in the role graph
var getTriplesOrgRole = graph.GetTriplesWithObject(orgRole);
if (!getTriplesOrgRole.Any())
{
graph.Assert(
new Triple(
graph.CreateUriNode(new Uri(roleGraphName)),
graph.CreateUriNode(RdfType),
graph.CreateUriNode(orgRole)
)
);
Console.WriteLine($"For role '{entry.DisplayName}' will migrate triple '{graph.BaseUri}' a org:Role. ");
}
else
{
Console.WriteLine($"For role '{entry.DisplayName}' will NOT migrate triple '{graph.BaseUri}' a org:Role. ");
}
// check if a triple with dcterms:title '{entry.DisplayName}' already exists in the role graph
var getTriplesDctermsTitle = graph.GetTriplesWithPredicate(dctermsTitle);
if (!getTriplesDctermsTitle.Any())
{
graph.Assert(
new Triple(
graph.CreateUriNode(new Uri(roleGraphName)),
graph.CreateUriNode(dctermsTitle),
graph.CreateLiteralNode(entry.DisplayName)
)
);
Console.WriteLine($"For role '{entry.DisplayName}' will migrate triple '{graph.BaseUri}' dcterms:title '{entry.DisplayName}'. ");
}
else
{
Console.WriteLine($"For role '{entry.DisplayName}' will NOT migrate triple '{graph.BaseUri}' dcterms:title '{entry.DisplayName}'. ");
}
if (!getTriplesOrgRole.Any() || !getTriplesDctermsTitle.Any())
{
graphs.Add(graph);
}
}
return graphs;
}
}
}