From eb791fba3557141e62da6bbe8b08d0f046dca8a0 Mon Sep 17 00:00:00 2001 From: Hanna Fuehr <fuehr@itc.rwth-aachen.de> Date: Mon, 8 Aug 2022 13:26:46 +0200 Subject: [PATCH] WIP: Migrate project structured data to linked data (coscine/issues#2085) --- .../Implementations/ProjectStructuralData.cs | 40 ++++++++++++++++--- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/src/SQL2Linked/Implementations/ProjectStructuralData.cs b/src/SQL2Linked/Implementations/ProjectStructuralData.cs index ec9da66..5873213 100644 --- a/src/SQL2Linked/Implementations/ProjectStructuralData.cs +++ b/src/SQL2Linked/Implementations/ProjectStructuralData.cs @@ -15,19 +15,21 @@ namespace SQL2Linked.Implementations 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 RoleModel RoleModel = new RoleModel(); + private ProjectRoleModel ProjectRoleModel = new ProjectRoleModel(); + private ProjectResourceModel ProjectResourceModel = new ProjectResourceModel(); public override IEnumerable<IGraph> ConvertToLinkedData(IEnumerable<Project> entries) { IEnumerable<Visibility> visibilities = VisibilityModel.GetAll(); - IEnumerable<Role> roles = RoleModel.GetAll(); + IEnumerable<ProjectRole> projectRoles = ProjectRoleModel.GetAll(); + IEnumerable<ProjectResource> projectResources = ProjectResourceModel.GetAll(); var graphs = new List<IGraph>(); - string resourceUrlPrefix = "https://hdl.handle.net/" + Prefix; + string projectUrlPrefix = "https://hdl.handle.net/" + Prefix; foreach (var entry in entries) { - var projectGraphName = $"{resourceUrlPrefix}/{entry.Id}"; + var projectGraphName = $"{projectUrlPrefix}/{entry.Id}"; var graph = new Graph(); graph.BaseUri = new Uri(projectGraphName); @@ -53,7 +55,7 @@ namespace SQL2Linked.Implementations AssertToGraphLiteralNode(graph, projectGraphName, dcat + "endDate", entry.EndDate.ToString()); Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcat}endDate {entry.EndDate}'. "); - if (entry.Keywords.Any()) + if (entry.Keywords!= null) { var listKeywords = entry.Keywords.Split(';').ToList(); foreach (var keyword in listKeywords) @@ -97,9 +99,37 @@ namespace SQL2Linked.Implementations 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}'. "); + } + } } return graphs; } -- GitLab