From 3da7fd6c6a1440566c414fa55185c45660255c6c Mon Sep 17 00:00:00 2001
From: Hanna Fuehr <fuehr@itc.rwth-aachen.de>
Date: Wed, 6 Jul 2022 11:24:57 +0200
Subject: [PATCH] Update: Fixes in user and resource type structural data
 migration (coscine/issues#2083)

---
 .../ResourceTypeStructuralData.cs             | 35 +++++++++++++++----
 .../Implementations/UserStructuralData.cs     |  2 +-
 2 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/src/SQL2Linked/Implementations/ResourceTypeStructuralData.cs b/src/SQL2Linked/Implementations/ResourceTypeStructuralData.cs
index fe455a9..b36ec5e 100644
--- a/src/SQL2Linked/Implementations/ResourceTypeStructuralData.cs
+++ b/src/SQL2Linked/Implementations/ResourceTypeStructuralData.cs
@@ -9,6 +9,7 @@ namespace SQL2Linked.Implementations
         public readonly string ResourceTypeUrlPrefix = "https://purl.org/coscine/resourcetype";
         public readonly Uri RdfType = new("http://www.w3.org/1999/02/22-rdf-syntax-ns#type");
         public readonly Uri DcatDataService = new ("http://www.w3.org/ns/dcat#DataService");
+        public readonly Uri dctermsTitle = new("http://purl.org/dc/terms/title");
 
         public override IEnumerable<IGraph> ConvertToLinkedData(IEnumerable<ResourceType> entries)
         {
@@ -21,25 +22,47 @@ namespace SQL2Linked.Implementations
                 var graph = RdfStoreConnector.GetGraph(resourceTypeGraphName);
 
                 // check if a triple with a dcat:DataService already exists in the resourcetype graph
-                var getTriples = graph.GetTriplesWithObject(DcatDataService);
+                var getTriplesDcatDataService = graph.GetTriplesWithObject(DcatDataService);
 
-                if (!getTriples.Any())
+                if (!getTriplesDcatDataService.Any())
                 {
                     graph.Assert(
                         new Triple(
-                            graph.CreateBlankNode(),
+                            graph.CreateUriNode(new Uri(resourceTypeGraphName)),
                             graph.CreateUriNode(RdfType),
                             graph.CreateUriNode(DcatDataService)
                         )
                     );
 
-                    graphs.Add(graph);
+                    Console.WriteLine($"For resource type '{entry.DisplayName}' will migrate triple '{graph.BaseUri}' a dcat:DataService. ");
+                }
+                else
+                {
+                    Console.WriteLine($"For resource type '{entry.DisplayName}' will NOT migrate triple '{graph.BaseUri}' a dcat:DataService. ");
+                }
+
+                // check if a triple with dcterms:title '{entry.DisplayName}' already exists in the role graph
+                var getTriplesDctermsTitle = graph.GetTriplesWithPredicate(dctermsTitle);
 
-                    Console.WriteLine($"Will migrate resource type '{entry.DisplayName}' with id '{entry.Id}'.");
+                if (!getTriplesDctermsTitle.Any())
+                {
+                    graph.Assert(
+                        new Triple(
+                            graph.CreateUriNode(new Uri(resourceTypeGraphName)),
+                            graph.CreateUriNode(dctermsTitle),
+                            graph.CreateLiteralNode(entry.DisplayName)
+                        )
+                    );
+
+                    Console.WriteLine($"For resource type '{entry.DisplayName}' will migrate triple '{graph.BaseUri}' dcterms:title '{entry.DisplayName}'. ");
                 }
                 else
                 {
-                    Console.WriteLine($"Will NOT migrate resource type '{entry.DisplayName}' with id '{entry.Id}'.");
+                    Console.WriteLine($"For resource type '{entry.DisplayName}' will NOT migrate triple '{graph.BaseUri}' dcterms:title '{entry.DisplayName}'. ");
+                }
+                if (!getTriplesDcatDataService.Any() || !getTriplesDctermsTitle.Any())
+                {
+                    graphs.Add(graph);
                 }
             }
             return graphs;
diff --git a/src/SQL2Linked/Implementations/UserStructuralData.cs b/src/SQL2Linked/Implementations/UserStructuralData.cs
index 14abb64..3c2d2b3 100644
--- a/src/SQL2Linked/Implementations/UserStructuralData.cs
+++ b/src/SQL2Linked/Implementations/UserStructuralData.cs
@@ -27,7 +27,7 @@ namespace SQL2Linked.Implementations
                 {
                     graph.Assert(
                         new Triple(
-                            graph.CreateBlankNode(),
+                            graph.CreateLiteralNode(userGraphName),
                             graph.CreateUriNode(RdfType),
                             graph.CreateUriNode(FoafPerson)
                         )
-- 
GitLab