diff --git a/src/SQL2Linked/Implementations/ProjectStructuralData.cs b/src/SQL2Linked/Implementations/ProjectStructuralData.cs
index 97f2dfba0106661faa31dd80df644b288b7528c0..7fb8f51fe5f554210b8e46cb4f9cc0a6936cbf98 100644
--- a/src/SQL2Linked/Implementations/ProjectStructuralData.cs
+++ b/src/SQL2Linked/Implementations/ProjectStructuralData.cs
@@ -6,10 +6,133 @@ namespace SQL2Linked.Implementations
 {
     public class ProjectStructuralData : StructuralData<Project, ProjectModel>
     {
+        public readonly Uri org = new("http://www.w3.org/ns/org#");
+        public readonly Uri dcat = new("http://www.w3.org/ns/dcat#");
+        public readonly Uri dcterms = new("http://purl.org/dc/terms/");
+        public readonly Uri foaf = new("http://xmlns.com/foaf/0.1/");
+        public readonly Uri vcard = new("http://www.w3.org/2006/vcard/ns#");
+        public readonly Uri rdf = new("http://www.w3.org/1999/02/22-rdf-syntax-ns#");
+        public readonly Uri cosc = new("https://purl.org/coscine/");
+        private VisibilityModel VisibilityModel = new VisibilityModel();
+        private ProjectRoleModel ProjectRoleModel = new ProjectRoleModel();
+        private ProjectResourceModel ProjectResourceModel = new ProjectResourceModel();
+
         public override IEnumerable<IGraph> ConvertToLinkedData(IEnumerable<Project> entries)
         {
-            // ToDo: Implement
-            throw new NotImplementedException();
+            IEnumerable<Visibility> visibilities = VisibilityModel.GetAll();
+            IEnumerable<ProjectRole> projectRoles = ProjectRoleModel.GetAll();
+            IEnumerable<ProjectResource> projectResources = ProjectResourceModel.GetAll();
+
+            var graphs = new List<IGraph>();
+            string projectUrlPrefix = "https://hdl.handle.net/" + Prefix;
+
+            foreach (var entry in entries)
+            {
+                var projectGraphName = $"{projectUrlPrefix}/{entry.Id}";
+
+                var graph = new Graph();
+                graph.BaseUri = new Uri(projectGraphName);
+
+                AssertToGraphUriNode(graph, projectGraphName, rdf + "type", dcat + "Catalog");
+                Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {rdf}type {dcat}Catalog'. ");
+
+                AssertToGraphUriNode(graph, projectGraphName, rdf + "type", org + "OrganizationalCollaboration");
+                Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {rdf}type {org}OrganizationalCollaboration'. ");
+
+                AssertToGraphUriNode(graph, projectGraphName, rdf + "type", vcard + "Group");
+                Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {rdf}type {vcard}Group'. ");
+
+                AssertToGraphLiteralNode(graph, projectGraphName, dcterms + "title", entry.ProjectName);
+                Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcterms}title {entry.ProjectName}'. ");
+
+                AssertToGraphLiteralNode(graph, projectGraphName, dcterms + "description", entry.Description);
+                Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcterms}description {entry.Description}'. ");
+
+                AssertToGraphLiteralNode(graph, projectGraphName, dcat + "startDate", entry.StartDate.ToString());
+                Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcat}startDate {entry.StartDate}'. ");
+
+                AssertToGraphLiteralNode(graph, projectGraphName, dcat + "endDate", entry.EndDate.ToString());
+                Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcat}endDate {entry.EndDate}'. ");
+
+                if (!string.IsNullOrWhiteSpace(entry.Keywords))
+                {
+                    var listKeywords = entry.Keywords.Split(';').ToList();
+                    foreach (var keyword in listKeywords)
+                    {
+                        AssertToGraphLiteralNode(graph, projectGraphName, dcterms + "subject", keyword);
+                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcterms}subject {keyword}'. ");
+                    }
+                }
+
+                AssertToGraphLiteralNode(graph, projectGraphName, dcterms + "alternative", entry.DisplayName);
+                Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcterms}alternative {entry.DisplayName}'. ");
+
+                AssertToGraphLiteralNode(graph, projectGraphName, dcterms + "rightsHolder", entry.PrincipleInvestigators);
+                Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcterms}rightsHolder {entry.PrincipleInvestigators}'. ");
+
+                AssertToGraphLiteralNode(graph, projectGraphName, "https://schema.org/funding", entry.GrantId);
+                Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} https://schema.org/funding {entry.GrantId}'. ");
+
+                foreach (var visibility in visibilities)
+                {
+                    if (entry.VisibilityId == visibility.Id && visibility.DisplayName.Contains("Public"))
+                    {
+                        AssertToGraphUriNode(graph, projectGraphName, cosc + "terms/project#visibility", cosc + $"terms/visibility#public");
+                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {cosc}terms/project#visibility {cosc}terms/visibility#public'. ");
+                        break;
+                    }
+                    else if (entry.VisibilityId == visibility.Id && visibility.DisplayName.Contains("Project Members"))
+                    {
+                        AssertToGraphUriNode(graph, projectGraphName, cosc + "terms/project#visibility", cosc + $"terms/visibility#projectMember");
+                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {cosc}terms/project#visibility {cosc}terms/visibility#projectMember'. ");
+                        break;
+                    }
+                }
+
+                AssertToGraphLiteralNode(graph, projectGraphName, cosc + "terms/project#deleted", entry.Deleted.ToString(), new Uri("http://www.w3.org/2001/XMLSchema#boolean"));
+                Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {cosc}terms/project#deleted {entry.Deleted}'. ");
+
+                AssertToGraphLiteralNode(graph, projectGraphName, cosc + "terms/project#slug", entry.Slug);
+                Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {cosc}terms/project#slug {entry.Slug}'. ");
+
+                AssertToGraphUriNode(graph, projectGraphName, foaf + "homepage", projectGraphName);
+                Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {foaf}homepage {projectGraphName}'. ");
+
+                foreach (var projectRole in projectRoles)
+                {
+                    if (entry.Id == projectRole.ProjectId)
+                    {
+                        AssertToGraphUriNode(graph, projectGraphName, vcard + "hasMember", cosc + "users/" + projectRole.UserId);
+                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {vcard}hasMember {cosc}users/{projectRole.UserId}'. ");
+
+                        var blankNode = graph.CreateBlankNode();
+
+                        AssertToGraphBlankAndUriNode(graph, blankNode, rdf + "type", org + "Membership");
+                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{blankNode} {rdf}type {org}Membership'. ");
+
+                        AssertToGraphBlankAndUriNode(graph, blankNode, org + "organization", projectGraphName);
+                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{blankNode} {org}organization {projectGraphName}'. ");
+
+                        AssertToGraphBlankAndUriNode(graph, blankNode, org + "role", cosc + "roles/" + projectRole.RoleId);
+                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{blankNode} {org}role {cosc}roles/{projectRole.RoleId}'. ");
+
+                        AssertToGraphBlankAndUriNode(graph, blankNode, org + "member", cosc + "users/" + projectRole.UserId);
+                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{blankNode} {org}member {cosc}users/{projectRole.UserId}'. ");
+                    }
+                }
+
+                foreach (var projectResource in projectResources)
+                {
+                    if (entry.Id == projectResource.ProjectId)
+                    {
+                        AssertToGraphUriNode(graph, projectGraphName, dcat + "catalog", $"{projectUrlPrefix}/{projectResource.ResourceId}");
+                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcat}catalog {projectUrlPrefix}/{projectResource.ResourceId}'. ");
+                    }
+                }
+
+                graphs.Add(graph);
+            }
+            return graphs;
         }
     }
 }
\ No newline at end of file