From cdea641e19df6a4c547481600ccfc63044c807cc Mon Sep 17 00:00:00 2001
From: Hanna Fuehr <fuehr@itc.rwth-aachen.de>
Date: Tue, 5 Jul 2022 09:39:20 +0200
Subject: [PATCH] Update: Migrate resourceType structured data to linked data
 (coscine/issues#2083)

---
 .../ResourceTypeStructuralData.cs             | 46 ++++++++++++++++++-
 1 file changed, 44 insertions(+), 2 deletions(-)

diff --git a/src/SQL2Linked/Implementations/ResourceTypeStructuralData.cs b/src/SQL2Linked/Implementations/ResourceTypeStructuralData.cs
index 766787f..007e158 100644
--- a/src/SQL2Linked/Implementations/ResourceTypeStructuralData.cs
+++ b/src/SQL2Linked/Implementations/ResourceTypeStructuralData.cs
@@ -6,10 +6,52 @@ namespace SQL2Linked.Implementations
 {
     public class ResourceTypeStructuralData : StructuralData<ResourceType, ResourceTypeModel>
     {
+        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 override IEnumerable<IGraph> ConvertToLinkedData(IEnumerable<ResourceType> entries)
         {
-            // ToDo: Implement
-            throw new NotImplementedException();
+       
+            var graphs = new List<IGraph>();
+
+            foreach (var entry in entries)
+            {
+                var resourceTypeGraphName = $"{ResourceTypeUrlPrefix}/{entry.Id}";
+                var graph = RdfStoreConnector.GetGraph(resourceTypeGraphName);
+
+                // check if a triple with a dcat:DataService already exists in the resourcetype graph
+                var getTriples = graph.GetTriplesWithObject(DcatDataService);
+
+                if (!getTriples.Any())
+                {
+                    // check if a resourcetype graph already exists
+                    var exists = RdfStoreConnector.HasGraph(resourceTypeGraphName);
+
+                    if (!exists)
+                    {
+                        RdfStoreConnector.CreateNamedGraph(resourceTypeGraphName);
+                    }
+
+                    graph.Assert(
+                        new Triple(
+                            graph.CreateBlankNode(),
+                            graph.CreateUriNode(RdfType),
+                            graph.CreateUriNode(DcatDataService)
+                        )
+                    );
+
+                    graphs.Add(graph);
+
+                    Console.WriteLine($"Will migrate resource type '{entry.DisplayName}' with id '{entry.Id}'.");
+                }
+                else
+                {
+                    Console.WriteLine($"Will NOT migrate resource type '{entry.DisplayName}' with id '{entry.Id}'.");
+                }
+            }
+            return graphs;
         }
     }
+    
 }
\ No newline at end of file
-- 
GitLab