diff --git a/RDF_Back/.gitattributes b/Backend/.gitattributes similarity index 100% rename from RDF_Back/.gitattributes rename to Backend/.gitattributes diff --git a/RDF_Back/.gitignore b/Backend/.gitignore similarity index 100% rename from RDF_Back/.gitignore rename to Backend/.gitignore diff --git a/RDF_Back/.mvn/wrapper/maven-wrapper.properties b/Backend/.mvn/wrapper/maven-wrapper.properties similarity index 100% rename from RDF_Back/.mvn/wrapper/maven-wrapper.properties rename to Backend/.mvn/wrapper/maven-wrapper.properties diff --git a/RDF_Back/data/model.ttl b/Backend/data/model.ttl similarity index 100% rename from RDF_Back/data/model.ttl rename to Backend/data/model.ttl diff --git a/RDF_Back/data/tropy/export.ttl b/Backend/data/tropy/export.ttl similarity index 100% rename from RDF_Back/data/tropy/export.ttl rename to Backend/data/tropy/export.ttl diff --git a/RDF_Back/data/tropy/model.ttl b/Backend/data/tropy/model.ttl similarity index 100% rename from RDF_Back/data/tropy/model.ttl rename to Backend/data/tropy/model.ttl diff --git a/RDF_Back/data/tropy/tropy.ttl b/Backend/data/tropy/tropy.ttl similarity index 100% rename from RDF_Back/data/tropy/tropy.ttl rename to Backend/data/tropy/tropy.ttl diff --git a/RDF_Back/data/tropy/tropy1.ttl b/Backend/data/tropy/tropy1.ttl similarity index 100% rename from RDF_Back/data/tropy/tropy1.ttl rename to Backend/data/tropy/tropy1.ttl diff --git a/RDF_Back/data/tropyV1/export.ttl b/Backend/data/tropyV1/export.ttl similarity index 100% rename from RDF_Back/data/tropyV1/export.ttl rename to Backend/data/tropyV1/export.ttl diff --git a/RDF_Back/metadata/testproject/metadata.ttl b/Backend/metadata/testproject/metadata.ttl similarity index 100% rename from RDF_Back/metadata/testproject/metadata.ttl rename to Backend/metadata/testproject/metadata.ttl diff --git a/RDF_Back/mvnw b/Backend/mvnw similarity index 100% rename from RDF_Back/mvnw rename to Backend/mvnw diff --git a/RDF_Back/mvnw.cmd b/Backend/mvnw.cmd similarity index 100% rename from RDF_Back/mvnw.cmd rename to Backend/mvnw.cmd diff --git a/RDF_Back/pom.xml b/Backend/pom.xml similarity index 93% rename from RDF_Back/pom.xml rename to Backend/pom.xml index 88d3bb13..14234754 100644 --- a/RDF_Back/pom.xml +++ b/Backend/pom.xml @@ -9,9 +9,9 @@ com.uspn - RDF_Back + Backend 0.0.1-SNAPSHOT - RDF_Back + Backend RDF_Back @@ -28,6 +28,8 @@ 17 + UTF-8 + UTF-8 diff --git a/Backend/projects/archive_2026/store/contexts.dat b/Backend/projects/archive_2026/store/contexts.dat new file mode 100644 index 00000000..b560a934 Binary files /dev/null and b/Backend/projects/archive_2026/store/contexts.dat differ diff --git a/RDF_Back/projects/archive/store/namespaces.dat b/Backend/projects/archive_2026/store/namespaces.dat similarity index 100% rename from RDF_Back/projects/archive/store/namespaces.dat rename to Backend/projects/archive_2026/store/namespaces.dat diff --git a/RDF_Back/projects/Test_Mehrez/store/nativerdf.ver b/Backend/projects/archive_2026/store/nativerdf.ver similarity index 100% rename from RDF_Back/projects/Test_Mehrez/store/nativerdf.ver rename to Backend/projects/archive_2026/store/nativerdf.ver diff --git a/Backend/projects/archive_2026/store/triples-posc.alloc b/Backend/projects/archive_2026/store/triples-posc.alloc new file mode 100644 index 00000000..2a7d0176 Binary files /dev/null and b/Backend/projects/archive_2026/store/triples-posc.alloc differ diff --git a/Backend/projects/archive_2026/store/triples-posc.dat b/Backend/projects/archive_2026/store/triples-posc.dat new file mode 100644 index 00000000..12a8ff74 Binary files /dev/null and b/Backend/projects/archive_2026/store/triples-posc.dat differ diff --git a/RDF_Back/projects/archive_khaoula/store/triples-spoc.alloc b/Backend/projects/archive_2026/store/triples-spoc.alloc similarity index 100% rename from RDF_Back/projects/archive_khaoula/store/triples-spoc.alloc rename to Backend/projects/archive_2026/store/triples-spoc.alloc diff --git a/Backend/projects/archive_2026/store/triples-spoc.dat b/Backend/projects/archive_2026/store/triples-spoc.dat new file mode 100644 index 00000000..585866c5 Binary files /dev/null and b/Backend/projects/archive_2026/store/triples-spoc.dat differ diff --git a/RDF_Back/projects/Test_Mehrez/store/triples.prop b/Backend/projects/archive_2026/store/triples.prop similarity index 71% rename from RDF_Back/projects/Test_Mehrez/store/triples.prop rename to Backend/projects/archive_2026/store/triples.prop index caa81a7b..b7cec6bc 100644 --- a/RDF_Back/projects/Test_Mehrez/store/triples.prop +++ b/Backend/projects/archive_2026/store/triples.prop @@ -1,4 +1,4 @@ #triple indexes meta-data, DO NOT EDIT! -#Sun Mar 29 12:59:07 CEST 2026 +#Wed Jul 15 12:25:02 CEST 2026 triple-indexes=spoc,posc version=10 diff --git a/RDF_Back/projects/Test_Mehrez/store/txn-status b/Backend/projects/archive_2026/store/txn-status similarity index 100% rename from RDF_Back/projects/Test_Mehrez/store/txn-status rename to Backend/projects/archive_2026/store/txn-status diff --git a/RDF_Back/projects/Test_Mehrez/store/txncache.alloc b/Backend/projects/archive_2026/store/txncache.alloc similarity index 100% rename from RDF_Back/projects/Test_Mehrez/store/txncache.alloc rename to Backend/projects/archive_2026/store/txncache.alloc diff --git a/RDF_Back/projects/Test_Mehrez/store/txncache.dat b/Backend/projects/archive_2026/store/txncache.dat similarity index 100% rename from RDF_Back/projects/Test_Mehrez/store/txncache.dat rename to Backend/projects/archive_2026/store/txncache.dat diff --git a/Backend/projects/archive_2026/store/values.dat b/Backend/projects/archive_2026/store/values.dat new file mode 100644 index 00000000..9d38f3c6 Binary files /dev/null and b/Backend/projects/archive_2026/store/values.dat differ diff --git a/Backend/projects/archive_2026/store/values.hash b/Backend/projects/archive_2026/store/values.hash new file mode 100644 index 00000000..3475c06b Binary files /dev/null and b/Backend/projects/archive_2026/store/values.hash differ diff --git a/Backend/projects/archive_2026/store/values.id b/Backend/projects/archive_2026/store/values.id new file mode 100644 index 00000000..740ed2fa Binary files /dev/null and b/Backend/projects/archive_2026/store/values.id differ diff --git a/Backend/projects/okok/store/contexts.dat b/Backend/projects/okok/store/contexts.dat new file mode 100644 index 00000000..2d91cabd Binary files /dev/null and b/Backend/projects/okok/store/contexts.dat differ diff --git a/RDF_Back/projects/archive_khaouala/store/namespaces.dat b/Backend/projects/okok/store/namespaces.dat similarity index 100% rename from RDF_Back/projects/archive_khaouala/store/namespaces.dat rename to Backend/projects/okok/store/namespaces.dat diff --git a/RDF_Back/projects/archive/store/nativerdf.ver b/Backend/projects/okok/store/nativerdf.ver similarity index 100% rename from RDF_Back/projects/archive/store/nativerdf.ver rename to Backend/projects/okok/store/nativerdf.ver diff --git a/RDF_Back/projects/archive/store/triples-posc.alloc b/Backend/projects/okok/store/triples-posc.alloc similarity index 100% rename from RDF_Back/projects/archive/store/triples-posc.alloc rename to Backend/projects/okok/store/triples-posc.alloc diff --git a/Backend/projects/okok/store/triples-posc.dat b/Backend/projects/okok/store/triples-posc.dat new file mode 100644 index 00000000..d8a6d801 Binary files /dev/null and b/Backend/projects/okok/store/triples-posc.dat differ diff --git a/Backend/projects/okok/store/triples-spoc.alloc b/Backend/projects/okok/store/triples-spoc.alloc new file mode 100644 index 00000000..bfcdf6ec Binary files /dev/null and b/Backend/projects/okok/store/triples-spoc.alloc differ diff --git a/Backend/projects/okok/store/triples-spoc.dat b/Backend/projects/okok/store/triples-spoc.dat new file mode 100644 index 00000000..5c199206 Binary files /dev/null and b/Backend/projects/okok/store/triples-spoc.dat differ diff --git a/RDF_Back/projects/archive/store/triples.prop b/Backend/projects/okok/store/triples.prop similarity index 71% rename from RDF_Back/projects/archive/store/triples.prop rename to Backend/projects/okok/store/triples.prop index 4eb8a8a1..b2bdde22 100644 --- a/RDF_Back/projects/archive/store/triples.prop +++ b/Backend/projects/okok/store/triples.prop @@ -1,4 +1,4 @@ #triple indexes meta-data, DO NOT EDIT! -#Thu Mar 19 11:22:37 CET 2026 +#Wed Jul 15 12:40:46 CEST 2026 triple-indexes=spoc,posc version=10 diff --git a/RDF_Back/projects/archive/store/txn-status b/Backend/projects/okok/store/txn-status similarity index 100% rename from RDF_Back/projects/archive/store/txn-status rename to Backend/projects/okok/store/txn-status diff --git a/RDF_Back/projects/archive_khaouala/store/txncache.alloc b/Backend/projects/okok/store/txncache.alloc similarity index 100% rename from RDF_Back/projects/archive_khaouala/store/txncache.alloc rename to Backend/projects/okok/store/txncache.alloc diff --git a/RDF_Back/projects/archive_khaouala/store/txncache.dat b/Backend/projects/okok/store/txncache.dat similarity index 100% rename from RDF_Back/projects/archive_khaouala/store/txncache.dat rename to Backend/projects/okok/store/txncache.dat diff --git a/Backend/projects/okok/store/values.dat b/Backend/projects/okok/store/values.dat new file mode 100644 index 00000000..e3562e90 Binary files /dev/null and b/Backend/projects/okok/store/values.dat differ diff --git a/Backend/projects/okok/store/values.hash b/Backend/projects/okok/store/values.hash new file mode 100644 index 00000000..9e738a73 Binary files /dev/null and b/Backend/projects/okok/store/values.hash differ diff --git a/Backend/projects/okok/store/values.id b/Backend/projects/okok/store/values.id new file mode 100644 index 00000000..f4c9dfc8 Binary files /dev/null and b/Backend/projects/okok/store/values.id differ diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/RdfBackApplication.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/RdfBackApplication.java similarity index 83% rename from RDF_Back/src/main/java/com/uspn/rdf_back/RdfBackApplication.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/RdfBackApplication.java index b9861a40..6a17869b 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/RdfBackApplication.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/RdfBackApplication.java @@ -1,6 +1,6 @@ -package com.uspn.rdf_back; +package fr.cnrs.lacito.fieldarchive; -import com.uspn.rdf_back.example.Example; +import fr.cnrs.lacito.fieldarchive.example.Example; import org.eclipse.rdf4j.spring.RDF4JConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/config/Rdf4jConfig.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/config/Rdf4jConfig.java similarity index 95% rename from RDF_Back/src/main/java/com/uspn/rdf_back/config/Rdf4jConfig.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/config/Rdf4jConfig.java index 7a523499..2925498e 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/config/Rdf4jConfig.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/config/Rdf4jConfig.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.config; +package fr.cnrs.lacito.fieldarchive.config; import org.eclipse.rdf4j.repository.Repository; import org.eclipse.rdf4j.repository.sail.SailRepository; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/config/WebConfig.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/config/WebConfig.java similarity index 93% rename from RDF_Back/src/main/java/com/uspn/rdf_back/config/WebConfig.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/config/WebConfig.java index 4c6c3da8..9ae158d7 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/config/WebConfig.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/config/WebConfig.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.config; +package fr.cnrs.lacito.fieldarchive.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/controllers/DataSourceController.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/controllers/DataSourceController.java similarity index 84% rename from RDF_Back/src/main/java/com/uspn/rdf_back/controllers/DataSourceController.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/controllers/DataSourceController.java index d7f21f79..f25b173c 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/controllers/DataSourceController.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/controllers/DataSourceController.java @@ -1,10 +1,10 @@ -package com.uspn.rdf_back.controllers; +package fr.cnrs.lacito.fieldarchive.controllers; -import com.uspn.rdf_back.dtos.CreateInternalDataSourceRequest; -import com.uspn.rdf_back.dtos.CreateExternalDataSourceRequest; -import com.uspn.rdf_back.dtos.DataSourceDto; -import com.uspn.rdf_back.dtos.UpdateDataSourceRequest; -import com.uspn.rdf_back.services.DataSourceService; +import fr.cnrs.lacito.fieldarchive.dtos.CreateInternalDataSourceRequest; +import fr.cnrs.lacito.fieldarchive.dtos.CreateExternalDataSourceRequest; +import fr.cnrs.lacito.fieldarchive.dtos.DataSourceDto; +import fr.cnrs.lacito.fieldarchive.dtos.UpdateDataSourceRequest; +import fr.cnrs.lacito.fieldarchive.services.DataSourceService; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/controllers/OntologyController.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/controllers/OntologyController.java similarity index 89% rename from RDF_Back/src/main/java/com/uspn/rdf_back/controllers/OntologyController.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/controllers/OntologyController.java index ce7a1c0f..feb3b1c1 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/controllers/OntologyController.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/controllers/OntologyController.java @@ -1,13 +1,13 @@ -package com.uspn.rdf_back.controllers; +package fr.cnrs.lacito.fieldarchive.controllers; -import com.uspn.rdf_back.dtos.OntologyLabelDto; -import com.uspn.rdf_back.dtos.SaveOntologyLabelRequest; -import com.uspn.rdf_back.services.OntologyService; +import fr.cnrs.lacito.fieldarchive.dtos.OntologyLabelDto; +import fr.cnrs.lacito.fieldarchive.dtos.SaveOntologyLabelRequest; +import fr.cnrs.lacito.fieldarchive.services.OntologyService; import org.springframework.web.bind.annotation.*; import java.util.List; -import com.uspn.rdf_back.dtos.OntologyClassDto; -import com.uspn.rdf_back.services.BuiltinOntologyService; +import fr.cnrs.lacito.fieldarchive.dtos.OntologyClassDto; +import fr.cnrs.lacito.fieldarchive.services.BuiltinOntologyService; @RestController @RequestMapping("/ontology") diff --git a/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/controllers/ProjectController.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/controllers/ProjectController.java new file mode 100644 index 00000000..8d43ecc4 --- /dev/null +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/controllers/ProjectController.java @@ -0,0 +1,186 @@ +package fr.cnrs.lacito.fieldarchive.controllers; + +import fr.cnrs.lacito.fieldarchive.dtos.*; +import fr.cnrs.lacito.fieldarchive.dtos.*; +import fr.cnrs.lacito.fieldarchive.exceptions.ImportException; +import fr.cnrs.lacito.fieldarchive.services.FileExportService; +import fr.cnrs.lacito.fieldarchive.services.FileImportService; +import fr.cnrs.lacito.fieldarchive.services.ProjectService; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.*; +import java.util.Map; + +@RestController +@RequestMapping("/projects") +public class ProjectController { + + private final ProjectService projectService; + private final FileImportService fileImportService; + private final FileExportService fileExportService; + + public ProjectController(ProjectService projectService, FileImportService fileImportService, FileExportService fileExportService) { + this.projectService = projectService; + this.fileImportService = fileImportService; + this.fileExportService = fileExportService; + } + + @PostMapping(value = "/import-backup", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public ResponseEntity> importBackup(@RequestParam("file") MultipartFile file) { + try (InputStream is = file.getInputStream()) { + ImportResult result = fileImportService.importBackup(is); + Map body = new HashMap<>(); + body.put("status", "ok"); + body.put("message", "Project is successfully restored !"); + body.put("project", result.message); + return ResponseEntity.ok(body); + + } catch (ImportException e) { + return ResponseEntity.badRequest().body(Map.of("status", "error", "message", e.getMessage())); + } catch (IllegalArgumentException e) { + return ResponseEntity.badRequest().body(Map.of("status", "error", "message", e.getMessage())); + } catch (IOException e) { + return ResponseEntity.internalServerError().body(Map.of("status", "error", "message", "Error while reading file.")); + } + } + + @GetMapping(value = "/export/backup", produces = "application/zip") + public void exportBackup(HttpServletResponse response) throws IOException { + response.setContentType("application/zip"); + response.setHeader("Content-Disposition", "attachment; filename=\"project-backup.zip\""); + fileExportService.exportBackup(response.getOutputStream()); + } + + @GetMapping(value = "/export/internal", produces = "text/turtle") + public void exportInternal(HttpServletResponse response) throws IOException { + response.setContentType("text/turtle"); + response.setHeader("Content-Disposition", "attachment; filename=\"internal-data.ttl\""); + fileExportService.exportInternalDataSource(response.getOutputStream()); + } + + @PostMapping(value = "/import", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public ResponseEntity> importExternalTurtle( + @RequestParam("file") MultipartFile file) { + + try (InputStream is = file.getInputStream()) { + String baseURI = projectService.readCurrentProject().prefix; + ImportResult result = fileImportService.importTurtle(is, baseURI); + Map body = new HashMap<>(); + body.put("status", "ok"); + body.put("message", "Internal DataSource was successfully updated !"); + body.put("project", result.message); + return ResponseEntity.ok(body); + } catch (ImportException e) { + return ResponseEntity.badRequest().body(Map.of("status", "error", "message", e.getMessage())); + } catch (IOException e) { + return ResponseEntity.internalServerError().build(); + } + } + + @PostMapping("/open") + public Map open(@RequestBody CreateProjectRequest req) { + ProjectDto dto = projectService.openProject(req.getName(), req.isPersistent(), req.getDescription(), req.getPrefix()); + return Map.of( + "status", "ok", + "project", dto.name + ); + } + + @PostMapping("/create") + public Map create(@RequestBody CreateProjectRequest req) { + ProjectDto dto = projectService.createProject(req.getName(), req.isPersistent(), req.getDescription(), req.getPrefix()); + return Map.of( + "status", "ok", + "project", dto.name + ); + } + + @GetMapping("/current") + public ProjectDto current() { + return projectService.readCurrentProject(); + } + + @DeleteMapping("/{projectName}") + public ResponseEntity deleteProject(@PathVariable String projectName) { + try { + projectService.deleteProject(projectName); + return ResponseEntity.ok("Project deleted successfully"); + + } catch (IllegalArgumentException e) { + return ResponseEntity + .badRequest() + .body(e.getMessage()); + + } catch (FileNotFoundException e) { + return ResponseEntity + .status(HttpStatus.NOT_FOUND) + .body(e.getMessage()); + + } catch (IOException e) { + return ResponseEntity + .status(HttpStatus.INTERNAL_SERVER_ERROR) + .body("Error deleting project"); + } + } + + @PostMapping("/close") + public Map close() { + projectService.closeProject(); + return Map.of("status", "ok"); + } + + @PutMapping("/{oldProjectName}") + public ResponseEntity> updateProject( + @PathVariable String oldProjectName, + @RequestBody UpdateProjectObject newProject) { + + try { + + System.out.println("New Description is "+ newProject.description); + projectService.updateProject( + oldProjectName, + newProject.name, + newProject.description + ); + + return ResponseEntity.ok( + new ApiResponse<>(true, "Project updated successfully", null) + ); + + } catch (IllegalArgumentException e) { + return ResponseEntity + .badRequest() + .body(new ApiError(e.getMessage(), "VALIDATION_ERROR")); + + } catch (IOException e) { + return ResponseEntity + .status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ApiError("Internal error while updating project", "IO_ERROR")); + + } catch (Exception e) { + return ResponseEntity + .status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ApiError("Unexpected error", "UNKNOWN_ERROR")); + } + } + // Liste simple +// @GetMapping("/list") +// public List listProjects() { +// return projectService.listProjects(); +// } + + // Liste détaillée + @GetMapping("/list/details") + public List> listProjectsDetailed() { + return projectService.listProjectsDetailed(); + } + +} diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/controllers/RdfEntityController.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/controllers/RdfEntityController.java similarity index 83% rename from RDF_Back/src/main/java/com/uspn/rdf_back/controllers/RdfEntityController.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/controllers/RdfEntityController.java index 288ce7c5..3efc9557 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/controllers/RdfEntityController.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/controllers/RdfEntityController.java @@ -1,7 +1,11 @@ -package com.uspn.rdf_back.controllers; +package fr.cnrs.lacito.fieldarchive.controllers; -import com.uspn.rdf_back.dtos.*; -import com.uspn.rdf_back.services.RdfEntityService; +import fr.cnrs.lacito.fieldarchive.dtos.*; +import fr.cnrs.lacito.fieldarchive.dtos.CreateRdfEntityRequest; +import fr.cnrs.lacito.fieldarchive.dtos.RdfEntityDto; +import fr.cnrs.lacito.fieldarchive.dtos.RdfEntitySummaryDto; +import fr.cnrs.lacito.fieldarchive.dtos.UpdateRdfEntityRequest; +import fr.cnrs.lacito.fieldarchive.services.RdfEntityService; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/controllers/SparqlController.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/controllers/SparqlController.java similarity index 69% rename from RDF_Back/src/main/java/com/uspn/rdf_back/controllers/SparqlController.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/controllers/SparqlController.java index 79a20dd6..6087b0cb 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/controllers/SparqlController.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/controllers/SparqlController.java @@ -1,6 +1,6 @@ -package com.uspn.rdf_back.controllers; +package fr.cnrs.lacito.fieldarchive.controllers; -import com.uspn.rdf_back.services.SparqlService; +import fr.cnrs.lacito.fieldarchive.services.SparqlService; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -18,7 +18,9 @@ public SparqlController(SparqlService service) { @PostMapping("/select") public List> select(@RequestBody Map body) { - return service.select(body.get("query")); + String query = body.get("query"); +// System.out.println("SPARQL QUERY:\n" + query); + return service.select(query); } @PostMapping("/update") diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/core/ProjectContext.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/core/ProjectContext.java similarity index 94% rename from RDF_Back/src/main/java/com/uspn/rdf_back/core/ProjectContext.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/core/ProjectContext.java index d27f6021..471519af 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/core/ProjectContext.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/core/ProjectContext.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.core; +package fr.cnrs.lacito.fieldarchive.core; import org.eclipse.rdf4j.repository.Repository; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/core/RdfContexts.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/core/RdfContexts.java similarity index 52% rename from RDF_Back/src/main/java/com/uspn/rdf_back/core/RdfContexts.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/core/RdfContexts.java index 0246427b..f645014c 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/core/RdfContexts.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/core/RdfContexts.java @@ -1,14 +1,10 @@ -package com.uspn.rdf_back.core; +package fr.cnrs.lacito.fieldarchive.core; //un contexte = un graphe nommé public final class RdfContexts { private RdfContexts() {} // Contexte où on stocke les METADONNEES des sources (en RDF) // graphe nommé pour les métadonnées (projet, sources de données, etc.) - public static final String CTX_META = RdfNamespaces.APP + "context/metadata"; - - // Contexte éditable interne (source interne) - public static final String CTX_INTERNAL = RdfNamespaces.APP + "context/internal"; - - public static final String CTX_ONTO_RICO = RdfNamespaces.APP + "context/ontology/rico"; + public static final String CTX_META = RdfNamespaces.APP + "/context/metadata"; + public static final String CTX_ONTO_RICO = RdfNamespaces.APP + "/context/ontology/rico"; } diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/core/RdfNamespaces.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/core/RdfNamespaces.java similarity index 57% rename from RDF_Back/src/main/java/com/uspn/rdf_back/core/RdfNamespaces.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/core/RdfNamespaces.java index ad2b3b99..dad215ca 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/core/RdfNamespaces.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/core/RdfNamespaces.java @@ -1,11 +1,10 @@ -package com.uspn.rdf_back.core; +package fr.cnrs.lacito.fieldarchive.core; public final class RdfNamespaces { private RdfNamespaces() {} // Namespace interne de l'application - public static final String APP = "http://uspn.fr/app#"; - //public static final String APP = "http://example.org/app#"; + public static final String APP = "http://cnrs.lacito/app#"; // RIC-O public static final String RICO = "https://www.ica.org/standards/RiC/ontology#"; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/ApiError.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/ApiError.java similarity index 65% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/ApiError.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/ApiError.java index 01e5f5a5..525b1fa3 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/ApiError.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/ApiError.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; public record ApiError( String message, diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/ApiResponse.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/ApiResponse.java similarity index 70% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/ApiResponse.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/ApiResponse.java index dda24aa7..46510d94 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/ApiResponse.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/ApiResponse.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; public record ApiResponse( boolean success, diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/CreateDataSourceRequest.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/CreateDataSourceRequest.java similarity index 86% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/CreateDataSourceRequest.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/CreateDataSourceRequest.java index 6d2b2108..85a1614a 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/CreateDataSourceRequest.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/CreateDataSourceRequest.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; import lombok.Getter; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/CreateExternalDataSourceRequest.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/CreateExternalDataSourceRequest.java similarity index 89% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/CreateExternalDataSourceRequest.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/CreateExternalDataSourceRequest.java index 943406ea..fc313312 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/CreateExternalDataSourceRequest.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/CreateExternalDataSourceRequest.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; import lombok.Getter; import lombok.Setter; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/CreateInternalDataSourceRequest.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/CreateInternalDataSourceRequest.java similarity index 74% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/CreateInternalDataSourceRequest.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/CreateInternalDataSourceRequest.java index 7e6ee066..4a5ad052 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/CreateInternalDataSourceRequest.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/CreateInternalDataSourceRequest.java @@ -1,10 +1,12 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; @Getter @Setter +@AllArgsConstructor public class CreateInternalDataSourceRequest { private String shortName; // ex: "internal" diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/CreateProjectRequest.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/CreateProjectRequest.java similarity index 73% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/CreateProjectRequest.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/CreateProjectRequest.java index 008bb6e0..bd68a985 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/CreateProjectRequest.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/CreateProjectRequest.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; public class CreateProjectRequest { public String name; // ex: "archive_2025" @@ -6,6 +6,8 @@ public class CreateProjectRequest { private String description; + private String prefix; + public String getName() { return name; } public void setName(String name) { this.name = name; } @@ -15,6 +17,12 @@ public class CreateProjectRequest { public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } + public String getPrefix() { + return prefix; + } + public void setPrefix(String prefix) { + this.prefix = prefix; + } } diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/CreateRdfEntityRequest.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/CreateRdfEntityRequest.java similarity index 83% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/CreateRdfEntityRequest.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/CreateRdfEntityRequest.java index fdd58922..ea213576 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/CreateRdfEntityRequest.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/CreateRdfEntityRequest.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; import java.util.ArrayList; import java.util.List; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/DataSourceDto.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/DataSourceDto.java similarity index 91% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/DataSourceDto.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/DataSourceDto.java index 76330330..8d43c700 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/DataSourceDto.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/DataSourceDto.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; diff --git a/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/ImportResult.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/ImportResult.java new file mode 100644 index 00000000..c2a26714 --- /dev/null +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/ImportResult.java @@ -0,0 +1,20 @@ +package fr.cnrs.lacito.fieldarchive.dtos; + +import java.time.OffsetDateTime; + +public class ImportResult { + public boolean success; + public String sourceName; + public long tripleCount; + public OffsetDateTime importedAt; + public String message; + + public static ImportResult success(String sourceName, long tripleCount) { + ImportResult r = new ImportResult(); + r.success = true; + r.sourceName = sourceName; + r.tripleCount = tripleCount; + r.importedAt = OffsetDateTime.now(); + return r; + } +} diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/OntologyClassDto.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/OntologyClassDto.java similarity index 88% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/OntologyClassDto.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/OntologyClassDto.java index b117f2ab..c732be95 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/OntologyClassDto.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/OntologyClassDto.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; public class OntologyClassDto { public String iri; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/OntologyLabelDto.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/OntologyLabelDto.java similarity index 92% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/OntologyLabelDto.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/OntologyLabelDto.java index 92cdfda4..aeb48524 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/OntologyLabelDto.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/OntologyLabelDto.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; public class OntologyLabelDto { public String url; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/ProjectDto.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/ProjectDto.java similarity index 76% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/ProjectDto.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/ProjectDto.java index 4d9fa567..0357ef7d 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/ProjectDto.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/ProjectDto.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; public class ProjectDto { public String name; @@ -6,4 +6,5 @@ public class ProjectDto { public String created; // ISO date or datetime as string public String modified; // ISO datetime as string public boolean open; + public String prefix; } \ No newline at end of file diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/RdfEntityDto.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/RdfEntityDto.java similarity index 92% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/RdfEntityDto.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/RdfEntityDto.java index 698369ce..2008c6c0 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/RdfEntityDto.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/RdfEntityDto.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; import java.util.ArrayList; import java.util.List; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/RdfEntitySummaryDto.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/RdfEntitySummaryDto.java similarity index 82% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/RdfEntitySummaryDto.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/RdfEntitySummaryDto.java index 300a4d35..24fdfccc 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/RdfEntitySummaryDto.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/RdfEntitySummaryDto.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; public class RdfEntitySummaryDto { public String entityKey; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/RdfPropertyDto.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/RdfPropertyDto.java similarity index 73% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/RdfPropertyDto.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/RdfPropertyDto.java index 1c1a08b1..39de65ca 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/RdfPropertyDto.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/RdfPropertyDto.java @@ -1,9 +1,10 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; public class RdfPropertyDto { public String predicate; // ex: "ric:hasName" ou IRI complet public String kind; // "literal" | "iri" public String value; // valeur littérale ou IRI/curie + public String name ; // when the entity is of type IRI, return its name also. public String datatype; // ex: "xsd:string" (optionnel pour literal) public String lang; // ex: "fr" (optionnel pour literal) } \ No newline at end of file diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/SaveOntologyLabelRequest.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/SaveOntologyLabelRequest.java similarity index 89% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/SaveOntologyLabelRequest.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/SaveOntologyLabelRequest.java index df1baa62..71e98f02 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/SaveOntologyLabelRequest.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/SaveOntologyLabelRequest.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; public class SaveOntologyLabelRequest { diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/UpdateDataSourceRequest.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/UpdateDataSourceRequest.java similarity index 79% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/UpdateDataSourceRequest.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/UpdateDataSourceRequest.java index 501249ce..36cc54b5 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/UpdateDataSourceRequest.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/UpdateDataSourceRequest.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; import lombok.Getter; import lombok.Setter; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/UpdateProjectObject.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/UpdateProjectObject.java similarity index 68% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/UpdateProjectObject.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/UpdateProjectObject.java index a87a33dc..d505ff89 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/UpdateProjectObject.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/UpdateProjectObject.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; public class UpdateProjectObject { public String name; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/UpdateRdfEntityRequest.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/UpdateRdfEntityRequest.java similarity index 84% rename from RDF_Back/src/main/java/com/uspn/rdf_back/dtos/UpdateRdfEntityRequest.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/UpdateRdfEntityRequest.java index f5dbc2d2..61e9a609 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/dtos/UpdateRdfEntityRequest.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/dtos/UpdateRdfEntityRequest.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.dtos; +package fr.cnrs.lacito.fieldarchive.dtos; import java.util.ArrayList; import java.util.List; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/example/Example.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/example/Example.java similarity index 93% rename from RDF_Back/src/main/java/com/uspn/rdf_back/example/Example.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/example/Example.java index 1a27fb5f..94ba822f 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/example/Example.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/example/Example.java @@ -1,6 +1,5 @@ -package com.uspn.rdf_back.example; +package fr.cnrs.lacito.fieldarchive.example; -import com.uspn.rdf_back.RdfBackApplication; import org.eclipse.rdf4j.model.*; import org.eclipse.rdf4j.model.impl.DynamicModelFactory; import org.eclipse.rdf4j.model.impl.SimpleValueFactory; @@ -9,7 +8,6 @@ import org.eclipse.rdf4j.model.vocabulary.RDF; import org.eclipse.rdf4j.rio.RDFFormat; import org.eclipse.rdf4j.rio.Rio; -import org.springframework.boot.SpringApplication; import java.io.*; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/exception/ApiExceptionHandler.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/exception/ApiExceptionHandler.java similarity index 93% rename from RDF_Back/src/main/java/com/uspn/rdf_back/exception/ApiExceptionHandler.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/exception/ApiExceptionHandler.java index b9c87123..64d77047 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/exception/ApiExceptionHandler.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/exception/ApiExceptionHandler.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.exception; +package fr.cnrs.lacito.fieldarchive.exception; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/exception/BadRequestException.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/exception/BadRequestException.java similarity index 72% rename from RDF_Back/src/main/java/com/uspn/rdf_back/exception/BadRequestException.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/exception/BadRequestException.java index 7b46fa2d..bab40536 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/exception/BadRequestException.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/exception/BadRequestException.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.exception; +package fr.cnrs.lacito.fieldarchive.exception; public class BadRequestException extends RuntimeException { public BadRequestException(String msg) { super(msg); } diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/exception/ConflictException.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/exception/ConflictException.java similarity index 86% rename from RDF_Back/src/main/java/com/uspn/rdf_back/exception/ConflictException.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/exception/ConflictException.java index 0dade035..3bfd6e91 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/exception/ConflictException.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/exception/ConflictException.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.exception; +package fr.cnrs.lacito.fieldarchive.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/exception/NotFoundException.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/exception/NotFoundException.java similarity index 71% rename from RDF_Back/src/main/java/com/uspn/rdf_back/exception/NotFoundException.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/exception/NotFoundException.java index 004d1cbf..b840bc54 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/exception/NotFoundException.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/exception/NotFoundException.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.exception; +package fr.cnrs.lacito.fieldarchive.exception; public class NotFoundException extends RuntimeException { public NotFoundException(String msg) { super(msg); } diff --git a/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/exceptions/ImportException.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/exceptions/ImportException.java new file mode 100644 index 00000000..9dece7df --- /dev/null +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/exceptions/ImportException.java @@ -0,0 +1,21 @@ +package fr.cnrs.lacito.fieldarchive.exceptions; + +public class ImportException extends RuntimeException{ + private final Long lineNumber; + private final Long columnNumber; + + public ImportException(String message) { + super(message); + this.lineNumber = null; + this.columnNumber = null; + } + + public ImportException(long lineNumber, long columnNumber, String message) { + super(message); + this.lineNumber = lineNumber; + this.columnNumber = columnNumber; + } + + public Long getLineNumber() { return lineNumber; } + public Long getColumnNumber() { return columnNumber; } +} diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/services/BuiltinOntologyService.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/BuiltinOntologyService.java similarity index 95% rename from RDF_Back/src/main/java/com/uspn/rdf_back/services/BuiltinOntologyService.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/BuiltinOntologyService.java index c45f772b..3b6a98c3 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/services/BuiltinOntologyService.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/BuiltinOntologyService.java @@ -1,12 +1,12 @@ -package com.uspn.rdf_back.services; - -import com.uspn.rdf_back.core.ProjectContext; -import com.uspn.rdf_back.core.RdfContexts; -import com.uspn.rdf_back.core.RdfNamespaces; -import com.uspn.rdf_back.dtos.OntologyClassDto; -import com.uspn.rdf_back.dtos.OntologyLabelDto; -import com.uspn.rdf_back.exception.BadRequestException; -import com.uspn.rdf_back.exception.NotFoundException; +package fr.cnrs.lacito.fieldarchive.services; + +import fr.cnrs.lacito.fieldarchive.core.ProjectContext; +import fr.cnrs.lacito.fieldarchive.core.RdfContexts; +import fr.cnrs.lacito.fieldarchive.core.RdfNamespaces; +import fr.cnrs.lacito.fieldarchive.dtos.OntologyClassDto; +import fr.cnrs.lacito.fieldarchive.dtos.OntologyLabelDto; +import fr.cnrs.lacito.fieldarchive.exception.BadRequestException; +import fr.cnrs.lacito.fieldarchive.exception.NotFoundException; import org.eclipse.rdf4j.model.IRI; import org.eclipse.rdf4j.model.Statement; import org.eclipse.rdf4j.model.Value; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/services/DataSourceService.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/DataSourceService.java similarity index 93% rename from RDF_Back/src/main/java/com/uspn/rdf_back/services/DataSourceService.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/DataSourceService.java index fc7299b4..b57868a1 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/services/DataSourceService.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/DataSourceService.java @@ -1,15 +1,14 @@ -package com.uspn.rdf_back.services; - -import com.uspn.rdf_back.core.ProjectContext; -import com.uspn.rdf_back.core.RdfContexts; -import com.uspn.rdf_back.core.RdfNamespaces; -import com.uspn.rdf_back.dtos.CreateInternalDataSourceRequest; -import com.uspn.rdf_back.dtos.CreateExternalDataSourceRequest; -import com.uspn.rdf_back.dtos.DataSourceDto; -import com.uspn.rdf_back.dtos.UpdateDataSourceRequest; -import com.uspn.rdf_back.exception.BadRequestException; -import com.uspn.rdf_back.exception.ConflictException; -import com.uspn.rdf_back.exception.NotFoundException; +package fr.cnrs.lacito.fieldarchive.services; + +import fr.cnrs.lacito.fieldarchive.core.ProjectContext; +import fr.cnrs.lacito.fieldarchive.core.RdfContexts; +import fr.cnrs.lacito.fieldarchive.core.RdfNamespaces; +import fr.cnrs.lacito.fieldarchive.dtos.CreateInternalDataSourceRequest; +import fr.cnrs.lacito.fieldarchive.dtos.CreateExternalDataSourceRequest; +import fr.cnrs.lacito.fieldarchive.dtos.DataSourceDto; +import fr.cnrs.lacito.fieldarchive.dtos.UpdateDataSourceRequest; +import fr.cnrs.lacito.fieldarchive.exception.BadRequestException; +import fr.cnrs.lacito.fieldarchive.exception.NotFoundException; import org.eclipse.rdf4j.model.*; import org.eclipse.rdf4j.model.impl.SimpleValueFactory; import org.eclipse.rdf4j.model.vocabulary.DCTERMS; @@ -20,12 +19,10 @@ import org.springframework.stereotype.Service; import java.time.OffsetDateTime; -import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.eclipse.rdf4j.rio.RDFFormat; -import org.eclipse.rdf4j.rio.Rio; import org.springframework.web.server.ResponseStatusException; import java.io.InputStream; @@ -44,7 +41,7 @@ private IRI metaCtx() { } private IRI dsIri(String shortName) { - return vf.createIRI(RdfNamespaces.APP + "datasource/" + shortName); + return vf.createIRI(RdfNamespaces.APP + "/datasource/" + shortName); } /** Graphe nommé (contexte) où seront stockés les triplets "contenu" de la source */ @@ -508,4 +505,19 @@ public void synchronizeExternalDataSource(String shortName) { } } + public IRI getGraphIri(String shortName) { + requireProjectOpen(); + validateShortName(shortName); + + IRI ctxMeta = metaCtx(); + IRI ds = dsIri(shortName); + + try (RepositoryConnection conn = ProjectContext.getRepository().getConnection()) { + String graphIri = getIri(conn, ds, pGraph(), ctxMeta); + if (graphIri == null) { + throw new NotFoundException("No graph found for source : " + shortName); + } + return vf.createIRI(graphIri); + } + } } \ No newline at end of file diff --git a/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/FileExportService.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/FileExportService.java new file mode 100644 index 00000000..3532fb3f --- /dev/null +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/FileExportService.java @@ -0,0 +1,109 @@ +package fr.cnrs.lacito.fieldarchive.services; + +import fr.cnrs.lacito.fieldarchive.core.ProjectContext; +import fr.cnrs.lacito.fieldarchive.core.RdfContexts; +import fr.cnrs.lacito.fieldarchive.exceptions.ImportException; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.repository.Repository; +import org.eclipse.rdf4j.repository.RepositoryConnection; +import org.eclipse.rdf4j.repository.RepositoryResult; +import org.eclipse.rdf4j.rio.RDFFormat; +import org.eclipse.rdf4j.rio.RDFWriter; +import org.eclipse.rdf4j.rio.Rio; +import org.springframework.stereotype.Service; + +import java.io.OutputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +@Service +public class FileExportService { + private static final ValueFactory vf = SimpleValueFactory.getInstance(); + private final ProjectService projectService; + private final DataSourceService dsService; + + public FileExportService(ProjectService projectService,DataSourceService dsService) { + this.projectService = projectService; + this.dsService = dsService; + } + + /** + * Exports only the InternalDataSource named graph (the data the user + * actually created/imported in the app) as plain Turtle triples. + * The named graph itself is NOT part of the output — Turtle has no + * notion of context, so the statements come out as bare triples, + * ready to be fed into any other RDF-consuming application. + */ + public void exportInternalDataSource(OutputStream out) { + Repository repo = ProjectContext.getRepository(); + if (repo == null) { + throw new ImportException("No project opened"); + } + + String projectName = projectService.readCurrentProject().name; + IRI ctxInternal = dsService.getGraphIri(projectName + "_internal"); // ✅ idem + + try (RepositoryConnection conn = repo.getConnection()) { + RDFWriter writer = Rio.createWriter(RDFFormat.TURTLE, out); + + conn.begin(); + writer.startRDF(); + + try (RepositoryResult statements = + conn.getStatements(null, null, null, false, ctxInternal)) { + for (Statement st : statements) { + // Re-emit as a context-free statement so the writer never + // even sees the graph — belt and braces alongside Turtle's + // own lack of context support. + writer.handleStatement( + vf.createStatement(st.getSubject(), st.getPredicate(), st.getObject())); + } + } + + writer.endRDF(); + conn.commit(); + } catch (Exception e) { + throw new ImportException("Export failed: " + e.getMessage()); + } + } + + public void exportBackup(OutputStream zipOut) { + Repository repo = ProjectContext.getRepository(); + if (repo == null) { + throw new ImportException("No project opened"); + } + + String projectName = projectService.readCurrentProject().name; + IRI ctxInternal = dsService.getGraphIri(projectName + "_internal"); // ✅ + IRI ctxMeta = vf.createIRI(RdfContexts.CTX_META); + IRI ctxProjectMeta = projectService.getMetadataContext(projectName, vf); // ✅ ajouté + + try (RepositoryConnection conn = repo.getConnection()) { + ZipOutputStream zip = new ZipOutputStream(zipOut); + zip.putNextEntry(new ZipEntry(projectName+"/project-backup.trig")); + + RDFWriter writer = Rio.createWriter(RDFFormat.TRIG, zip); + + conn.begin(); + writer.startRDF(); + + try (RepositoryResult statements = + conn.getStatements(null, null, null, false, ctxInternal, ctxMeta,ctxProjectMeta)) { + for (Statement st : statements) { + writer.handleStatement(st); // keep context — this is a quad export + } + } + + writer.endRDF(); + conn.commit(); + + zip.closeEntry(); + zip.finish(); + } catch (Exception e) { + throw new ImportException("Backup export failed: " + e.getMessage()); + } + } +} diff --git a/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/FileImportService.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/FileImportService.java new file mode 100644 index 00000000..06f6c0f7 --- /dev/null +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/FileImportService.java @@ -0,0 +1,144 @@ +package fr.cnrs.lacito.fieldarchive.services; + +import fr.cnrs.lacito.fieldarchive.core.ProjectContext; +import fr.cnrs.lacito.fieldarchive.dtos.ImportResult; +import fr.cnrs.lacito.fieldarchive.exceptions.ImportException; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.repository.Repository; +import org.eclipse.rdf4j.repository.RepositoryConnection; +import org.eclipse.rdf4j.repository.util.RDFInserter; +import org.eclipse.rdf4j.rio.RDFFormat; +import org.eclipse.rdf4j.rio.RDFParseException; +import org.eclipse.rdf4j.rio.RDFParser; +import org.eclipse.rdf4j.rio.Rio; +import org.eclipse.rdf4j.rio.helpers.BasicParserSettings; +import org.springframework.stereotype.Service; + +import java.io.InputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; + +@Service +public class FileImportService { + + private static final ValueFactory vf = SimpleValueFactory.getInstance(); + private final ProjectService projectService; + private final DataSourceService dsService; + private final BuiltinOntologyService builtinOntologyService; // ✅ pour recharger RICO après restauration + + public FileImportService(ProjectService projectService, + DataSourceService dsService, + BuiltinOntologyService builtinOntologyService + ) { + this.projectService = projectService; + this.dsService = dsService; + this.builtinOntologyService = builtinOntologyService; + } + + public ImportResult importTurtle(InputStream ttlStream, String baseURI) { + Repository repo = ProjectContext.getRepository(); + if (repo == null) { + throw new ImportException("No project opened"); + } +// IRI CTX_INTERNAL = SimpleValueFactory.getInstance() +// .createIRI("http://fieldarchive.local/source/" + sourceName); +// IRI CTX_INTERNAL = vf.createIRI("urn:datasource:"+this.projectService.readCurrentProject().prefix+"_internal"); + String projectName = projectService.readCurrentProject().name; + IRI CTX_INTERNAL = dsService.getGraphIri(projectName + "_internal"); // ✅ lu depuis les métadonnées + + try (RepositoryConnection conn = repo.getConnection()) { + conn.begin(); + + // Re-import semantics: wipe the named graph before reloading +// conn.clear(CTX_INTERNAL); + + RDFInserter inserter = new RDFInserter(conn); + inserter.enforceContext(CTX_INTERNAL); // force every triple into this named graph + + RDFParser parser = Rio.createParser(RDFFormat.TURTLE); + parser.setRDFHandler(inserter); + parser.getParserConfig() + .set(BasicParserSettings.VERIFY_RELATIVE_URIS, false); + + parser.parse(ttlStream, baseURI); + + conn.commit(); + return ImportResult.success(CTX_INTERNAL.stringValue(), conn.size(CTX_INTERNAL)); + } catch (RDFParseException e) { + // line/column info is on the exception — surface it to the frontend + throw new ImportException(e.getLineNumber(), e.getColumnNumber(), e.getMessage()); + } catch (Exception e) { + throw new ImportException("Import failed: " + e.getMessage()); + } + } + + /* Restaure un projet depuis un backup (.zip contenant un .trig avec + * les graphes InternalDataSource + métadonnées projet/datasource). + * Le nom du projet est déduit du chemin interne du zip + * (dossier parent de project-backup.trig), pas du nom de fichier uploadé. + */ + public ImportResult importBackup(InputStream zipStream) { + byte[] trigContent = null; + String projectName = null; + + try (ZipInputStream zip = new ZipInputStream(zipStream)) { + ZipEntry entry; + while ((entry = zip.getNextEntry()) != null) { + if (entry.getName().endsWith("project-backup.trig")) { + // ex: "archive2025/project-backup.trig" → "archive2025" + String entryPath = entry.getName(); + int slash = entryPath.lastIndexOf('/'); + if (slash <= 0) { + throw new ImportException("Invalid Backup Project : Can't find project's name."); + } + projectName = entryPath.substring(0, slash); + + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + zip.transferTo(buffer); + trigContent = buffer.toByteArray(); + break; + } + } + } catch (Exception e) { + throw new ImportException("Cannot read the archive : " + e.getMessage()); + } + + if (trigContent == null || projectName == null) { + throw new ImportException("No file project-backup.trig found."); + } + + // 1) Create a new empty repo (fails if already exists) + projectService.initEmptyProjectRepository(projectName, true); + + Repository repo = ProjectContext.getRepository(); + + try (RepositoryConnection conn = repo.getConnection()) { + conn.begin(); + + try (InputStream trigStream = new ByteArrayInputStream(trigContent)) { + RDFParser parser = Rio.createParser(RDFFormat.TRIG); + parser.getParserConfig().set(BasicParserSettings.VERIFY_URI_SYNTAX, false); // ✅ tolère les IRIs non strictement conformes (double '#') + parser.getParserConfig().set(BasicParserSettings.VERIFY_RELATIVE_URIS, false); + + RDFInserter inserter = new RDFInserter(conn); // pas de enforceContext() : conserve les graphes tels qu'écrits dans le .trig + parser.setRDFHandler(inserter); + parser.parse(trigStream, ""); + } + + conn.commit(); + } catch (Exception e) { + throw new ImportException("Failed to extract backup project's content: " + e.getMessage()); + } + + // 3) Recharger l'ontologie RICO — absente du backup, l'app en a besoin. + // ensureRicoLoaded() est idempotent : il ne réécrit rien si déjà présent. + builtinOntologyService.ensureRicoLoaded(); + + return ImportResult.success(projectName, repo.getConnection().size()); + } + +} diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/services/OntologyService.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/OntologyService.java similarity index 95% rename from RDF_Back/src/main/java/com/uspn/rdf_back/services/OntologyService.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/OntologyService.java index 66b18faf..98577bd2 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/services/OntologyService.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/OntologyService.java @@ -1,12 +1,12 @@ -package com.uspn.rdf_back.services; - -import com.uspn.rdf_back.core.ProjectContext; -import com.uspn.rdf_back.core.RdfContexts; -import com.uspn.rdf_back.core.RdfNamespaces; -import com.uspn.rdf_back.dtos.OntologyLabelDto; -import com.uspn.rdf_back.dtos.SaveOntologyLabelRequest; -import com.uspn.rdf_back.exception.BadRequestException; -import com.uspn.rdf_back.exception.NotFoundException; +package fr.cnrs.lacito.fieldarchive.services; + +import fr.cnrs.lacito.fieldarchive.core.ProjectContext; +import fr.cnrs.lacito.fieldarchive.core.RdfContexts; +import fr.cnrs.lacito.fieldarchive.core.RdfNamespaces; +import fr.cnrs.lacito.fieldarchive.dtos.OntologyLabelDto; +import fr.cnrs.lacito.fieldarchive.dtos.SaveOntologyLabelRequest; +import fr.cnrs.lacito.fieldarchive.exception.BadRequestException; +import fr.cnrs.lacito.fieldarchive.exception.NotFoundException; import org.eclipse.rdf4j.model.IRI; import org.eclipse.rdf4j.model.Statement; import org.eclipse.rdf4j.model.Value; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/services/ProjectService.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/ProjectService.java similarity index 77% rename from RDF_Back/src/main/java/com/uspn/rdf_back/services/ProjectService.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/ProjectService.java index 223e446a..8a2d100a 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/services/ProjectService.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/ProjectService.java @@ -1,10 +1,10 @@ -package com.uspn.rdf_back.services; +package fr.cnrs.lacito.fieldarchive.services; -import com.uspn.rdf_back.core.ProjectContext; -import com.uspn.rdf_back.core.RdfContexts; -import com.uspn.rdf_back.core.RdfNamespaces; -import com.uspn.rdf_back.dtos.ProjectDto; -import com.uspn.rdf_back.dtos.UpdateProjectObject; +import fr.cnrs.lacito.fieldarchive.core.ProjectContext; +import fr.cnrs.lacito.fieldarchive.core.RdfContexts; +import fr.cnrs.lacito.fieldarchive.core.RdfNamespaces; +import fr.cnrs.lacito.fieldarchive.dtos.CreateInternalDataSourceRequest; +import fr.cnrs.lacito.fieldarchive.dtos.ProjectDto; import org.eclipse.rdf4j.model.IRI; import org.eclipse.rdf4j.model.ValueFactory; import org.eclipse.rdf4j.model.vocabulary.DCTERMS; @@ -31,26 +31,90 @@ @Service public class ProjectService { + private final DataSourceService dsService ; + private static final IRI TYPE_PROJECT = org.eclipse.rdf4j.model.impl.SimpleValueFactory.getInstance() .createIRI(RdfNamespaces.APP, "Project"); - public ProjectService(BuiltinOntologyService builtinOntologyService) { + private static final IRI PROP_PREFIX = org.eclipse.rdf4j.model.impl.SimpleValueFactory.getInstance() + .createIRI(RdfNamespaces.APP, "prefix"); + + public ProjectService(BuiltinOntologyService builtinOntologyService, DataSourceService dsService ) { this.builtinOntologyService = builtinOntologyService; + this.dsService = dsService; + } + + private IRI projectIri(String projectName, ValueFactory vf) { + return vf.createIRI(RdfNamespaces.APP + "/projects#" + projectName); } - private IRI projectIri(ValueFactory vf, String projectName) { - return vf.createIRI(RdfNamespaces.APP + "project/" + projectName); + private IRI metadataCtx(String projectName, ValueFactory vf) { + return vf.createIRI(RdfNamespaces.APP + "/projects#" +projectName+"/metadata"); } - private IRI metadataCtx(ValueFactory vf) { - return vf.createIRI(RdfContexts.CTX_META); + public IRI getMetadataContext(String projectName, ValueFactory vf) { + return metadataCtx(projectName, vf); } private final BuiltinOntologyService builtinOntologyService; + + public void initEmptyProjectRepository(String name, boolean persistent) { + if (name == null || name.isBlank()) { + throw new IllegalArgumentException("Project's name should not be empty !"); + } + + Path path = Paths.get("projects", name); + if (Files.exists(path)) { + throw new IllegalArgumentException("A project with name \"" + name + "\" already exists."); + } + + ProjectContext.close(); + + Repository repo = createRepository(name, persistent); + repo.init(); + ProjectContext.set(repo, name); + } + + + public ProjectDto createProject(String name, boolean persistent, String description, String prefix) { + + if (name == null || name.isBlank()) { + throw new IllegalArgumentException("Project's name should not be empty !"); + } + + // 1) Fermer un projet déjà ouvert + ProjectContext.close(); + + // 2) Créer / ouvrir le store + Repository repo = createRepository(name, persistent); + repo.init(); + ProjectContext.set(repo, name); + + try { + // 3) Écrire (ou mettre à jour) les métadonnées RDF du projet + upsertProjectMetadata(name, description, prefix); + + // 4) Charger automatiquement RiC-O dans le projet + builtinOntologyService.ensureRicoLoaded(); + + CreateInternalDataSourceRequest dataSourceCreationRequest = new CreateInternalDataSourceRequest(name+"_internal",name+" internal DataSource ",""); + this.dsService.createInternalDataSource(dataSourceCreationRequest); + + // 5) Retour DTO + return readCurrentProject(); + } + + catch (RuntimeException e) { + ProjectContext.close(); + throw e; + } + + } + /** * Ouvre (ou crée) le repository RDF4J du projet et écrit les métadonnées du projet en RDF. */ - public ProjectDto openProject(String name, boolean persistent, String description) { + public ProjectDto openProject(String name, boolean persistent, String description, String prefix) { if (name == null || name.isBlank()) { throw new IllegalArgumentException("Project's name should not be empty !"); } @@ -65,7 +129,7 @@ public ProjectDto openProject(String name, boolean persistent, String descriptio try { // 3) Écrire (ou mettre à jour) les métadonnées RDF du projet - upsertProjectMetadata(name, description); + upsertProjectMetadata(name, description, prefix ); // 4) Charger automatiquement RiC-O dans le projet builtinOntologyService.ensureRicoLoaded(); @@ -90,6 +154,9 @@ public void deleteProject(String projectName) throws IOException { if (projectName == null || projectName.isBlank()) { throw new IllegalArgumentException("Project name must not be empty"); } + if (projectName.equals(ProjectContext.getProjectName())) { + ProjectContext.close(); + } Path path = Paths.get("projects", projectName); @@ -115,12 +182,12 @@ public void deleteProject(String projectName) throws IOException { } } - private void upsertProjectMetadata(String projectName, String description) { + private void upsertProjectMetadata(String projectName, String description, String prefix) { Repository repo = ProjectContext.getRepository(); try (RepositoryConnection conn = repo.getConnection()) { ValueFactory vf = conn.getValueFactory(); - IRI project = projectIri(vf, projectName); - IRI ctx = metadataCtx(vf); + IRI project = projectIri(projectName,vf); + IRI ctx = metadataCtx(projectName,vf); String now = OffsetDateTime.now().format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); String today = LocalDate.now().toString(); @@ -148,6 +215,11 @@ private void upsertProjectMetadata(String projectName, String description) { conn.add(project, DCTERMS.DESCRIPTION, vf.createLiteral(description), ctx); } + if (prefix != null) { + conn.remove(project, PROP_PREFIX, null, ctx); + conn.add(project, PROP_PREFIX, vf.createLiteral(prefix), ctx); + } + conn.commit(); } } @@ -203,9 +275,9 @@ public void updateProject(String oldName, String newName, String newDescription) try (RepositoryConnection conn = repo.getConnection()) { ValueFactory vf = conn.getValueFactory(); - IRI oldProject = projectIri(vf, oldName); - IRI newProject = projectIri(vf, newName); - IRI ctx = metadataCtx(vf); + IRI oldProject = projectIri(oldName,vf); + IRI newProject = projectIri(newName,vf); + IRI ctx = metadataCtx(newName,vf); conn.begin(); @@ -255,8 +327,8 @@ public ProjectDto readCurrentProject() { try (RepositoryConnection conn = ProjectContext.getRepository().getConnection()) { ValueFactory vf = conn.getValueFactory(); - IRI project = projectIri(vf, name); - IRI ctx = metadataCtx(vf); + IRI project = projectIri(name,vf); + IRI ctx = metadataCtx(name,vf); // read description var descSt = conn.getStatements(project, DCTERMS.DESCRIPTION, null, ctx).stream().findFirst().orElse(null); @@ -267,6 +339,11 @@ public ProjectDto readCurrentProject() { var modifiedSt = conn.getStatements(project, DCTERMS.MODIFIED, null, ctx).stream().findFirst().orElse(null); dto.modified = (modifiedSt != null) ? modifiedSt.getObject().stringValue() : null; + + var prefix = conn.getStatements(project, PROP_PREFIX, null, ctx).stream().findFirst().orElse(null); + dto.prefix = (prefix != null) ? prefix.getObject().stringValue() : null; + + } return dto; @@ -338,6 +415,8 @@ public List> listProjectsDetailed() { info.put("description", null); info.put("created", null); info.put("lastModified", new java.util.Date(dir.lastModified())); + info.put("prefix", "NOT_FOUND"); + } finally { tempRepo.shutDown(); } @@ -354,12 +433,14 @@ public List> listProjectsDetailed() { private void readMetadataFromRepo(Repository repo, String projectName, Map info) { try (RepositoryConnection conn = repo.getConnection()) { ValueFactory vf = conn.getValueFactory(); - IRI project = projectIri(vf, projectName); // même helper que upsertProjectMetadata - IRI ctx = metadataCtx(vf); // même helper que upsertProjectMetadata + IRI project = projectIri(projectName,vf); // même helper que upsertProjectMetadata + IRI ctx = metadataCtx(projectName,vf); // même helper que upsertProjectMetadata info.put("description", getStringValue(conn, project, DCTERMS.DESCRIPTION, ctx)); info.put("created", getStringValue(conn, project, DCTERMS.CREATED, ctx)); info.put("lastModified", getStringValue(conn, project, DCTERMS.MODIFIED, ctx)); + info.put("prefix", getStringValue(conn, project, PROP_PREFIX, ctx)); + } } diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/services/RdfEntityService.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/RdfEntityService.java similarity index 72% rename from RDF_Back/src/main/java/com/uspn/rdf_back/services/RdfEntityService.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/RdfEntityService.java index f6a276d1..238990b5 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/services/RdfEntityService.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/RdfEntityService.java @@ -1,10 +1,12 @@ -package com.uspn.rdf_back.services; - -import com.uspn.rdf_back.core.ProjectContext; -import com.uspn.rdf_back.core.RdfNamespaces; -import com.uspn.rdf_back.dtos.*; -import com.uspn.rdf_back.exception.BadRequestException; -import com.uspn.rdf_back.exception.NotFoundException; +package fr.cnrs.lacito.fieldarchive.services; + +import fr.cnrs.lacito.fieldarchive.core.ProjectContext; +import fr.cnrs.lacito.fieldarchive.core.RdfContexts; +import fr.cnrs.lacito.fieldarchive.core.RdfNamespaces; +import fr.cnrs.lacito.fieldarchive.dtos.*; +import fr.cnrs.lacito.fieldarchive.dtos.*; +import fr.cnrs.lacito.fieldarchive.exception.BadRequestException; +import fr.cnrs.lacito.fieldarchive.exception.NotFoundException; import org.eclipse.rdf4j.model.*; import org.eclipse.rdf4j.model.impl.SimpleValueFactory; import org.eclipse.rdf4j.model.vocabulary.RDF; @@ -17,24 +19,46 @@ @Service public class RdfEntityService { - private static final String ENTITY_NS = RdfNamespaces.APP + "entity/"; - private IRI iriFromKey(String key) { - return vf.createIRI(ENTITY_NS + key); + private static final ValueFactory vf = SimpleValueFactory.getInstance(); + + private final ProjectService projectService; + private final DataSourceService dsService; + + public RdfEntityService(ProjectService projectService, DataSourceService dsService) { + this.projectService = projectService; + this.dsService = dsService; + } + private IRI internalCtx() { + String projectName = projectService.readCurrentProject().name; + return dsService.getGraphIri(projectName + "_internal"); + } + + private IRI iriFromKey(String entityIri, String key) { + String entityTypeName = entityIri.replace(RdfNamespaces.RICO,""); + ProjectDto currentProject = this.projectService.readCurrentProject(); + return vf.createIRI(currentProject.prefix + '/' + entityTypeName +'/' + key); } private String keyFromIri(IRI iri) { String s = iri.stringValue(); - if (!s.startsWith(ENTITY_NS)) { - throw new IllegalArgumentException("IRI invalide: " + s); + String entityNs = projectService.readCurrentProject().prefix; + +// || !s.startsWith(entityNs) + if (entityNs == null ) { + throw new IllegalArgumentException("invalid IRI: " + s); + } + + int lastSlash = s.lastIndexOf('/'); + + if (lastSlash == -1 || lastSlash == s.length() - 1) { + throw new IllegalArgumentException("IRI mal formée (pas de clé): " + s); } - return s.substring(ENTITY_NS.length()); + + return s.substring(lastSlash + 1); } - private static final ValueFactory vf = SimpleValueFactory.getInstance(); - // Graphe interne éditable (aligné avec ton implémentation actuelle) - private static final IRI CTX_INTERNAL = vf.createIRI("urn:datasource:internal"); // Prefixes acceptés par l’API (CURIE -> IRI) private static final Map PREFIX = Map.of( @@ -71,6 +95,8 @@ private String expand(String iriOrCurie) { private boolean isInternalEntity(RepositoryConnection conn, IRI subject) { // Si l'entité a au moins un triplet dans le graphe interne, on la considère interne/éditable + IRI CTX_INTERNAL = internalCtx(); + try (var stmts = conn.getStatements(subject, null, null, CTX_INTERNAL)) { return stmts.hasNext(); } @@ -123,17 +149,18 @@ public List listTypes() { // ========================= public RdfEntityDto create(CreateRdfEntityRequest req) { requireProjectOpen(); - if (req == null) throw new BadRequestException("Body manquant."); + if (req == null) throw new BadRequestException("Body is missing."); if (req.types == null || req.types.isEmpty()) { - throw new BadRequestException("types obligatoire (au moins 1 rdf:type)."); + throw new BadRequestException("Entity type is mandatory (at least one)"); } String entityKey = UUID.randomUUID().toString(); - IRI subject = iriFromKey(entityKey); + IRI subject = iriFromKey(req.types.get(0),entityKey); try (RepositoryConnection conn = ProjectContext.getRepository().getConnection()) { conn.begin(); + IRI CTX_INTERNAL = internalCtx(); // rdf:type for (String t : req.types) { @@ -151,7 +178,7 @@ public RdfEntityDto create(CreateRdfEntityRequest req) { conn.commit(); } - return getByKey(entityKey); + return getByIri(subject); } @@ -163,7 +190,7 @@ private void addProperty(RepositoryConnection conn, IRI subject, RdfPropertyDto if (p.kind == null || p.kind.isBlank()) { throw new BadRequestException("Predicate's kind is mandatory (literal|iri)."); } - + IRI CTX_INTERNAL = internalCtx(); IRI pred = vf.createIRI(expand(p.predicate)); if ("iri".equalsIgnoreCase(p.kind)) { @@ -198,7 +225,7 @@ public List listByType(String typeCurieOrIri) { requireProjectOpen(); if (typeCurieOrIri == null || typeCurieOrIri.isBlank()) { - throw new BadRequestException("Paramètre type obligatoire."); + throw new BadRequestException("Type parameter is mandatory."); } IRI typeIri = vf.createIRI(expand(typeCurieOrIri)); @@ -235,19 +262,66 @@ public List listByType(String typeCurieOrIri) { // ========================= // READ ONE // ========================= +// public RdfEntityDto getByKey(String key) { +// requireProjectOpen(); +// if (key == null || key.isBlank()) { +// throw new BadRequestException("entityKey manquant."); +// } +// IRI subject = iriFromKey(key); +// return getByIri(subject); +// } + + public String getNameOfEntityByIri(IRI subject) { + requireProjectOpen(); + if (subject == null) { + throw new BadRequestException("IRI manquant."); + } + try (RepositoryConnection conn = ProjectContext.getRepository().getConnection()) { + boolean exists; + try (var st = conn.getStatements(subject, null, null)) { + exists = st.hasNext(); + } + if (!exists) throw new NotFoundException("Entité introuvable: " + subject.stringValue()); + IRI CTX_INTERNAL = internalCtx(); + // properties (on renvoie tout ce qu’on trouve) + // Lire toutes les propriétés + try (var stmts = conn.getStatements(subject, null, null, CTX_INTERNAL)) { + while (stmts.hasNext()) { + Statement st = stmts.next(); + IRI pred = st.getPredicate(); + Value obj = st.getObject(); + + // Ignore rdf:type (déjà traité) + String predicateString = pred.stringValue(); + if (!predicateString.equals("https://www.ica.org/standards/RiC/ontology#name") ) continue; + + + if (obj.isLiteral()) { + Literal lit = (Literal) obj; + return lit.getLabel(); + + } + + + } + } + } + return ""; + + } + public RdfEntityDto getByKey(String key) { - requireProjectOpen(); if (key == null || key.isBlank()) { - throw new BadRequestException("entityKey manquant."); + throw new BadRequestException("IRI is missing."); } - IRI subject = iriFromKey(key); - return getByIri(subject); + return getByIri(vf.createIRI(key)); } + public RdfEntityDto getByIri(IRI subject) { requireProjectOpen(); if (subject == null) { - throw new BadRequestException("IRI manquant."); + throw new BadRequestException("IRI is missing."); } try (RepositoryConnection conn = ProjectContext.getRepository().getConnection()) { @@ -273,6 +347,7 @@ public RdfEntityDto getByIri(IRI subject) { // properties (on renvoie tout ce qu’on trouve) // Lire toutes les propriétés + IRI CTX_INTERNAL = internalCtx(); try (var stmts = conn.getStatements(subject, null, null, CTX_INTERNAL)) { while (stmts.hasNext()) { Statement st = stmts.next(); @@ -288,6 +363,7 @@ public RdfEntityDto getByIri(IRI subject) { if (obj.isIRI()) { p.kind = "iri"; p.value = obj.stringValue(); + p.name = this.getNameOfEntityByIri((IRI) obj); } else if (obj.isLiteral()) { Literal lit = (Literal) obj; @@ -318,18 +394,18 @@ public RdfEntityDto getByIri(IRI subject) { // ========================= // UPDATE (interne uniquement) // ========================= - public RdfEntityDto updateByKey(String key, UpdateRdfEntityRequest req) { + public RdfEntityDto updateByKey(String entityIri, UpdateRdfEntityRequest req) { requireProjectOpen(); - if (key == null || key.isBlank()) { + if (entityIri == null || entityIri.isBlank()) { throw new BadRequestException("entityKey manquant."); } if (req == null) { throw new BadRequestException("Body manquant."); } - IRI subject = iriFromKey(key); + IRI subject = vf.createIRI(entityIri); try (RepositoryConnection conn = ProjectContext.getRepository().getConnection()) { @@ -339,7 +415,7 @@ public RdfEntityDto updateByKey(String key, UpdateRdfEntityRequest req) { exists = st.hasNext(); } if (!exists) { - throw new NotFoundException("Entité introuvable: " + key); + throw new NotFoundException("Entity not found : " + entityIri); } // 2 Vérifier éditable @@ -360,7 +436,7 @@ public RdfEntityDto updateByKey(String key, UpdateRdfEntityRequest req) { } IRI pred = vf.createIRI(expand(p.predicate)); - + IRI CTX_INTERNAL = internalCtx(); // Supprimer anciennes valeurs dans le graphe interne conn.remove(subject, pred, null, CTX_INTERNAL); @@ -377,20 +453,20 @@ public RdfEntityDto updateByKey(String key, UpdateRdfEntityRequest req) { conn.commit(); } - return getByKey(key); + return getByIri(subject); } // DELETE (interne uniquement) // ========================= - public void deleteByKey(String key) { + public void deleteByKey(String entityIri) { requireProjectOpen(); - if (key == null || key.isBlank()) { + if (entityIri == null || entityIri.isBlank()) { throw new BadRequestException("entityKey manquant."); } - IRI subject = iriFromKey(key); + IRI subject = vf.createIRI(entityIri); try (RepositoryConnection conn = ProjectContext.getRepository().getConnection()) { @@ -400,16 +476,16 @@ public void deleteByKey(String key) { exists = st.hasNext(); } if (!exists) { - throw new NotFoundException("Entité introuvable: " + key); + throw new NotFoundException("Entity not found: " + entityIri); } // 2 Vérifier éditable if (!isInternalEntity(conn, subject)) { throw new BadRequestException( - "Suppression interdite : entité provenant d'une source externe." + "Deletion of entity is not allowed : Entity is from an external DataSource" ); } - + IRI CTX_INTERNAL = internalCtx(); conn.begin(); // 3 Supprimer UNIQUEMENT dans la source interne //Supprimer tous les triplets où l'entité est SUJET @@ -428,16 +504,13 @@ public void deleteByKey(String key) { private void touchInternalDataSource(RepositoryConnection conn) { - IRI ctxMeta = vf.createIRI("urn:datasource:meta"); - IRI ds = vf.createIRI("http://uspn.fr/app#datasource/internal"); + IRI ctxMeta = vf.createIRI(RdfContexts.CTX_META); + String projectName = projectService.readCurrentProject().name; + IRI ds = vf.createIRI(RdfNamespaces.APP + "/datasource/" + projectName + "_internal"); String now = OffsetDateTime.now().toString(); - conn.remove(ds, vf.createIRI("http://purl.org/dc/terms/modified"), null, ctxMeta); - conn.add(ds, - vf.createIRI("http://purl.org/dc/terms/modified"), - vf.createLiteral(now), - ctxMeta); + conn.add(ds, vf.createIRI("http://purl.org/dc/terms/modified"), vf.createLiteral(now), ctxMeta); } } \ No newline at end of file diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/services/SparqlService.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/SparqlService.java similarity index 94% rename from RDF_Back/src/main/java/com/uspn/rdf_back/services/SparqlService.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/SparqlService.java index 0b0b211f..31f15a8c 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/services/SparqlService.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/services/SparqlService.java @@ -1,7 +1,7 @@ -package com.uspn.rdf_back.services; +package fr.cnrs.lacito.fieldarchive.services; -import com.uspn.rdf_back.core.ProjectContext; -import com.uspn.rdf_back.exception.BadRequestException; +import fr.cnrs.lacito.fieldarchive.core.ProjectContext; +import fr.cnrs.lacito.fieldarchive.exception.BadRequestException; import org.eclipse.rdf4j.query.QueryLanguage; import org.eclipse.rdf4j.query.TupleQueryResult; import org.eclipse.rdf4j.query.Update; diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/utils/CsvFileHandler.java b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/utils/CsvFileHandler.java similarity index 95% rename from RDF_Back/src/main/java/com/uspn/rdf_back/utils/CsvFileHandler.java rename to Backend/src/main/java/fr/cnrs/lacito/fieldarchive/utils/CsvFileHandler.java index e9b08343..e08e2547 100644 --- a/RDF_Back/src/main/java/com/uspn/rdf_back/utils/CsvFileHandler.java +++ b/Backend/src/main/java/fr/cnrs/lacito/fieldarchive/utils/CsvFileHandler.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back.utils; +package fr.cnrs.lacito.fieldarchive.utils; import org.springframework.stereotype.Service; diff --git a/RDF_Back/src/main/resources/application.properties b/Backend/src/main/resources/application.properties similarity index 100% rename from RDF_Back/src/main/resources/application.properties rename to Backend/src/main/resources/application.properties diff --git a/RDF_Back/src/main/resources/ontologies/rico.rdf b/Backend/src/main/resources/ontologies/rico.rdf similarity index 100% rename from RDF_Back/src/main/resources/ontologies/rico.rdf rename to Backend/src/main/resources/ontologies/rico.rdf diff --git a/RDF_Back/src/test/java/com/uspn/rdf_back/RdfBackApplicationTests.java b/Backend/src/test/java/fr/cnrs/lacito/fieldarchive/RdfBackApplicationTests.java similarity index 83% rename from RDF_Back/src/test/java/com/uspn/rdf_back/RdfBackApplicationTests.java rename to Backend/src/test/java/fr/cnrs/lacito/fieldarchive/RdfBackApplicationTests.java index c5393b19..b83affd2 100644 --- a/RDF_Back/src/test/java/com/uspn/rdf_back/RdfBackApplicationTests.java +++ b/Backend/src/test/java/fr/cnrs/lacito/fieldarchive/RdfBackApplicationTests.java @@ -1,4 +1,4 @@ -package com.uspn.rdf_back; +package fr.cnrs.lacito.fieldarchive; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; diff --git a/data/rdf-store/values.hash b/Doc/.DS_Store similarity index 70% rename from data/rdf-store/values.hash rename to Doc/.DS_Store index 64c96186..d869d0ff 100644 Binary files a/data/rdf-store/values.hash and b/Doc/.DS_Store differ diff --git a/Doc/InverseProperty/.~lock.inverse.csv# b/Doc/InverseProperty/.~lock.inverse.csv# new file mode 100644 index 00000000..3f96e254 --- /dev/null +++ b/Doc/InverseProperty/.~lock.inverse.csv# @@ -0,0 +1 @@ +,sloiseau,macbook-air-de-sylvain-loiseau.home,15.07.2026 18:22,file:///Users/sloiseau/Library/Application%20Support/LibreOffice/4; \ No newline at end of file diff --git a/Doc/InverseProperty/InverseRelation.csv b/Doc/InverseProperty/InverseRelation.csv new file mode 100644 index 00000000..2f0d9b88 --- /dev/null +++ b/Doc/InverseProperty/InverseRelation.csv @@ -0,0 +1,494 @@ +"Relation +ID ",Domain ,"ID of +domain ",Name ,"ID of +range ",Range ,"Inverse relation ID +and name" +"RiC- +R009i ",Thing ,RiC-E01 ,follows in time ,RiC-E01 ,Thing ,"RiC-R009 precedes in +time" +"RiC- +R008i ",Thing ,RiC-E01 ,follows or followed ,RiC-E01 ,Thing ,"RiC-R008 precedes or +preceded" +RiC-R002 ,Thing ,RiC-E01 ,has or had part ,RiC-E01 ,Thing ,"RiC-R002i is or was +part of" +"RiC- +R002i ",Thing ,RiC-E01 ,is or was part of ,RiC-E01 ,Thing ,"RiC-R002 has or had +part" +RiC-R001 ,Thing ,RiC-E01 ,is related to ,RiC-E01 ,Thing ,RiC-R001 is related to +RiC-R009 ,Thing ,RiC-E01 ,precedes in time ,RiC-E01 ,Thing ,"RiC-R009i follows in +time" +RiC-R008 ,Thing ,RiC-E01 ,"precedes or +preceded ",RiC-E01 ,Thing ,"RiC-R008i follows or +followed" +"RiC- +R021i ",Thing ,RiC-E01 ,"is or was described +by ",RiC-E02 ,"Record +Resource","RiC-R021 describes or +described" +"RiC- +R020i ",Thing ,RiC-E01 ,"is or was main +subject of ",RiC-E02 ,"Record +Resource","RiC-R020 has or had +main subject" +"RiC- +R019i ",Thing ,RiC-E01 ,is or was subject of ,RiC-E02 ,"Record +Resource","RiC-R019 has or had +subject" +"RiC- +R036i ",Thing ,RiC-E01 ,"is or was under +authority of ",RiC-E07 ,Agent ,"RiC-R036 has or had +authority over" +"RiC- +R037i ",Thing ,RiC-E01 ,has or had owner,"RiC-E08; +RiC-E09; +RiC-E12","Person; +Group; +Position","RiC-R037 is or was +owner of" +"RiC- +R057i ",Thing ,RiC-E01 ,"is associated with +event",RiC-E14 ,Event ,"RiC-R057 is event +associated with" +"RiC- +R059i ",Thing ,RiC-E01 ,"is or was affected +by ",RiC-E14 ,Event ,"RiC-R059 affects or +affected" +"RiC- +R058i ",Thing ,RiC-E01 ,"is or was +participant in ",RiC-E14 ,Event ,"RiC-R058 has or had +participant" +"RiC- +R061i ",Thing ,RiC-E01 ,"results or resulted +from ",RiC-E14 ,Event ,"RiC-R061 results or +resulted in" +"RiC- +R062i ",Thing ,RiC-E01 ,"is associated with +rule ",RiC-E16 ,Rule ,"RiC-R062 is rule +associated with" +"RiC- +R063i ",Thing ,RiC-E01 ,"is or was regulated +by ",RiC-E16 ,Rule ,"RiC-R063 regulates or +regulated" +"RiC- +R069i ",Thing ,RiC-E01 ,has beginning date ,RiC-E18 ,Date ,"RiC-R069 is beginning +date of" +"RiC- +R071i ",Thing ,RiC-E01 ,has end date ,RiC-E18 ,Date ,"RiC-R071 is end date +of" +"RiC- +R073i ",Thing ,RiC-E01 ,"has modification +date ",RiC-E18 ,Date ,"RiC-R073 is +modification date of" +"RiC- +R068i ",Thing ,RiC-E01 ,"is associated with +date ",RiC-E18 ,Date ,"RiC-R068 is date +associated with" +"RiC- +R075i ",Thing ,RiC-E01 ,has or had location ,RiC-E22 ,Place ,"RiC-R075 is or was +location of" +"RiC- +R074i ",Thing ,RiC-E01 ,"is associated with +place ",RiC-E22 ,Place ,"RiC-R074 is place +associated with" +RiC-R021 ,"Record +Resource ",RiC-E02 ,"describes or +described ",RiC-E01 ,Thing ,"RiC-R021i is or was +described by" +RiC-R020 ,"Record +Resource ",RiC-E02 ,"has or had main +subject ",RiC-E01 ,Thing ,"RiC-R020i is or was +main subject of" +RiC-R019 ,"Record +Resource ",RiC-E02 ,has or had subject ,RiC-E01 ,Thing ,"RiC-R019i is or was +subject of" +RiC-R012 ,"Record +Resource ",RiC-E02 ,has copy ,RiC-E02 ,"Record +Resource ",RiC-R012i is copy of +RiC-R023 ,"Record +Resource ",RiC-E02 ,"has genetic link to +record resource ",RiC-E02 ,"Record +Resource","RiC-R023 has genetic +link to record +resource" +RiC-R013 ,"Record +Resource ",RiC-E02 ,has reply ,RiC-E02 ,"Record +Resource ",RiC-R013i is reply to +"RiC- +R012i","Record +Resource ",RiC-E02 ,is copy of ,RiC-E02 ,"Record +Resource ",RiC-R012 has copy +RiC-R022 ,"Record +Resource ",RiC-E02,"is record resource +associated with +record resource",RiC-E02 ,"Record +Resource","RiC-R022 is record +resource associated +with record resource" +"RiC- +R013i","Record +Resource ",RiC-E02 ,is reply to ,RiC-E02 ,"Record +Resource ",RiC-R013 has reply +RiC-R025 ,"Record +Resource ",RiC-E02 ,"has or had +instantiation ",RiC-E06 ,Instantiation ,"RiC-R025i is or was +instantiation of" +"RiC- +R064i","Record +Resource ",RiC-E02 ,"expresses or +expressed ",RiC-E16 ,Rule ,"RiC-R064 is or was +expressed by" +RiC-R028,"Record +Resource; +Instantiation","RiC-E02; +RiC-E06 ",has accumulator ,RiC-E07 ,Agent ,"RiC-R028i is +accumulator of" +RiC-R032,"Record +Resource; +Instantiation","RiC-E02; +RiC-E06 ",has addressee ,RiC-E07 ,Agent ,"RiC-R032i is +addressee of" +RiC-R030,"Record +Resource; +Instantiation","RiC-E02; +RiC-E06 ",has collector ,RiC-E07 ,Agent ,"RiC-R030i is collector +of" +RiC-R027,"Record +Resource; +Instantiation","RiC-E02; +RiC-E06 ",has creator ,RiC-E07 ,Agent ,"RiC-R027i is creator +of" +"RiC- +R039i","Record +Resource; +Instantiation","RiC-E02; +RiC-E06 ",has or had holder ,RiC-E07 ,Agent ,"RiC-R039 is or was +holder of" +"RiC- +R038i","Record +Resource; +Instantiation","RiC-E02; +RiC-E06","has or had +manager",RiC-E07 ,Agent ,"RiC-R038 is or was +manager of" +RiC-R026,"Record +Resource; +Instantiation","RiC-E02; +RiC-E06 ",has provenance ,RiC-E07 ,Agent ,"RiC-R026i is +provenance of" +RiC-R029,"Record +Resource; +Instantiation","RiC-E02; +RiC-E06 ",has receiver ,RiC-E07 ,Agent ,"RiC-R029i is receiver +of" +RiC-R031,"Record +Resource; +Instantiation","RiC-E02; +RiC-E06 ",has sender ,RiC-E07 ,Agent ,RiC-R031i is sender of +"RiC- +R040i","Record +Resource; +Instantiation","RiC-E02; +RiC-E06","has or had +intellectual +property rights +holder","RiC-E08; +RiC-E09; +RiC-E12",Agent,"RiC-R040 is or was +holder of intellectual +property rights of" +RiC-R033,"Record +Resource; +Instantiation","RiC-E02; +RiC-E06 ",documents ,RiC-E15 ,Activity ,"RiC-R033i +documented by" +RiC-R024 ,Record Set ,RiC-E03 ,"includes or +included","RiC-E03; +RiC-E04","Record Set; +Record","RiC-R024i is or was +included in" +"RiC- +R024i","Record Set; +Record","RiC-E03; +RiC-E04","is or was included +in ",RiC-E03 ,Record Set ,"RiC-R024 includes or +included" +"RiC- +R011i ",Record ,RiC-E04 ,has draft ,RiC-E04 ,Record ,RiC-R011 is draft of +"RiC- +R010i ",Record ,RiC-E04 ,has original ,RiC-E04 ,Record ,RiC-R010 is original of +RiC-R011 ,Record ,RiC-E04 ,is draft of ,RiC-E04 ,Record ,RiC-R011i has draft +RiC-R010 ,Record ,RiC-E04 ,is original of ,RiC-E04 ,Record ,RiC-R010i has original +RiC-R003 ,Record ,RiC-E04 ,"has or had +constituent ",RiC-E05 ,Record Part ,"RiC-R003i is or was +constituent of" +RiC-R079 ,Record ,RiC-E04 ,has author,"RiC-E08; +RiC-E09; +RiC-E012","Person; +Group; +Position",RiC-R079i is author of +"RiC- +R003i ",Record Part ,RiC-E05 ,"is or was +constituent of ",RiC-E04 ,Record ,"RiC-R003 has or had +constituent" +"RiC- +R025i ",Instantiation ,RiC-E06 ,"Is or was +instantiation of ",RiC-E02 ,"Record +Resource","RiC-R025 has or had +instantiation" +RiC-R014 ,Instantiation ,RiC-E06 ,"has or had derived +instantiation ",RiC-E06 ,Instantiation,"RiC-R014i is or was +derived from +instantiation" +RiC-R004 ,Instantiation ,RiC-E06 ,"has or had +component",RiC-E06 ,Instantiation ,"RiC-R004i is or was +component of" +"RiC- +R014i ",Instantiation ,RiC-E06 ,"is or was derived +from instantiation ",RiC-E06 ,Instantiation ,"RiC-R014 has or had +derived instantiation" +RiC-R035 ,Instantiation ,RiC-E06 ,"is functionally +equivalent to ",RiC-E06 ,Instantiation,"RiC-R035 is +functionally +equivalent to" +RiC-R034 ,Instantiation ,RiC-E06,"is instantiation +associated with +instantiation",RiC-E06 ,Instantiation,"RiC-R034 is +instantiation +associated with +instantiation" +"RiC- +R004i ",Instantiation ,RiC-E06 ,"is or was +component of ",RiC-E06 ,Instantiation ,"RiC-R004 has or had +component" +"RiC- +R015i ",Instantiation ,RiC-E06 ,migrated from ,RiC-E06 ,Instantiation ,"RiC-R015 migrated +into" +RiC-R015 ,Instantiation ,RiC-E06 ,migrated into ,RiC-E06 ,Instantiation ,"RiC-R015i migrated +from" +RiC-R036 ,Agent ,RiC-E07 ,"has or had +authority over ",RiC-E01 ,Thing ,"RiC-R036i is or was +under authority of" +"RiC- +R028i ",Agent ,RiC-E07 ,is accumulator of ,"RiC-E02; +RiC-E06","Record +Resource; +Instantiation","RiC-R028 has +accumulator" +"RiC- +R032i ",Agent ,RiC-E07 ,is addressee of ,"RiC-E02; +RiC-E06","Record +Resource; +Instantiation","RiC-R032 has +addressee" +"RiC- +R030i ",Agent ,RiC-E07 ,is collector of ,"RiC-E02; +RiC-E06","Record +Resource; +Instantiation","RiC-R030 has +collector" +"RiC- +R027i ",Agent ,RiC-E07 ,is creator of ,"RiC-E02; +RiC-E06","Record +Resource; +Instantiation",RiC-R027 has creator +RiC-R039 ,Agent ,RiC-E07 ,is or was holder of ,"RiC-E02; +RiC-E06","Record +Resource; +Instantiation","RiC-R039i has or had +holder" +RiC-R038 ,Agent ,RiC-E07 ,"is or was manager +of","RiC-E02; +RiC-E06","Record +Resource; +Instantiation","RiC-R038i has or had +manager" +"RiC- +R026i ",Agent ,RiC-E07 ,is provenance of ,"RiC-E02; +RiC-E06","Record +Resource; +Instantiation","RiC-R026 has +provenance" +"RiC- +R029i ",Agent ,RiC-E07 ,is receiver of ,"RiC-E02; +RiC-E06","Record +Resource; +Instantiation",RiC-R029 has receiver +"RiC- +R031i ",Agent ,RiC-E07 ,is sender of ,"RiC-E02; +RiC-E06","Record +Resource; +Instantiation",RiC-R031 has sender +"RiC- +R041i ",Agent ,RiC-E07 ,"has or had +controller ",RiC-E07 ,Agent ,"RiC-R041 is or was +controller of" +RiC-R045 ,Agent ,RiC-E07 ,"has or had +subordinate ",RiC-E07 ,Agent ,"RiC-R045i is or was +subordinate to" +RiC-R046 ,Agent ,RiC-E07 ,"has or had work +relation with ",RiC-E07 ,Agent ,"RiC-R046 has or had +work relation with" +RiC-R016 ,Agent ,RiC-E07 ,has successor ,RiC-E07 ,Agent ,"RiC-R016i is +successor of" +RiC-R044 ,Agent ,RiC-E07 ,"is agent associated +with agent ",RiC-E07 ,Agent ,"RiC-R044 is agent +associated with agent" +RiC-R041 ,Agent ,RiC-E07 ,"is or was controller +of ",RiC-E07 ,Agent ,"RiC-R041i has or had +controller" +"RiC- +R045i ",Agent ,RiC-E07 ,"is or was +subordinate to ",RiC-E07 ,Agent ,"RiC-R045 has or had +subordinate" +"RiC- +R016i ",Agent ,RiC-E07 ,is successor of ,RiC-E07 ,Agent ,"RiC-R016 has +successor" +"RiC- +R060i ",Agent ,RiC-E07 ,"performs or +performed ",RiC-E15 ,Activity ,"RiC-R060 is or was +performed by" +"RiC- +R066i ",Agent ,RiC-E07,"is or was +responsible for +enforcing",RiC-E16 ,Rule ,"RiC-R066 is or was +enforced by" +"RiC- +R065i ",Agent ,RiC-E07 ,"is responsible for +issuing ",RiC-E16 ,Rule ,RiC-R065 issued by +"RiC- +R067i ",Agent ,RiC-E07 ,authorized by ,RiC-E17 ,Mandate ,RiC-R067 authorizes +"RiC- +R076i ",Agent ,RiC-E07 ,"has or had +jurisdiction ",RiC-E22 ,Place ,"RiC-R076 is or was +jurisdiction of" +"RiC- +R017i ",Person ,RiC-E08 ,has ancestor ,RiC-E08 ,Person ,"RiC-R017 has +descendant" +RiC-R018 ,Person ,RiC-E08 ,has child ,RiC-E08 ,Person ,RiC-R018i is child of +RiC-R017 ,Person ,RiC-E08 ,has descendant ,RiC-E08 ,Person ,"RiC-R017i has +ancestor" +RiC-R047 ,Person ,RiC-E08 ,"has family +association with ",RiC-E08 ,Person ,"RiC-R047 has family +association with" +RiC-R052 ,Person ,RiC-E08 ,"has or had +correspondent ",RiC-E08 ,Person ,"RiC-R052 has or had +correspondent" +RiC-R049 ,Person ,RiC-E08 ,has or had spouse ,RiC-E08 ,Person ,"RiC-R049 has or had +spouse" +"RiC- +R053i ",Person ,RiC-E08 ,has or had student ,RiC-E08 ,Person ,"RiC-R053 has or had +teacher" +RiC-R053 ,Person ,RiC-E08 ,has or had teacher ,RiC-E08 ,Person ,"RiC-R053i has or had +student" +RiC-R048 ,Person ,RiC-E08 ,has sibling ,RiC-E08 ,Person ,RiC-R048 has sibling +"RiC- +R018i ",Person ,RiC-E08 ,is child of ,RiC-E08 ,Person ,RiC-R018 has child +"RiC- +R050i ",Person ,RiC-E08 ,known by ,RiC-E08 ,Person ,RiC-R050 knows of +RiC-R051 ,Person ,RiC-E08 ,knows ,RiC-E08 ,Person ,RiC-R051 knows +RiC-R050 ,Person ,RiC-E08 ,knows of ,RiC-E08 ,Person ,RiC-R050i known by +RiC-R042 ,Person ,RiC-E08 ,is or was leader of ,RiC-E09 ,Group ,"RiC-R042i has or had +leader" +"RiC- +R055i ",Person ,RiC-E08 ,"is or was member +of ",RiC-E09 ,Group ,"RiC-R055 has or had +member" +RiC-R054 ,Person ,RiC-E08 ,"occupies or +occupied ",RiC-E12 ,Position ,"RiC-R054i is or was +occupied by" +"RiC- +R070i ",Person ,RiC-E08 ,has birth date ,RiC-E18 ,Date ,"RiC-R070 is birth date +of" +"RiC- +R072i ",Person ,RiC-E08 ,has death date ,RiC-E18 ,Date ,"RiC-R072 is death +date of" +"RiC- +R079i","Person; +Group; +Position","RiC-E08; +RiC-E09; +RiC-E012",is author of ,RiC-E04 ,Record ,RiC-R079 has author +RiC-R037,"Person; +Group; +Position","RiC-E08; +RiC-E09; +RiC-E12",is or was owner of ,RiC-E01 ,Thing ,"RiC-R037i has or had +owner" +RiC-R040 ,Agent,"RiC-E08; +RiC-E09; +RiC-E12","is or was holder of +intellectual +property rights of","RiC-E02; +RiC-E06","Record +Resource; +Instantiation","RiC-R040i has or had +intellectual property +rights holder" +"RiC- +R042i ",Group ,RiC-E09 ,has or had leader ,RiC-E08 ,Person ,"RiC-R042 is or was +leader of" +RiC-R055 ,Group ,RiC-E09 ,has or had member ,RiC-E08 ,Person ,"RiC-R055i is or was +member of" +RiC-R005 ,Group ,RiC-E09 ,"has or had +subdivision ",RiC-E09 ,Group ,"RiC-R005i is or was +subdivision of" +"RiC- +R005i ",Group ,RiC-E09 ,"is or was +subdivision of ",RiC-E09 ,Group ,"RiC-R005 has or had +subdivision" +"RiC- +R056i ",Group ,RiC-E09 ,has or had position ,RiC-E12 ,Position ,"RiC-R056 exists or +existed in" +"RiC- +R054i ",Position ,RiC-E12 ,"is or was occupied +by ",RiC-E08 ,Person ,"RiC-R054 occupies or +occupied" +RiC-R056 ,Position ,RiC-E12 ,exists or existed in ,RiC-E09 ,Group ,"RiC-R056i had or has +position" +RiC-R059 ,Event ,RiC-E14 ,affects or affected ,RiC-E01 ,Thing ,"RiC-R059i is or was +affected by" +RiC-R058 ,Event ,RiC-E14 ,"has or had +participant ",RiC-E01 ,Thing ,"RiC-R058i is or was +participant in" +RiC-R057 ,Event ,RiC-E14 ,"is event associated +with ",RiC-E01 ,Thing ,"RiC-R057i is +associated with event" +RiC-R061 ,Event ,RiC-E14 ,"results or resulted +in ",RiC-E01 ,Thing ,"RiC-R061i results or +resulted from" +RiC-R006 ,Event ,RiC-E14 ,"has or had +subevent ",RiC-E14 ,Event ,"RiC-R006i is or was +subevent of" +"RiC- +R006i ",Event ,RiC-E14 ,"is or was subevent +of ",RiC-E14 ,Event ,"RiC-R006 has or had +subevent" +"RiC- +R033i ",Activity ,RiC-E15 ,documented by ,"RiC-E02; +RiC-E06","Record +Resource; +Instantiation",RiC-R033 documents +RiC-R060 ,Activity ,RiC-E15 ,"is or was +performed by ",RiC-E07 ,Agent ,"RiC-R060i performs +or performed" +RiC-R062 ,Rule ,RiC-E16 ,"is rule associated +with ",RiC-E01 ,Thing ,"RiC-R062i is +associated with rule" +RiC-R063 ,Rule ,RiC-E16 ,"regulates or +regulated ",RiC-E01 ,Thing ,"RiC-R063i is or was +regulated by" +RiC-R064 ,Rule ,RiC-E16 ,"is or was expressed +by ",RiC-E02 ,"Record +Resource","RiC-R064i expresses +or expressed" +RiC-R066 ,Rule ,RiC-E16 ,"is or was enforced +by ",RiC-E07 ,Agent,"RiC-R066i is or was +responsible for +enforcing" +RiC-R065 ,Rule ,RiC-E16 ,issued by ,RiC-E07 ,Agent,"RiC-R065i is +responsible for +issuing" +RiC-R067 ,Mandate ,RiC-E17 ,authorizes ,RiC-E07 ,Agent ,"RiC-R067i authorized +by" +RiC-R069 ,Date ,RiC-E18 ,is beginning date of ,RiC-E01 ,Thing ,"RiC-R069i has +beginning date" diff --git a/Doc/InverseProperty/inverse.csv b/Doc/InverseProperty/inverse.csv new file mode 100644 index 00000000..9e030a43 --- /dev/null +++ b/Doc/InverseProperty/inverse.csv @@ -0,0 +1,404 @@ +Property;Conceptual model ref;isSecondary;Corresponding inverse relation +https://www.ica.org/standards/RiC/ontology#accumulationRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#activityDocumentationRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#activityIsContextOfRelation ;;; https://www.ica.org/standards/RiC/ontology#asConcernsActivity +https://www.ica.org/standards/RiC/ontology#affectsOrAffected ; RiC-R059 ('affects or affected' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasAffectedBy +https://www.ica.org/standards/RiC/ontology#agentControlRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#agentHasOrHadLocation ;;; https://www.ica.org/standards/RiC/ontology#isOrWasLocationOfAgent +https://www.ica.org/standards/RiC/ontology#agentHierarchicalRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#agentTemporalRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#agentToAgentRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#appellationRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#asConcernsActivity ;;; https://www.ica.org/standards/RiC/ontology#activityIsContextOfRelation +https://www.ica.org/standards/RiC/ontology#authorityRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#authorizedBy ; RiC-R067i ('authorizedBy' relation);inverse; https://www.ica.org/standards/RiC/ontology#authorizes +https://www.ica.org/standards/RiC/ontology#authorizes ; RiC-R067 ('authorizes' relation);; https://www.ica.org/standards/RiC/ontology#authorizedBy +https://www.ica.org/standards/RiC/ontology#authorizingAgent ;;; https://www.ica.org/standards/RiC/ontology#isAuthorizingAgentInMandateRelation +https://www.ica.org/standards/RiC/ontology#authorshipRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#childRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#contained ;;; https://www.ica.org/standards/RiC/ontology#wasContainedBy +https://www.ica.org/standards/RiC/ontology#containsOrContained ; RiC-R007 ('contains or contained' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasContainedBy +https://www.ica.org/standards/RiC/ontology#containsTransitive ;;; https://www.ica.org/standards/RiC/ontology#isContainedByTransitive +https://www.ica.org/standards/RiC/ontology#correspondenceRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#creationRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#creationWithRole ;;; https://www.ica.org/standards/RiC/ontology#roleIsContextOfCreationRelation +https://www.ica.org/standards/RiC/ontology#derivationRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#descendanceRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#describesOrDescribed ; RiC-R021 ('describes or described' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasDescribedBy +https://www.ica.org/standards/RiC/ontology#directlyContains ;;; https://www.ica.org/standards/RiC/ontology#isDirectlyContainedBy +https://www.ica.org/standards/RiC/ontology#directlyFollowsInSequence ;;; https://www.ica.org/standards/RiC/ontology#directlyPrecedesInSequence +https://www.ica.org/standards/RiC/ontology#directlyIncludes ;;; https://www.ica.org/standards/RiC/ontology#isDirectlyIncludedIn +https://www.ica.org/standards/RiC/ontology#directlyPrecedesInSequence ;;; https://www.ica.org/standards/RiC/ontology#directlyFollowsInSequence +https://www.ica.org/standards/RiC/ontology#documentedBy ; RiC-R033i ('documented by' relation);inverse; https://www.ica.org/standards/RiC/ontology#documents +https://www.ica.org/standards/RiC/ontology#documents ; RiC-R033 ('documents' relation);; https://www.ica.org/standards/RiC/ontology#documentedBy +https://www.ica.org/standards/RiC/ontology#eventRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#evidences ; Inverse of 'is evidenced by' object property.;; https://www.ica.org/standards/RiC/ontology#isEvidencedBy +https://www.ica.org/standards/RiC/ontology#existsOrExistedIn ; RiC-R056 ('exists or existed in' relation);; https://www.ica.org/standards/RiC/ontology#hasOrHadPosition +https://www.ica.org/standards/RiC/ontology#expressesOrExpressed ; RiC-R064i ('expresses or expressed' relation);inverse; https://www.ica.org/standards/RiC/ontology#isOrWasExpressedBy +https://www.ica.org/standards/RiC/ontology#familyRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#followedInSequence ;;; https://www.ica.org/standards/RiC/ontology#precededInSequence +https://www.ica.org/standards/RiC/ontology#followsInSequenceTransitive ;;; https://www.ica.org/standards/RiC/ontology#precedesInSequenceTransitive +https://www.ica.org/standards/RiC/ontology#followsInTime ; RiC-R009i ('follows in time' relation);inverse; https://www.ica.org/standards/RiC/ontology#precedesInTime +https://www.ica.org/standards/RiC/ontology#followsOrFollowed ; RiC-R008i ('follows or followed' relation);inverse; https://www.ica.org/standards/RiC/ontology#precedesOrPreceded +https://www.ica.org/standards/RiC/ontology#functionalEquivalenceRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#groupSubdivisionRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#hadComponent ;;; https://www.ica.org/standards/RiC/ontology#wasComponentOf +https://www.ica.org/standards/RiC/ontology#hadConstituent ;;; https://www.ica.org/standards/RiC/ontology#wasConstituentOf +https://www.ica.org/standards/RiC/ontology#hadPart ;;; https://www.ica.org/standards/RiC/ontology#wasPartOf +https://www.ica.org/standards/RiC/ontology#hadSubdivision ;;; https://www.ica.org/standards/RiC/ontology#wasSubdivisionOf +https://www.ica.org/standards/RiC/ontology#hadSubevent ;;; https://www.ica.org/standards/RiC/ontology#wasSubeventOf +https://www.ica.org/standards/RiC/ontology#hadSubordinate ;;; https://www.ica.org/standards/RiC/ontology#wasSubordinateTo +https://www.ica.org/standards/RiC/ontology#hasAccumulator ; RiC-R028 ('has accumulator' relation);; https://www.ica.org/standards/RiC/ontology#isAccumulatorOf +https://www.ica.org/standards/RiC/ontology#hasActivityType ;;; https://www.ica.org/standards/RiC/ontology#isActivityTypeOf +https://www.ica.org/standards/RiC/ontology#hasAddressee ; RiC-R032 ('has addressee' relation);; https://www.ica.org/standards/RiC/ontology#isAddresseeOf +https://www.ica.org/standards/RiC/ontology#hasAncestor ; RiC-R017i (has ancestor relation);inverse; https://www.ica.org/standards/RiC/ontology#hasDescendant +https://www.ica.org/standards/RiC/ontology#hasAuthor ; RiC-R079 ('has author' relation);; https://www.ica.org/standards/RiC/ontology#isAuthorOf +https://www.ica.org/standards/RiC/ontology#hasBeginningDate ; RiC-R069i ('has beginning date' relation);inverse; https://www.ica.org/standards/RiC/ontology#isBeginningDateOf +https://www.ica.org/standards/RiC/ontology#hasBirthDate ; RiC-R070i ('has birth date' relation);inverse; https://www.ica.org/standards/RiC/ontology#isBirthDateOf +https://www.ica.org/standards/RiC/ontology#hasBirthPlace ;;; https://www.ica.org/standards/RiC/ontology#isBirthPlaceOf +https://www.ica.org/standards/RiC/ontology#hasCarrierType ;;; https://www.ica.org/standards/RiC/ontology#isCarrierTypeOf +https://www.ica.org/standards/RiC/ontology#hasChild ; RiC-R018 ('has child' relation);; https://www.ica.org/standards/RiC/ontology#isChildOf +https://www.ica.org/standards/RiC/ontology#hasCollector ; RiC-R030 ('has collector' relation);; https://www.ica.org/standards/RiC/ontology#isCollectorOf +https://www.ica.org/standards/RiC/ontology#hasComponentTransitive ;;; https://www.ica.org/standards/RiC/ontology#isComponentOfTransitive +https://www.ica.org/standards/RiC/ontology#hasConstituentTransitive ;;; https://www.ica.org/standards/RiC/ontology#isConstituentOfTransitive +https://www.ica.org/standards/RiC/ontology#hasContentOfType ;;; https://www.ica.org/standards/RiC/ontology#isContentTypeOf +https://www.ica.org/standards/RiC/ontology#hasCopy ; RiC-R012 ('has copy' relation);; https://www.ica.org/standards/RiC/ontology#isCopyOf +https://www.ica.org/standards/RiC/ontology#hasCreationDate ; RiC-R080i ('has creation date' relation);inverse; https://www.ica.org/standards/RiC/ontology#isCreationDateOf +https://www.ica.org/standards/RiC/ontology#hasCreator ; RiC-R027 ('has creator' relation);; https://www.ica.org/standards/RiC/ontology#isCreatorOf +https://www.ica.org/standards/RiC/ontology#hasDateType ;;; https://www.ica.org/standards/RiC/ontology#isDateTypeOf +https://www.ica.org/standards/RiC/ontology#hasDeathDate ; RiC-R072i ('has death date' relation);inverse; https://www.ica.org/standards/RiC/ontology#isDeathDateOf +https://www.ica.org/standards/RiC/ontology#hasDeathPlace ;;; https://www.ica.org/standards/RiC/ontology#isDeathPlaceOf +https://www.ica.org/standards/RiC/ontology#hasDescendant ; RiC-R017 ('has descendant' relation);; https://www.ica.org/standards/RiC/ontology#hasAncestor +https://www.ica.org/standards/RiC/ontology#hasDestructionDate ;;; https://www.ica.org/standards/RiC/ontology#isDestructionDateOf +https://www.ica.org/standards/RiC/ontology#hasDirectComponent ;;; https://www.ica.org/standards/RiC/ontology#isDirectComponentOf +https://www.ica.org/standards/RiC/ontology#hasDirectConstituent ;;; https://www.ica.org/standards/RiC/ontology#isDirectConstituentOf +https://www.ica.org/standards/RiC/ontology#hasDirectPart ;;; https://www.ica.org/standards/RiC/ontology#isDirectPartOf +https://www.ica.org/standards/RiC/ontology#hasDirectSubdivision ;;; https://www.ica.org/standards/RiC/ontology#isDirectSubdivisionOf +https://www.ica.org/standards/RiC/ontology#hasDirectSubevent ;;; https://www.ica.org/standards/RiC/ontology#isDirectSubeventOf +https://www.ica.org/standards/RiC/ontology#hasDirectSubordinate ;;; https://www.ica.org/standards/RiC/ontology#isDirectSubordinateTo +https://www.ica.org/standards/RiC/ontology#hasDocumentaryFormType ;;; https://www.ica.org/standards/RiC/ontology#isDocumentaryFormTypeOf +https://www.ica.org/standards/RiC/ontology#hasDraft ; RiC-011i ('has draft' relation);inverse; https://www.ica.org/standards/RiC/ontology#isDraftOf +https://www.ica.org/standards/RiC/ontology#hasEndDate ; RiC-R071i ('has end date' relation);inverse; https://www.ica.org/standards/RiC/ontology#isEndDateOf +https://www.ica.org/standards/RiC/ontology#hasEventType ;;; https://www.ica.org/standards/RiC/ontology#isEventTypeOf +https://www.ica.org/standards/RiC/ontology#hasExtent ;;; https://www.ica.org/standards/RiC/ontology#isExtentOf +https://www.ica.org/standards/RiC/ontology#hasExtentType ;;; https://www.ica.org/standards/RiC/ontology#isExtentTypeOf +https://www.ica.org/standards/RiC/ontology#hasFamilyAssociationWith ; RiC-R047 ('has family association with' relation);; +https://www.ica.org/standards/RiC/ontology#hasFamilyType ;;; https://www.ica.org/standards/RiC/ontology#isFamilyTypeOf +https://www.ica.org/standards/RiC/ontology#hasGeneticLinkToRecordResource ; RiC-R023 ('has genetic link to record resource' relation);; +https://www.ica.org/standards/RiC/ontology#hasIdentifierType ;;; https://www.ica.org/standards/RiC/ontology#isIdentifierTypeOf +https://www.ica.org/standards/RiC/ontology#hasModificationDate ; RiC-R073i ('has modification date' relation);inverse; https://www.ica.org/standards/RiC/ontology#isModificationDateOf +https://www.ica.org/standards/RiC/ontology#hasOrHadAgentName ;;; https://www.ica.org/standards/RiC/ontology#isOrWasAgentNameOf +https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithCategory ;;; https://www.ica.org/standards/RiC/ontology#isOrWasCategoryOfAllMembersOf +https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithContentType ;;; https://www.ica.org/standards/RiC/ontology#isOrWasContentTypeOfAllMembersOf +https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithCreationDate ; RiC-R081i ('has or had all members with creation date' relation);inverse; https://www.ica.org/standards/RiC/ontology#isOrWasCreationDateOfAllMembersOf +https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithDocumentaryFormType ;;; https://www.ica.org/standards/RiC/ontology#isOrWasDocumentaryFormTypeOfAllMembersOf +https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithLanguage ;;; https://www.ica.org/standards/RiC/ontology#isOrWasLanguageOfAllMembersOf +https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithLegalStatus ;;; https://www.ica.org/standards/RiC/ontology#isOrWasLegalStatusOfAllMembersOf +https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithRecordState ;;; https://www.ica.org/standards/RiC/ontology#isOrWasRecordStateOfAllMembersOf +https://www.ica.org/standards/RiC/ontology#hasOrHadAnalogueInstantiation ;;; https://www.ica.org/standards/RiC/ontology#isOrWasAnalogueInstantiationOf +https://www.ica.org/standards/RiC/ontology#hasOrHadAppellation ;;; https://www.ica.org/standards/RiC/ontology#isOrWasAppellationOf +https://www.ica.org/standards/RiC/ontology#hasOrHadAuthorityOver ; RiC-R036 ('has or had authority over' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasUnderAuthorityOf +https://www.ica.org/standards/RiC/ontology#hasOrHadCategory ;;; https://www.ica.org/standards/RiC/ontology#isOrWasCategoryOf +https://www.ica.org/standards/RiC/ontology#hasOrHadComponent ; RiC-R004 ('has or had component' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasComponentOf +https://www.ica.org/standards/RiC/ontology#hasOrHadConstituent ; RiC-R003 ('has or had constituent' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasConstituentOf +https://www.ica.org/standards/RiC/ontology#hasOrHadController ; RiC-R041i ('has or had controller' relation);inverse; https://www.ica.org/standards/RiC/ontology#isOrWasControllerOf +https://www.ica.org/standards/RiC/ontology#hasOrHadCoordinates ;;; https://www.ica.org/standards/RiC/ontology#isOrWasCoordinatesOf +https://www.ica.org/standards/RiC/ontology#hasOrHadCorporateBodyType ;;; https://www.ica.org/standards/RiC/ontology#isOrWasCorporateBodyTypeOf +https://www.ica.org/standards/RiC/ontology#hasOrHadCorrespondent ; RiC-R052 ('has or had correspondent' relation);; +https://www.ica.org/standards/RiC/ontology#hasOrHadDemographicGroup ;;; https://www.ica.org/standards/RiC/ontology#isOrWasDemographicGroupOf +https://www.ica.org/standards/RiC/ontology#hasOrHadDerivedInstantiation ; RiC-R014 ('has or had derived instantiation' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasDerivedFromInstantiation +https://www.ica.org/standards/RiC/ontology#hasOrHadDigitalInstantiation ;;; https://www.ica.org/standards/RiC/ontology#isOrWasDigitalInstantiationOf +https://www.ica.org/standards/RiC/ontology#hasOrHadEmployer ;;; https://www.ica.org/standards/RiC/ontology#isOrWasEmployerOf +https://www.ica.org/standards/RiC/ontology#hasOrHadHolder ; RiC-R039i ('has or had holder' relation);inverse; https://www.ica.org/standards/RiC/ontology#isOrWasHolderOf +https://www.ica.org/standards/RiC/ontology#hasOrHadIdentifier ;;; https://www.ica.org/standards/RiC/ontology#isOrWasIdentifierOf +https://www.ica.org/standards/RiC/ontology#hasOrHadInstantiation ; RiC-R025 ('has or had instantiation' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasInstantiationOf +https://www.ica.org/standards/RiC/ontology#hasOrHadIntellectualPropertyRightsHolder ; RiC-R040i ('has or had intellectual property rights holder ' relation);inverse; https://www.ica.org/standards/RiC/ontology#isOrWasHolderOfIntellectualPropertyRightsOf +https://www.ica.org/standards/RiC/ontology#hasOrHadJurisdiction ; RiC-R076i ('has or had jurisdiction' relation);inverse; https://www.ica.org/standards/RiC/ontology#isOrWasJurisdictionOf +https://www.ica.org/standards/RiC/ontology#hasOrHadLanguage ;;; https://www.ica.org/standards/RiC/ontology#isOrWasLanguageOf +https://www.ica.org/standards/RiC/ontology#hasOrHadLeader ; RiC-R042i ('has or had leader' relation);inverse; https://www.ica.org/standards/RiC/ontology#isOrWasLeaderOf +https://www.ica.org/standards/RiC/ontology#hasOrHadLegalStatus ;;; https://www.ica.org/standards/RiC/ontology#isOrWasLegalStatusOf +https://www.ica.org/standards/RiC/ontology#hasOrHadLocation ; RiC-R075i ('has or had location' relation);inverse; https://www.ica.org/standards/RiC/ontology#isOrWasLocationOf +https://www.ica.org/standards/RiC/ontology#hasOrHadMainSubject ; RiC-R020 ('has or had main subject' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasMainSubjectOf +https://www.ica.org/standards/RiC/ontology#hasOrHadManager ; RiC-R038i ('is or was managed by' relation);inverse; https://www.ica.org/standards/RiC/ontology#isOrWasManagerOf +https://www.ica.org/standards/RiC/ontology#hasOrHadMandateType ;;; https://www.ica.org/standards/RiC/ontology#isOrWasMandateTypeOf +https://www.ica.org/standards/RiC/ontology#hasOrHadMember ; RiC-R055 ('has or had member' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasMemberOf +https://www.ica.org/standards/RiC/ontology#hasOrHadMostMembersWithCreationDate ; RiC-R083i ('has or had most members with creation date' relation);inverse; https://www.ica.org/standards/RiC/ontology#isOrWasCreationDateOfMostMembersOf +https://www.ica.org/standards/RiC/ontology#hasOrHadName ;;; https://www.ica.org/standards/RiC/ontology#isOrWasNameOf +https://www.ica.org/standards/RiC/ontology#hasOrHadOccupationOfType ;;; https://www.ica.org/standards/RiC/ontology#isOrWasOccupationTypeOf +https://www.ica.org/standards/RiC/ontology#hasOrHadOwner ; RiC-R037i ('has or had owner' relation);inverse; https://www.ica.org/standards/RiC/ontology#isOrWasOwnerOf +https://www.ica.org/standards/RiC/ontology#hasOrHadPart ; RiC-R002 ('has or had part' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasPartOf +https://www.ica.org/standards/RiC/ontology#hasOrHadParticipant ; RiC-R058 ('has or had participant' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasParticipantIn +https://www.ica.org/standards/RiC/ontology#hasOrHadPhysicalLocation ;;; https://www.ica.org/standards/RiC/ontology#isOrWasPhysicalLocationOf +https://www.ica.org/standards/RiC/ontology#hasOrHadPlaceName ;;; https://www.ica.org/standards/RiC/ontology#isOrWasPlaceNameOf +https://www.ica.org/standards/RiC/ontology#hasOrHadPlaceType ;;; https://www.ica.org/standards/RiC/ontology#isOrWasPlaceTypeOf +https://www.ica.org/standards/RiC/ontology#hasOrHadPosition ; RiC-R056i ('has or had position' relation);inverse; https://www.ica.org/standards/RiC/ontology#existsOrExistedIn +https://www.ica.org/standards/RiC/ontology#hasOrHadRuleType ;;; https://www.ica.org/standards/RiC/ontology#isOrWasRuleTypeOf +https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithCategory ;;; https://www.ica.org/standards/RiC/ontology#isOrWasCategoryOfSomeMembersOf +https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithContentType ;;; https://www.ica.org/standards/RiC/ontology#isOrWasContentTypeOfSomeMembersOf +https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithCreationDate ; RiC-R082i ('has or had some members with creation date' relation);inverse; https://www.ica.org/standards/RiC/ontology#isOrWasCreationDateOfSomeMembersOf +https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithDocumentaryFormType ;;; https://www.ica.org/standards/RiC/ontology#isOrWasDocumentaryFormTypeOfSomeMembersOf +https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithLanguage ;;; https://www.ica.org/standards/RiC/ontology#isOrWasLanguageOfSomeMembersOf +https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithLegalStatus ;;; https://www.ica.org/standards/RiC/ontology#isOrWasLegalStatusOfSomeMembersOf +https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithRecordState ;;; https://www.ica.org/standards/RiC/ontology#isOrWasRecordStateOfSomeMembersOf +https://www.ica.org/standards/RiC/ontology#hasOrHadSpouse ; RiC-R049 ('has or had spouse' relation);; +https://www.ica.org/standards/RiC/ontology#hasOrHadStudent ; RiC-R053i ('has or had student' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasOrHadTeacher +https://www.ica.org/standards/RiC/ontology#hasOrHadSubdivision ; RiC-R005 ('has or had subdivision' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasSubdivisionOf +https://www.ica.org/standards/RiC/ontology#hasOrHadSubevent ; RiC-R006 ('has or had subevent' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasSubeventOf +https://www.ica.org/standards/RiC/ontology#hasOrHadSubject ; RiC-R019 ('has or had subject' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasSubjectOf +https://www.ica.org/standards/RiC/ontology#hasOrHadSubordinate ; RiC-R045 ('has or had subordinate ' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasSubordinateTo +https://www.ica.org/standards/RiC/ontology#hasOrHadTeacher ; RiC-R053 ('has or had teacher' relation);; https://www.ica.org/standards/RiC/ontology#hasOrHadStudent +https://www.ica.org/standards/RiC/ontology#hasOrHadTitle ;;; https://www.ica.org/standards/RiC/ontology#isOrWasTitleOf +https://www.ica.org/standards/RiC/ontology#hasOrHadWorkRelationWith ; RiC-R046 ('has or had work relation with' relation);; +https://www.ica.org/standards/RiC/ontology#hasOrganicOrFunctionalProvenance ;;; https://www.ica.org/standards/RiC/ontology#isOrganicOrFunctionalProvenanceOf +https://www.ica.org/standards/RiC/ontology#hasOrganicProvenance ; RiC-R026 ('has provenance' relation);; https://www.ica.org/standards/RiC/ontology#isOrganicProvenanceOf +https://www.ica.org/standards/RiC/ontology#hasOriginal ; RiC-R010i ('is original of' relation);inverse; https://www.ica.org/standards/RiC/ontology#isOriginalOf +https://www.ica.org/standards/RiC/ontology#hasPartTransitive ;;; https://www.ica.org/standards/RiC/ontology#isPartOfTransitive +https://www.ica.org/standards/RiC/ontology#hasProductionTechniqueType ;;; https://www.ica.org/standards/RiC/ontology#isProductionTechniqueTypeOf +https://www.ica.org/standards/RiC/ontology#hasPublicationDate ;;; https://www.ica.org/standards/RiC/ontology#isPublicationDateOf +https://www.ica.org/standards/RiC/ontology#hasPublisher ;;; https://www.ica.org/standards/RiC/ontology#isPublisherOf +https://www.ica.org/standards/RiC/ontology#hasReceiver ; RiC-R029 ('has receiver' relation);; https://www.ica.org/standards/RiC/ontology#isReceiverOf +https://www.ica.org/standards/RiC/ontology#hasRecordSetType ;;; https://www.ica.org/standards/RiC/ontology#isRecordSetTypeOf +https://www.ica.org/standards/RiC/ontology#hasRecordState ;;; https://www.ica.org/standards/RiC/ontology#isRecordStateOf +https://www.ica.org/standards/RiC/ontology#hasReply ; RiC-R013 ('has reply' relation);; https://www.ica.org/standards/RiC/ontology#isReplyTo +https://www.ica.org/standards/RiC/ontology#hasRepresentationType ;;; https://www.ica.org/standards/RiC/ontology#isRepresentationTypeOf +https://www.ica.org/standards/RiC/ontology#hasSender ; RiC-R031 ('has sender' relation);; https://www.ica.org/standards/RiC/ontology#isSenderOf +https://www.ica.org/standards/RiC/ontology#hasSibling ; RiC-R048 ('has sibling' relation);; +https://www.ica.org/standards/RiC/ontology#hasSubdivisionTransitive ;;; https://www.ica.org/standards/RiC/ontology#isSubdivisionOfTransitive +https://www.ica.org/standards/RiC/ontology#hasSubeventTransitive ;;; https://www.ica.org/standards/RiC/ontology#isSubeventOfTransitive +https://www.ica.org/standards/RiC/ontology#hasSubordinateTransitive ;;; https://www.ica.org/standards/RiC/ontology#isSubordinateToTransitive +https://www.ica.org/standards/RiC/ontology#hasSuccessor ; RIC-R016 ('has successor' relation);; https://www.ica.org/standards/RiC/ontology#isSuccessorOf +http://www.w3.org/2004/02/skos/core#hasTopConcept ;;; http://www.w3.org/2004/02/skos/core#topConceptOf +https://www.ica.org/standards/RiC/ontology#hasUnitOfMeasurement ;;; https://www.ica.org/standards/RiC/ontology#isUnitOfMeasurementOf +https://www.ica.org/standards/RiC/ontology#hasWithin ; RiC-R085i ('has within' relation);inverse; https://www.ica.org/standards/RiC/ontology#isWithin +https://www.ica.org/standards/RiC/ontology#included ;;; https://www.ica.org/standards/RiC/ontology#wasIncludedIn +https://www.ica.org/standards/RiC/ontology#includesOrIncluded ; RiC-R024 ('includes or included' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasIncludedIn +https://www.ica.org/standards/RiC/ontology#includesTransitive ;;; https://www.ica.org/standards/RiC/ontology#isIncludedInTransitive +http://www.w3.org/2004/02/skos/core#inScheme ;;; +https://www.ica.org/standards/RiC/ontology#instantiationToInstantiationRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#intellectualPropertyRightsRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#intersects ; RiC-R086 ('intersects' relation);; +https://www.ica.org/standards/RiC/ontology#isAccumulatorOf ; RiC-R028i ('is accumulator of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasAccumulator +https://www.ica.org/standards/RiC/ontology#isActivityTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasActivityType +https://www.ica.org/standards/RiC/ontology#isAddresseeOf ; RiC-032i ('is addressee of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasAddressee +https://www.ica.org/standards/RiC/ontology#isAgentAssociatedWithAgent ; RiC-R044 ('is agent associated with agent' relation);; +https://www.ica.org/standards/RiC/ontology#isAgentAssociatedWithPlace ;;; https://www.ica.org/standards/RiC/ontology#isPlaceAssociatedWithAgent +https://www.ica.org/standards/RiC/ontology#isAssociatedWithDate ; RiC-R068i ('is associated with date' relation);inverse; https://www.ica.org/standards/RiC/ontology#isDateAssociatedWith +https://www.ica.org/standards/RiC/ontology#isAssociatedWithEvent ; RiC-R057i ('is associated with event' relation);inverse; https://www.ica.org/standards/RiC/ontology#isEventAssociatedWith +https://www.ica.org/standards/RiC/ontology#isAssociatedWithPlace ; RiC-R074i ('is associated with place' relation);inverse; https://www.ica.org/standards/RiC/ontology#isPlaceAssociatedWith +https://www.ica.org/standards/RiC/ontology#isAssociatedWithRule ; RiC-R062i ('is associated with rule' relation);inverse; https://www.ica.org/standards/RiC/ontology#isRuleAssociatedWith +https://www.ica.org/standards/RiC/ontology#isAuthorOf ; RiC-R079i ('is author of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasAuthor +https://www.ica.org/standards/RiC/ontology#isAuthorizingAgentInMandateRelation ;;; https://www.ica.org/standards/RiC/ontology#authorizingAgent +https://www.ica.org/standards/RiC/ontology#isBeginningDateOf ; RiC-R069 ('is beginning date of' relation);; https://www.ica.org/standards/RiC/ontology#hasBeginningDate +https://www.ica.org/standards/RiC/ontology#isBirthDateOf ; RiC-R070 ('is birth date of' relation);; https://www.ica.org/standards/RiC/ontology#hasBirthDate +https://www.ica.org/standards/RiC/ontology#isBirthPlaceOf ;;; https://www.ica.org/standards/RiC/ontology#hasBirthPlace +https://www.ica.org/standards/RiC/ontology#isCarrierTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasCarrierType +https://www.ica.org/standards/RiC/ontology#isChildOf ; RiC-R018i ('is child of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasChild +https://www.ica.org/standards/RiC/ontology#isCollectorOf ; RiC-R030i ('is collector of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasCollector +https://www.ica.org/standards/RiC/ontology#isComponentOfTransitive ;;; https://www.ica.org/standards/RiC/ontology#hasComponentTransitive +https://www.ica.org/standards/RiC/ontology#isConstituentOfTransitive ;;; https://www.ica.org/standards/RiC/ontology#hasConstituentTransitive +https://www.ica.org/standards/RiC/ontology#isContainedByTransitive ;;; https://www.ica.org/standards/RiC/ontology#containsTransitive +https://www.ica.org/standards/RiC/ontology#isContentTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasContentOfType +https://www.ica.org/standards/RiC/ontology#isCopyOf ; RiC-R012i ('is copy of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasCopy +https://www.ica.org/standards/RiC/ontology#isCreationDateOf ; RiC-R080 ('is creation date of' relation);; https://www.ica.org/standards/RiC/ontology#hasCreationDate +https://www.ica.org/standards/RiC/ontology#isCreatorOf ; RiC-R027i ('is creator of 'relation');inverse; https://www.ica.org/standards/RiC/ontology#hasCreator +https://www.ica.org/standards/RiC/ontology#isDateAssociatedWith ; RiC-R068 ('is date associated with' relation);; https://www.ica.org/standards/RiC/ontology#isAssociatedWithDate +https://www.ica.org/standards/RiC/ontology#isDateOfOccurrenceOf ; RiC-R084 ('is date of occurrence of' relation);; https://www.ica.org/standards/RiC/ontology#occurredAtDate +https://www.ica.org/standards/RiC/ontology#isDateTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasDateType +https://www.ica.org/standards/RiC/ontology#isDeathDateOf ; RiC-R072 ('is death date of' relation);; https://www.ica.org/standards/RiC/ontology#hasDeathDate +https://www.ica.org/standards/RiC/ontology#isDeathPlaceOf ;;; https://www.ica.org/standards/RiC/ontology#hasDeathPlace +https://www.ica.org/standards/RiC/ontology#isDestructionDateOf ;;; https://www.ica.org/standards/RiC/ontology#hasDestructionDate +https://www.ica.org/standards/RiC/ontology#isDirectComponentOf ;;; https://www.ica.org/standards/RiC/ontology#hasDirectComponent +https://www.ica.org/standards/RiC/ontology#isDirectConstituentOf ;;; https://www.ica.org/standards/RiC/ontology#hasDirectConstituent +https://www.ica.org/standards/RiC/ontology#isDirectPartOf ;;; https://www.ica.org/standards/RiC/ontology#hasDirectPart +https://www.ica.org/standards/RiC/ontology#isDirectSubdivisionOf ;;; https://www.ica.org/standards/RiC/ontology#hasDirectSubdivision +https://www.ica.org/standards/RiC/ontology#isDirectSubeventOf ;;; https://www.ica.org/standards/RiC/ontology#hasDirectSubevent +https://www.ica.org/standards/RiC/ontology#isDirectSubordinateTo ;;; https://www.ica.org/standards/RiC/ontology#hasDirectSubordinate +https://www.ica.org/standards/RiC/ontology#isDirectlyContainedBy ;;; https://www.ica.org/standards/RiC/ontology#directlyContains +https://www.ica.org/standards/RiC/ontology#isDirectlyIncludedIn ;;; https://www.ica.org/standards/RiC/ontology#directlyIncludes +https://www.ica.org/standards/RiC/ontology#isDocumentaryFormTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasDocumentaryFormType +https://www.ica.org/standards/RiC/ontology#isDraftOf ; RiC-R011 ('is draft of' relation);; https://www.ica.org/standards/RiC/ontology#hasDraft +https://www.ica.org/standards/RiC/ontology#isEndDateOf ; RiC-R071 ('is end date of' relation);; https://www.ica.org/standards/RiC/ontology#hasEndDate +https://www.ica.org/standards/RiC/ontology#isEquivalentTo ;;; +https://www.ica.org/standards/RiC/ontology#isEventAssociatedWith ; RiC-R057 ('is event associated with' relation);; https://www.ica.org/standards/RiC/ontology#isAssociatedWithEvent +https://www.ica.org/standards/RiC/ontology#isEventTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasEventType +https://www.ica.org/standards/RiC/ontology#isEvidencedBy ; Object property implementation of RiC-RA05 (Source of Relation attribute).;; https://www.ica.org/standards/RiC/ontology#evidences +https://www.ica.org/standards/RiC/ontology#isExtentOf ;;; https://www.ica.org/standards/RiC/ontology#hasExtent +https://www.ica.org/standards/RiC/ontology#isExtentTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasExtentType +https://www.ica.org/standards/RiC/ontology#isFamilyTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasFamilyType +https://www.ica.org/standards/RiC/ontology#isFromUseDateOf ;;; https://www.ica.org/standards/RiC/ontology#wasUsedFromDate +https://www.ica.org/standards/RiC/ontology#isFunctionallyEquivalentTo ; RiC-R035 ('is functionally equivalent to' relation);; +https://www.ica.org/standards/RiC/ontology#isIdentifierTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasIdentifierType +https://www.ica.org/standards/RiC/ontology#isIncludedInTransitive ;;; https://www.ica.org/standards/RiC/ontology#includesTransitive +https://www.ica.org/standards/RiC/ontology#isInstantiationAssociatedWithInstantiation ; RiC-R034 ('is instantiation associated with instantiation' relation);; +https://www.ica.org/standards/RiC/ontology#isLastUpdateDateOf ;;; https://www.ica.org/standards/RiC/ontology#wasLastUpdatedAtDate +https://www.ica.org/standards/RiC/ontology#isModificationDateOf ; RiC-R073 ('is modification date of' relation);; https://www.ica.org/standards/RiC/ontology#hasModificationDate +https://www.ica.org/standards/RiC/ontology#isOrWasAdjacentTo ; RiC-R077 ('is or was adjacent to' relation);; +https://www.ica.org/standards/RiC/ontology#isOrWasAffectedBy ; RiC-R059i ('is or was affected by' relation);inverse; https://www.ica.org/standards/RiC/ontology#affectsOrAffected +https://www.ica.org/standards/RiC/ontology#isOrWasAgentNameOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadAgentName +https://www.ica.org/standards/RiC/ontology#isOrWasAnalogueInstantiationOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadAnalogueInstantiation +https://www.ica.org/standards/RiC/ontology#isOrWasAppellationOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadAppellation +https://www.ica.org/standards/RiC/ontology#isOrWasCategoryOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadCategory +https://www.ica.org/standards/RiC/ontology#isOrWasCategoryOfAllMembersOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithCategory +https://www.ica.org/standards/RiC/ontology#isOrWasCategoryOfSomeMembersOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithCategory +https://www.ica.org/standards/RiC/ontology#isOrWasComponentOf ; RiC-R004i ('is or was component of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasOrHadComponent +https://www.ica.org/standards/RiC/ontology#isOrWasConstituentOf ; RiC-R003i ('is or was constituent of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasOrHadConstituent +https://www.ica.org/standards/RiC/ontology#isOrWasContainedBy ; RiC-R007i ('is or was contained by' relation);inverse; https://www.ica.org/standards/RiC/ontology#containsOrContained +https://www.ica.org/standards/RiC/ontology#isOrWasContentTypeOfAllMembersOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithContentType +https://www.ica.org/standards/RiC/ontology#isOrWasContentTypeOfSomeMembersOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithContentType +https://www.ica.org/standards/RiC/ontology#isOrWasControllerOf ; RiC-R041 ('is or was controller of' relation);; https://www.ica.org/standards/RiC/ontology#hasOrHadController +https://www.ica.org/standards/RiC/ontology#isOrWasCoordinatesOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadCoordinates +https://www.ica.org/standards/RiC/ontology#isOrWasCorporateBodyTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadCorporateBodyType +https://www.ica.org/standards/RiC/ontology#isOrWasCreationDateOfAllMembersOf ; RiC-R081 ('is or was creation date of all members of' relation);; https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithCreationDate +https://www.ica.org/standards/RiC/ontology#isOrWasCreationDateOfMostMembersOf ; RiC-R083 ('is or was creation date of most members of' relation);; https://www.ica.org/standards/RiC/ontology#hasOrHadMostMembersWithCreationDate +https://www.ica.org/standards/RiC/ontology#isOrWasCreationDateOfSomeMembersOf ; RiC-R082 ('is or was creation date of some members of' relation);; https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithCreationDate +https://www.ica.org/standards/RiC/ontology#isOrWasDemographicGroupOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadDemographicGroup +https://www.ica.org/standards/RiC/ontology#isOrWasDerivedFromInstantiation ; RiC-R014i ('is or was derived from instantiation' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasOrHadDerivedInstantiation +https://www.ica.org/standards/RiC/ontology#isOrWasDescribedBy ; RiC-R021i ('is or was described by' relation);inverse; https://www.ica.org/standards/RiC/ontology#describesOrDescribed +https://www.ica.org/standards/RiC/ontology#isOrWasDigitalInstantiationOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadDigitalInstantiation +https://www.ica.org/standards/RiC/ontology#isOrWasDocumentaryFormTypeOfAllMembersOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithDocumentaryFormType +https://www.ica.org/standards/RiC/ontology#isOrWasDocumentaryFormTypeOfSomeMembersOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithDocumentaryFormType +https://www.ica.org/standards/RiC/ontology#isOrWasEmployerOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadEmployer +https://www.ica.org/standards/RiC/ontology#isOrWasEnforcedBy ; RiC-R066 ('is or was enforced by' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasResponsibleForEnforcing +https://www.ica.org/standards/RiC/ontology#isOrWasExpressedBy ; RiC-R064 ('is or was expressed by' relation);; https://www.ica.org/standards/RiC/ontology#expressesOrExpressed +https://www.ica.org/standards/RiC/ontology#isOrWasHolderOf ; RiC-R039 ('is or was holder of' relation);; https://www.ica.org/standards/RiC/ontology#hasOrHadHolder +https://www.ica.org/standards/RiC/ontology#isOrWasHolderOfIntellectualPropertyRightsOf ; RiC-R040 ('is or was holder of intellectual property rights of' relation);; https://www.ica.org/standards/RiC/ontology#hasOrHadIntellectualPropertyRightsHolder +https://www.ica.org/standards/RiC/ontology#isOrWasIdentifierOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadIdentifier +https://www.ica.org/standards/RiC/ontology#isOrWasIncludedIn ; RiC-R024i ('is or was included in' relation);inverse; https://www.ica.org/standards/RiC/ontology#includesOrIncluded +https://www.ica.org/standards/RiC/ontology#isOrWasInstantiationOf ; RiC-R025i ('is or was instantiation of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasOrHadInstantiation +https://www.ica.org/standards/RiC/ontology#isOrWasJurisdictionOf ; RiC-R076 ('is or was jurisdiction of' relation);; https://www.ica.org/standards/RiC/ontology#hasOrHadJurisdiction +https://www.ica.org/standards/RiC/ontology#isOrWasLanguageOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadLanguage +https://www.ica.org/standards/RiC/ontology#isOrWasLanguageOfAllMembersOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithLanguage +https://www.ica.org/standards/RiC/ontology#isOrWasLanguageOfSomeMembersOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithLanguage +https://www.ica.org/standards/RiC/ontology#isOrWasLeaderOf ; RiC-R042 ('is or was leader of' relation);; https://www.ica.org/standards/RiC/ontology#hasOrHadLeader +https://www.ica.org/standards/RiC/ontology#isOrWasLegalStatusOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadLegalStatus +https://www.ica.org/standards/RiC/ontology#isOrWasLegalStatusOfAllMembersOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithLegalStatus +https://www.ica.org/standards/RiC/ontology#isOrWasLegalStatusOfSomeMembersOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithLegalStatus +https://www.ica.org/standards/RiC/ontology#isOrWasLocationOf ; RiC-R075 ('is or was location of' relation);; https://www.ica.org/standards/RiC/ontology#hasOrHadLocation +https://www.ica.org/standards/RiC/ontology#isOrWasLocationOfAgent ;;; https://www.ica.org/standards/RiC/ontology#agentHasOrHadLocation +https://www.ica.org/standards/RiC/ontology#isOrWasMainSubjectOf ; RiC-R020i ('is or was main subject of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasOrHadMainSubject +https://www.ica.org/standards/RiC/ontology#isOrWasManagerOf ; RiC-R038 ('is or was manager of' relation);; https://www.ica.org/standards/RiC/ontology#hasOrHadManager +https://www.ica.org/standards/RiC/ontology#isOrWasMandateTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadMandateType +https://www.ica.org/standards/RiC/ontology#isOrWasMemberOf ; RiC-R055i ('is or was member of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasOrHadMember +https://www.ica.org/standards/RiC/ontology#isOrWasNameOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadName +https://www.ica.org/standards/RiC/ontology#isOrWasOccupationTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadOccupationOfType +https://www.ica.org/standards/RiC/ontology#isOrWasOccupiedBy ; RiC-R054i ('is or was occupied by' relation);inverse; https://www.ica.org/standards/RiC/ontology#occupiesOrOccupied +https://www.ica.org/standards/RiC/ontology#isOrWasOwnerOf ; RiC-R037 ('is or was owner of' relation);; https://www.ica.org/standards/RiC/ontology#hasOrHadOwner +https://www.ica.org/standards/RiC/ontology#isOrWasPartOf ; RiC-R002i ('is or was part of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasOrHadPart +https://www.ica.org/standards/RiC/ontology#isOrWasParticipantIn ; RiC-R058i ('is or was participant in' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasOrHadParticipant +https://www.ica.org/standards/RiC/ontology#isOrWasPerformedBy ; RiC-R060 ('is or was performed by' relation);; https://www.ica.org/standards/RiC/ontology#performsOrPerformed +https://www.ica.org/standards/RiC/ontology#isOrWasPhysicalLocationOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadPhysicalLocation +https://www.ica.org/standards/RiC/ontology#isOrWasPlaceNameOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadPlaceName +https://www.ica.org/standards/RiC/ontology#isOrWasPlaceTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadPlaceType +https://www.ica.org/standards/RiC/ontology#isOrWasRecordStateOfAllMembersOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithRecordState +https://www.ica.org/standards/RiC/ontology#isOrWasRecordStateOfSomeMembersOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithRecordState +https://www.ica.org/standards/RiC/ontology#isOrWasRegulatedBy ; RiC-R063i ('is or was regulated by' relation);inverse; https://www.ica.org/standards/RiC/ontology#regulatesOrRegulated +https://www.ica.org/standards/RiC/ontology#isOrWasResponsibleForEnforcing ; RiC-R066i ('is or was responsible for enforcing' relation);inverse; https://www.ica.org/standards/RiC/ontology#isOrWasEnforcedBy +https://www.ica.org/standards/RiC/ontology#isOrWasRuleTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadRuleType +https://www.ica.org/standards/RiC/ontology#isOrWasSubdivisionOf ; RiC-R005i ('is or was subdivision' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasOrHadSubdivision +https://www.ica.org/standards/RiC/ontology#isOrWasSubeventOf ; RiC-R006i ('is or was subevent of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasOrHadSubevent +https://www.ica.org/standards/RiC/ontology#isOrWasSubjectOf ; RIc-R019i ('is or was subject of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasOrHadSubject +https://www.ica.org/standards/RiC/ontology#isOrWasSubordinateTo ; RiC-R045i ('is or was subordinate to' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasOrHadSubordinate +https://www.ica.org/standards/RiC/ontology#isOrWasTitleOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrHadTitle +https://www.ica.org/standards/RiC/ontology#isOrWasUnderAuthorityOf ; RiC-R036i ('is or was under authority of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasOrHadAuthorityOver +https://www.ica.org/standards/RiC/ontology#isOrganicOrFunctionalProvenanceOf ;;; https://www.ica.org/standards/RiC/ontology#hasOrganicOrFunctionalProvenance +https://www.ica.org/standards/RiC/ontology#isOrganicProvenanceOf ; RiC-R026i ('is provenance of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasOrganicProvenance +https://www.ica.org/standards/RiC/ontology#isOriginalOf ; RiC-R010 (is original of relation);; https://www.ica.org/standards/RiC/ontology#hasOriginal +https://www.ica.org/standards/RiC/ontology#isPartOfTransitive ;;; https://www.ica.org/standards/RiC/ontology#hasPartTransitive +https://www.ica.org/standards/RiC/ontology#isPlaceAssociatedWith ; RiC-R074 ('is place associated with' relation);; https://www.ica.org/standards/RiC/ontology#isAssociatedWithPlace +https://www.ica.org/standards/RiC/ontology#isPlaceAssociatedWithAgent ;;; https://www.ica.org/standards/RiC/ontology#isAgentAssociatedWithPlace +https://www.ica.org/standards/RiC/ontology#isProductionTechniqueTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasProductionTechniqueType +https://www.ica.org/standards/RiC/ontology#isPublicationDateOf ;;; https://www.ica.org/standards/RiC/ontology#hasPublicationDate +https://www.ica.org/standards/RiC/ontology#isPublisherOf ;;; https://www.ica.org/standards/RiC/ontology#hasPublisher +https://www.ica.org/standards/RiC/ontology#isReceiverOf ; RiC-R029i ('is receiver of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasReceiver +https://www.ica.org/standards/RiC/ontology#isRecordResourceAssociatedWithRecordResource ; RiC-R022 ('is record resource associated with record resource' relation);; +https://www.ica.org/standards/RiC/ontology#isRecordSetTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasRecordSetType +https://www.ica.org/standards/RiC/ontology#isRecordStateOf ;;; https://www.ica.org/standards/RiC/ontology#hasRecordState +https://www.ica.org/standards/RiC/ontology#isRelatedTo ; RiC-R001 ('is related to' relation);; +https://www.ica.org/standards/RiC/ontology#isReplyTo ; RiC-R013i ('is reply to' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasReply +https://www.ica.org/standards/RiC/ontology#isRepresentationTypeOf ;;; https://www.ica.org/standards/RiC/ontology#hasRepresentationType +https://www.ica.org/standards/RiC/ontology#isResponsibleForIssuing ; RiC-R065i ('is responsible for issuing' relation);inverse; https://www.ica.org/standards/RiC/ontology#issuedBy +https://www.ica.org/standards/RiC/ontology#isRuleAssociatedWith ; RiC-R062 ('is rule associated with' relation);; https://www.ica.org/standards/RiC/ontology#isAssociatedWithRule +https://www.ica.org/standards/RiC/ontology#isSenderOf ; RiC-R031i ('is sender of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasSender +https://www.ica.org/standards/RiC/ontology#isSubdivisionOfTransitive ;;; https://www.ica.org/standards/RiC/ontology#hasSubdivisionTransitive +https://www.ica.org/standards/RiC/ontology#isSubeventOfTransitive ;;; https://www.ica.org/standards/RiC/ontology#hasSubeventTransitive +https://www.ica.org/standards/RiC/ontology#isSubordinateToTransitive ;;; https://www.ica.org/standards/RiC/ontology#hasSubordinateTransitive +https://www.ica.org/standards/RiC/ontology#isSuccessorOf ; RiC-R016i ('is successor of' relation);inverse; https://www.ica.org/standards/RiC/ontology#hasSuccessor +https://www.ica.org/standards/RiC/ontology#isToUseDateOf ;;; https://www.ica.org/standards/RiC/ontology#wasUsedToDate +https://www.ica.org/standards/RiC/ontology#isUnitOfMeasurementOf ;;; https://www.ica.org/standards/RiC/ontology#hasUnitOfMeasurement +https://www.ica.org/standards/RiC/ontology#isWithin ; RiC-R085 ('is within' relation);; https://www.ica.org/standards/RiC/ontology#hasWithin +https://www.ica.org/standards/RiC/ontology#issuedBy ; RiC-R065 ('issued by' relation);; https://www.ica.org/standards/RiC/ontology#isResponsibleForIssuing +https://www.ica.org/standards/RiC/ontology#knowingOfRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#knowingRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#knownBy ; RiC-R050i ('known by' relation);inverse; https://www.ica.org/standards/RiC/ontology#knowsOf +https://www.ica.org/standards/RiC/ontology#knows ; RiC-R051 ('knows' relation);; +https://www.ica.org/standards/RiC/ontology#knowsOf ; RiC-R050 ('knows of' relation);; https://www.ica.org/standards/RiC/ontology#knownBy +https://www.ica.org/standards/RiC/ontology#leadershipRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#leadershipWithPosition ;;; https://www.ica.org/standards/RiC/ontology#positionIsContextOfLeadershipRelation +https://www.ica.org/standards/RiC/ontology#managementRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#mandateRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#membershipRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#membershipWithPosition ;;; https://www.ica.org/standards/RiC/ontology#positionIsContextOfMembershipRelation +https://www.ica.org/standards/RiC/ontology#migratedFrom ; RiC-R015i ('migrated from' relation);inverse; https://www.ica.org/standards/RiC/ontology#migratedInto +https://www.ica.org/standards/RiC/ontology#migratedInto ; RiC-R015 ('migrated into' relation);; https://www.ica.org/standards/RiC/ontology#migratedFrom +https://www.ica.org/standards/RiC/ontology#migrationRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#occupiesOrOccupied ; RiC-R054 ('occupies or occupied' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasOccupiedBy +https://www.ica.org/standards/RiC/ontology#occurredAtDate ; RiC-R084i ('occurred at date' relation);inverse; https://www.ica.org/standards/RiC/ontology#isDateOfOccurrenceOf +https://www.ica.org/standards/RiC/ontology#organicOrFunctionalProvenanceRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#organicProvenanceRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#overlapsOrOverlapped ; RiC-R078 ('overlaps or overlapped' relation);; +https://www.ica.org/standards/RiC/ontology#ownershipRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#performanceRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#performsOrPerformed ; RiC-R060i ('performs or performed' relation);inverse; https://www.ica.org/standards/RiC/ontology#isOrWasPerformedBy +https://www.ica.org/standards/RiC/ontology#placeRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#positionHoldingRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#positionIsContextOfLeadershipRelation ;;; https://www.ica.org/standards/RiC/ontology#leadershipWithPosition +https://www.ica.org/standards/RiC/ontology#positionIsContextOfMembershipRelation ;;; https://www.ica.org/standards/RiC/ontology#membershipWithPosition +https://www.ica.org/standards/RiC/ontology#positionToGroupRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#precededInSequence ;;; https://www.ica.org/standards/RiC/ontology#followedInSequence +https://www.ica.org/standards/RiC/ontology#precedesInSequenceTransitive ;;; https://www.ica.org/standards/RiC/ontology#followsInSequenceTransitive +https://www.ica.org/standards/RiC/ontology#precedesInTime ; RiC-R009 ('precedes in time' relation);; https://www.ica.org/standards/RiC/ontology#followsInTime +https://www.ica.org/standards/RiC/ontology#precedesOrPreceded ; RiC-R008 ('precedes or preceded' relation);; https://www.ica.org/standards/RiC/ontology#followsOrFollowed +https://www.ica.org/standards/RiC/ontology#proxyFor ;;; +https://www.ica.org/standards/RiC/ontology#proxyIn ;;; +https://www.ica.org/standards/RiC/ontology#recordResourceGeneticRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#recordResourceHoldingRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#recordResourceToInstantiationRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#recordResourceToRecordResourceRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#regulatesOrRegulated ; RiC-R063 ('regulates or regulated' relation);; https://www.ica.org/standards/RiC/ontology#isOrWasRegulatedBy +https://www.ica.org/standards/RiC/ontology#relationConnects ;;; https://www.ica.org/standards/RiC/ontology#thingIsConnectedToRelation +https://www.ica.org/standards/RiC/ontology#relationHasContext ;;; https://www.ica.org/standards/RiC/ontology#thingIsContextOfRelation +https://www.ica.org/standards/RiC/ontology#relationHasSource ;;; https://www.ica.org/standards/RiC/ontology#thingIsSourceOfRelation +https://www.ica.org/standards/RiC/ontology#relationHasTarget ;;; https://www.ica.org/standards/RiC/ontology#thingIsTargetOfRelation +https://www.ica.org/standards/RiC/ontology#relation_role ;;; +https://www.ica.org/standards/RiC/ontology#resultedFromTheMergerOf ;;; https://www.ica.org/standards/RiC/ontology#wasMergedInto +https://www.ica.org/standards/RiC/ontology#resultedFromTheSplitOf ;;; https://www.ica.org/standards/RiC/ontology#wasSplitInto +https://www.ica.org/standards/RiC/ontology#resultsOrResultedFrom ; RiC-R061i ('results or resulted from' relation);inverse; https://www.ica.org/standards/RiC/ontology#resultsOrResultedIn +https://www.ica.org/standards/RiC/ontology#resultsOrResultedIn ; RiC-R061 ('results or resulted in' relation);; https://www.ica.org/standards/RiC/ontology#resultsOrResultedFrom +https://www.ica.org/standards/RiC/ontology#roleIsContextOfCreationRelation ;;; https://www.ica.org/standards/RiC/ontology#creationWithRole +https://www.ica.org/standards/RiC/ontology#ruleRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#sequentialRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#siblingRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#spouseRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#teachingRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#temporalRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#thingIsConnectedToRelation ;;; https://www.ica.org/standards/RiC/ontology#relationConnects +https://www.ica.org/standards/RiC/ontology#thingIsContextOfRelation ;;; https://www.ica.org/standards/RiC/ontology#relationHasContext +https://www.ica.org/standards/RiC/ontology#thingIsSourceOfRelation ;;; https://www.ica.org/standards/RiC/ontology#relationHasSource +https://www.ica.org/standards/RiC/ontology#thingIsTargetOfRelation ;;; https://www.ica.org/standards/RiC/ontology#relationHasTarget +http://www.w3.org/2004/02/skos/core#topConceptOf ;;; http://www.w3.org/2004/02/skos/core#hasTopConcept +https://www.ica.org/standards/RiC/ontology#typeRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#wasComponentOf ;;; https://www.ica.org/standards/RiC/ontology#hadComponent +https://www.ica.org/standards/RiC/ontology#wasConstituentOf ;;; https://www.ica.org/standards/RiC/ontology#hadConstituent +https://www.ica.org/standards/RiC/ontology#wasContainedBy ;;; https://www.ica.org/standards/RiC/ontology#contained +https://www.ica.org/standards/RiC/ontology#wasIncludedIn ;;; https://www.ica.org/standards/RiC/ontology#included +https://www.ica.org/standards/RiC/ontology#wasLastUpdatedAtDate ;;; https://www.ica.org/standards/RiC/ontology#isLastUpdateDateOf +https://www.ica.org/standards/RiC/ontology#wasMergedInto ;;; https://www.ica.org/standards/RiC/ontology#resultedFromTheMergerOf +https://www.ica.org/standards/RiC/ontology#wasPartOf ;;; https://www.ica.org/standards/RiC/ontology#hadPart +https://www.ica.org/standards/RiC/ontology#wasSplitInto ;;; https://www.ica.org/standards/RiC/ontology#resultedFromTheSplitOf +https://www.ica.org/standards/RiC/ontology#wasSubdivisionOf ;;; https://www.ica.org/standards/RiC/ontology#hadSubdivision +https://www.ica.org/standards/RiC/ontology#wasSubeventOf ;;; https://www.ica.org/standards/RiC/ontology#hadSubevent +https://www.ica.org/standards/RiC/ontology#wasSubordinateTo ;;; https://www.ica.org/standards/RiC/ontology#hadSubordinate +https://www.ica.org/standards/RiC/ontology#wasUsedFromDate ;;; https://www.ica.org/standards/RiC/ontology#isFromUseDateOf +https://www.ica.org/standards/RiC/ontology#wasUsedToDate ;;; https://www.ica.org/standards/RiC/ontology#isToUseDateOf +https://www.ica.org/standards/RiC/ontology#wholePartRelation_role ;;; +https://www.ica.org/standards/RiC/ontology#workRelation_role ;;; diff --git a/Doc/InverseProperty/inverse.txt b/Doc/InverseProperty/inverse.txt new file mode 100644 index 00000000..11c0fa0c --- /dev/null +++ b/Doc/InverseProperty/inverse.txt @@ -0,0 +1,403 @@ +https://www.ica.org/standards/RiC/ontology#accumulationRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#activityDocumentationRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#activityIsContextOfRelation ; https://www.ica.org/standards/RiC/ontology#asConcernsActivity ; +https://www.ica.org/standards/RiC/ontology#affectsOrAffected ; https://www.ica.org/standards/RiC/ontology#isOrWasAffectedBy ; RiC-R059 ('affects or affected' relation) +https://www.ica.org/standards/RiC/ontology#agentControlRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#agentHasOrHadLocation ; https://www.ica.org/standards/RiC/ontology#isOrWasLocationOfAgent ; +https://www.ica.org/standards/RiC/ontology#agentHierarchicalRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#agentTemporalRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#agentToAgentRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#appellationRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#asConcernsActivity ; https://www.ica.org/standards/RiC/ontology#activityIsContextOfRelation ; +https://www.ica.org/standards/RiC/ontology#authorityRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#authorizedBy ; https://www.ica.org/standards/RiC/ontology#authorizes ; RiC-R067i ('authorizedBy' relation) +https://www.ica.org/standards/RiC/ontology#authorizes ; https://www.ica.org/standards/RiC/ontology#authorizedBy ; RiC-R067 ('authorizes' relation) +https://www.ica.org/standards/RiC/ontology#authorizingAgent ; https://www.ica.org/standards/RiC/ontology#isAuthorizingAgentInMandateRelation ; +https://www.ica.org/standards/RiC/ontology#authorshipRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#childRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#contained ; https://www.ica.org/standards/RiC/ontology#wasContainedBy ; +https://www.ica.org/standards/RiC/ontology#containsOrContained ; https://www.ica.org/standards/RiC/ontology#isOrWasContainedBy ; RiC-R007 ('contains or contained' relation) +https://www.ica.org/standards/RiC/ontology#containsTransitive ; https://www.ica.org/standards/RiC/ontology#isContainedByTransitive ; +https://www.ica.org/standards/RiC/ontology#correspondenceRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#creationRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#creationWithRole ; https://www.ica.org/standards/RiC/ontology#roleIsContextOfCreationRelation ; +https://www.ica.org/standards/RiC/ontology#derivationRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#descendanceRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#describesOrDescribed ; https://www.ica.org/standards/RiC/ontology#isOrWasDescribedBy ; RiC-R021 ('describes or described' relation) +https://www.ica.org/standards/RiC/ontology#directlyContains ; https://www.ica.org/standards/RiC/ontology#isDirectlyContainedBy ; +https://www.ica.org/standards/RiC/ontology#directlyFollowsInSequence ; https://www.ica.org/standards/RiC/ontology#directlyPrecedesInSequence ; +https://www.ica.org/standards/RiC/ontology#directlyIncludes ; https://www.ica.org/standards/RiC/ontology#isDirectlyIncludedIn ; +https://www.ica.org/standards/RiC/ontology#directlyPrecedesInSequence ; https://www.ica.org/standards/RiC/ontology#directlyFollowsInSequence ; +https://www.ica.org/standards/RiC/ontology#documentedBy ; https://www.ica.org/standards/RiC/ontology#documents ; RiC-R033i ('documented by' relation) +https://www.ica.org/standards/RiC/ontology#documents ; https://www.ica.org/standards/RiC/ontology#documentedBy ; RiC-R033 ('documents' relation) +https://www.ica.org/standards/RiC/ontology#eventRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#evidences ; https://www.ica.org/standards/RiC/ontology#isEvidencedBy ; Inverse of 'is evidenced by' object property. +https://www.ica.org/standards/RiC/ontology#existsOrExistedIn ; https://www.ica.org/standards/RiC/ontology#hasOrHadPosition ; RiC-R056 ('exists or existed in' relation) +https://www.ica.org/standards/RiC/ontology#expressesOrExpressed ; https://www.ica.org/standards/RiC/ontology#isOrWasExpressedBy ; RiC-R064i ('expresses or expressed' relation) +https://www.ica.org/standards/RiC/ontology#familyRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#followedInSequence ; https://www.ica.org/standards/RiC/ontology#precededInSequence ; +https://www.ica.org/standards/RiC/ontology#followsInSequenceTransitive ; https://www.ica.org/standards/RiC/ontology#precedesInSequenceTransitive ; +https://www.ica.org/standards/RiC/ontology#followsInTime ; https://www.ica.org/standards/RiC/ontology#precedesInTime ; RiC-R009i ('follows in time' relation) +https://www.ica.org/standards/RiC/ontology#followsOrFollowed ; https://www.ica.org/standards/RiC/ontology#precedesOrPreceded ; RiC-R008i ('follows or followed' relation) +https://www.ica.org/standards/RiC/ontology#functionalEquivalenceRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#groupSubdivisionRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#hadComponent ; https://www.ica.org/standards/RiC/ontology#wasComponentOf ; +https://www.ica.org/standards/RiC/ontology#hadConstituent ; https://www.ica.org/standards/RiC/ontology#wasConstituentOf ; +https://www.ica.org/standards/RiC/ontology#hadPart ; https://www.ica.org/standards/RiC/ontology#wasPartOf ; +https://www.ica.org/standards/RiC/ontology#hadSubdivision ; https://www.ica.org/standards/RiC/ontology#wasSubdivisionOf ; +https://www.ica.org/standards/RiC/ontology#hadSubevent ; https://www.ica.org/standards/RiC/ontology#wasSubeventOf ; +https://www.ica.org/standards/RiC/ontology#hadSubordinate ; https://www.ica.org/standards/RiC/ontology#wasSubordinateTo ; +https://www.ica.org/standards/RiC/ontology#hasAccumulator ; https://www.ica.org/standards/RiC/ontology#isAccumulatorOf ; RiC-R028 ('has accumulator' relation) +https://www.ica.org/standards/RiC/ontology#hasActivityType ; https://www.ica.org/standards/RiC/ontology#isActivityTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasAddressee ; https://www.ica.org/standards/RiC/ontology#isAddresseeOf ; RiC-R032 ('has addressee' relation) +https://www.ica.org/standards/RiC/ontology#hasAncestor ; https://www.ica.org/standards/RiC/ontology#hasDescendant ; RiC-R017i (has ancestor relation) +https://www.ica.org/standards/RiC/ontology#hasAuthor ; https://www.ica.org/standards/RiC/ontology#isAuthorOf ; RiC-R079 ('has author' relation) +https://www.ica.org/standards/RiC/ontology#hasBeginningDate ; https://www.ica.org/standards/RiC/ontology#isBeginningDateOf ; RiC-R069i ('has beginning date' relation) +https://www.ica.org/standards/RiC/ontology#hasBirthDate ; https://www.ica.org/standards/RiC/ontology#isBirthDateOf ; RiC-R070i ('has birth date' relation) +https://www.ica.org/standards/RiC/ontology#hasBirthPlace ; https://www.ica.org/standards/RiC/ontology#isBirthPlaceOf ; +https://www.ica.org/standards/RiC/ontology#hasCarrierType ; https://www.ica.org/standards/RiC/ontology#isCarrierTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasChild ; https://www.ica.org/standards/RiC/ontology#isChildOf ; RiC-R018 ('has child' relation) +https://www.ica.org/standards/RiC/ontology#hasCollector ; https://www.ica.org/standards/RiC/ontology#isCollectorOf ; RiC-R030 ('has collector' relation) +https://www.ica.org/standards/RiC/ontology#hasComponentTransitive ; https://www.ica.org/standards/RiC/ontology#isComponentOfTransitive ; +https://www.ica.org/standards/RiC/ontology#hasConstituentTransitive ; https://www.ica.org/standards/RiC/ontology#isConstituentOfTransitive ; +https://www.ica.org/standards/RiC/ontology#hasContentOfType ; https://www.ica.org/standards/RiC/ontology#isContentTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasCopy ; https://www.ica.org/standards/RiC/ontology#isCopyOf ; RiC-R012 ('has copy' relation) +https://www.ica.org/standards/RiC/ontology#hasCreationDate ; https://www.ica.org/standards/RiC/ontology#isCreationDateOf ; RiC-R080i ('has creation date' relation) +https://www.ica.org/standards/RiC/ontology#hasCreator ; https://www.ica.org/standards/RiC/ontology#isCreatorOf ; RiC-R027 ('has creator' relation) +https://www.ica.org/standards/RiC/ontology#hasDateType ; https://www.ica.org/standards/RiC/ontology#isDateTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasDeathDate ; https://www.ica.org/standards/RiC/ontology#isDeathDateOf ; RiC-R072i ('has death date' relation) +https://www.ica.org/standards/RiC/ontology#hasDeathPlace ; https://www.ica.org/standards/RiC/ontology#isDeathPlaceOf ; +https://www.ica.org/standards/RiC/ontology#hasDescendant ; https://www.ica.org/standards/RiC/ontology#hasAncestor ; RiC-R017 ('has descendant' relation) +https://www.ica.org/standards/RiC/ontology#hasDestructionDate ; https://www.ica.org/standards/RiC/ontology#isDestructionDateOf ; +https://www.ica.org/standards/RiC/ontology#hasDirectComponent ; https://www.ica.org/standards/RiC/ontology#isDirectComponentOf ; +https://www.ica.org/standards/RiC/ontology#hasDirectConstituent ; https://www.ica.org/standards/RiC/ontology#isDirectConstituentOf ; +https://www.ica.org/standards/RiC/ontology#hasDirectPart ; https://www.ica.org/standards/RiC/ontology#isDirectPartOf ; +https://www.ica.org/standards/RiC/ontology#hasDirectSubdivision ; https://www.ica.org/standards/RiC/ontology#isDirectSubdivisionOf ; +https://www.ica.org/standards/RiC/ontology#hasDirectSubevent ; https://www.ica.org/standards/RiC/ontology#isDirectSubeventOf ; +https://www.ica.org/standards/RiC/ontology#hasDirectSubordinate ; https://www.ica.org/standards/RiC/ontology#isDirectSubordinateTo ; +https://www.ica.org/standards/RiC/ontology#hasDocumentaryFormType ; https://www.ica.org/standards/RiC/ontology#isDocumentaryFormTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasDraft ; https://www.ica.org/standards/RiC/ontology#isDraftOf ; RiC-011i ('has draft' relation) +https://www.ica.org/standards/RiC/ontology#hasEndDate ; https://www.ica.org/standards/RiC/ontology#isEndDateOf ; RiC-R071i ('has end date' relation) +https://www.ica.org/standards/RiC/ontology#hasEventType ; https://www.ica.org/standards/RiC/ontology#isEventTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasExtent ; https://www.ica.org/standards/RiC/ontology#isExtentOf ; +https://www.ica.org/standards/RiC/ontology#hasExtentType ; https://www.ica.org/standards/RiC/ontology#isExtentTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasFamilyAssociationWith ; ; RiC-R047 ('has family association with' relation) +https://www.ica.org/standards/RiC/ontology#hasFamilyType ; https://www.ica.org/standards/RiC/ontology#isFamilyTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasGeneticLinkToRecordResource ; ; RiC-R023 ('has genetic link to record resource' relation) +https://www.ica.org/standards/RiC/ontology#hasIdentifierType ; https://www.ica.org/standards/RiC/ontology#isIdentifierTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasModificationDate ; https://www.ica.org/standards/RiC/ontology#isModificationDateOf ; RiC-R073i ('has modification date' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadAgentName ; https://www.ica.org/standards/RiC/ontology#isOrWasAgentNameOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithCategory ; https://www.ica.org/standards/RiC/ontology#isOrWasCategoryOfAllMembersOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithContentType ; https://www.ica.org/standards/RiC/ontology#isOrWasContentTypeOfAllMembersOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithCreationDate ; https://www.ica.org/standards/RiC/ontology#isOrWasCreationDateOfAllMembersOf ; RiC-R081i ('has or had all members with creation date' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithDocumentaryFormType ; https://www.ica.org/standards/RiC/ontology#isOrWasDocumentaryFormTypeOfAllMembersOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithLanguage ; https://www.ica.org/standards/RiC/ontology#isOrWasLanguageOfAllMembersOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithLegalStatus ; https://www.ica.org/standards/RiC/ontology#isOrWasLegalStatusOfAllMembersOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithRecordState ; https://www.ica.org/standards/RiC/ontology#isOrWasRecordStateOfAllMembersOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadAnalogueInstantiation ; https://www.ica.org/standards/RiC/ontology#isOrWasAnalogueInstantiationOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadAppellation ; https://www.ica.org/standards/RiC/ontology#isOrWasAppellationOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadAuthorityOver ; https://www.ica.org/standards/RiC/ontology#isOrWasUnderAuthorityOf ; RiC-R036 ('has or had authority over' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadCategory ; https://www.ica.org/standards/RiC/ontology#isOrWasCategoryOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadComponent ; https://www.ica.org/standards/RiC/ontology#isOrWasComponentOf ; RiC-R004 ('has or had component' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadConstituent ; https://www.ica.org/standards/RiC/ontology#isOrWasConstituentOf ; RiC-R003 ('has or had constituent' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadController ; https://www.ica.org/standards/RiC/ontology#isOrWasControllerOf ; RiC-R041i ('has or had controller' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadCoordinates ; https://www.ica.org/standards/RiC/ontology#isOrWasCoordinatesOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadCorporateBodyType ; https://www.ica.org/standards/RiC/ontology#isOrWasCorporateBodyTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadCorrespondent ; ; RiC-R052 ('has or had correspondent' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadDemographicGroup ; https://www.ica.org/standards/RiC/ontology#isOrWasDemographicGroupOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadDerivedInstantiation ; https://www.ica.org/standards/RiC/ontology#isOrWasDerivedFromInstantiation ; RiC-R014 ('has or had derived instantiation' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadDigitalInstantiation ; https://www.ica.org/standards/RiC/ontology#isOrWasDigitalInstantiationOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadEmployer ; https://www.ica.org/standards/RiC/ontology#isOrWasEmployerOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadHolder ; https://www.ica.org/standards/RiC/ontology#isOrWasHolderOf ; RiC-R039i ('has or had holder' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadIdentifier ; https://www.ica.org/standards/RiC/ontology#isOrWasIdentifierOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadInstantiation ; https://www.ica.org/standards/RiC/ontology#isOrWasInstantiationOf ; RiC-R025 ('has or had instantiation' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadIntellectualPropertyRightsHolder ; https://www.ica.org/standards/RiC/ontology#isOrWasHolderOfIntellectualPropertyRightsOf ; RiC-R040i ('has or had intellectual property rights holder ' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadJurisdiction ; https://www.ica.org/standards/RiC/ontology#isOrWasJurisdictionOf ; RiC-R076i ('has or had jurisdiction' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadLanguage ; https://www.ica.org/standards/RiC/ontology#isOrWasLanguageOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadLeader ; https://www.ica.org/standards/RiC/ontology#isOrWasLeaderOf ; RiC-R042i ('has or had leader' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadLegalStatus ; https://www.ica.org/standards/RiC/ontology#isOrWasLegalStatusOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadLocation ; https://www.ica.org/standards/RiC/ontology#isOrWasLocationOf ; RiC-R075i ('has or had location' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadMainSubject ; https://www.ica.org/standards/RiC/ontology#isOrWasMainSubjectOf ; RiC-R020 ('has or had main subject' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadManager ; https://www.ica.org/standards/RiC/ontology#isOrWasManagerOf ; RiC-R038i ('is or was managed by' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadMandateType ; https://www.ica.org/standards/RiC/ontology#isOrWasMandateTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadMember ; https://www.ica.org/standards/RiC/ontology#isOrWasMemberOf ; RiC-R055 ('has or had member' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadMostMembersWithCreationDate ; https://www.ica.org/standards/RiC/ontology#isOrWasCreationDateOfMostMembersOf ; RiC-R083i ('has or had most members with creation date' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadName ; https://www.ica.org/standards/RiC/ontology#isOrWasNameOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadOccupationOfType ; https://www.ica.org/standards/RiC/ontology#isOrWasOccupationTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadOwner ; https://www.ica.org/standards/RiC/ontology#isOrWasOwnerOf ; RiC-R037i ('has or had owner' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadPart ; https://www.ica.org/standards/RiC/ontology#isOrWasPartOf ; RiC-R002 ('has or had part' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadParticipant ; https://www.ica.org/standards/RiC/ontology#isOrWasParticipantIn ; RiC-R058 ('has or had participant' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadPhysicalLocation ; https://www.ica.org/standards/RiC/ontology#isOrWasPhysicalLocationOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadPlaceName ; https://www.ica.org/standards/RiC/ontology#isOrWasPlaceNameOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadPlaceType ; https://www.ica.org/standards/RiC/ontology#isOrWasPlaceTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadPosition ; https://www.ica.org/standards/RiC/ontology#existsOrExistedIn ; RiC-R056i ('has or had position' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadRuleType ; https://www.ica.org/standards/RiC/ontology#isOrWasRuleTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithCategory ; https://www.ica.org/standards/RiC/ontology#isOrWasCategoryOfSomeMembersOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithContentType ; https://www.ica.org/standards/RiC/ontology#isOrWasContentTypeOfSomeMembersOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithCreationDate ; https://www.ica.org/standards/RiC/ontology#isOrWasCreationDateOfSomeMembersOf ; RiC-R082i ('has or had some members with creation date' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithDocumentaryFormType ; https://www.ica.org/standards/RiC/ontology#isOrWasDocumentaryFormTypeOfSomeMembersOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithLanguage ; https://www.ica.org/standards/RiC/ontology#isOrWasLanguageOfSomeMembersOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithLegalStatus ; https://www.ica.org/standards/RiC/ontology#isOrWasLegalStatusOfSomeMembersOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithRecordState ; https://www.ica.org/standards/RiC/ontology#isOrWasRecordStateOfSomeMembersOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadSpouse ; ; RiC-R049 ('has or had spouse' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadStudent ; https://www.ica.org/standards/RiC/ontology#hasOrHadTeacher ; RiC-R053i ('has or had student' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadSubdivision ; https://www.ica.org/standards/RiC/ontology#isOrWasSubdivisionOf ; RiC-R005 ('has or had subdivision' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadSubevent ; https://www.ica.org/standards/RiC/ontology#isOrWasSubeventOf ; RiC-R006 ('has or had subevent' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadSubject ; https://www.ica.org/standards/RiC/ontology#isOrWasSubjectOf ; RiC-R019 ('has or had subject' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadSubordinate ; https://www.ica.org/standards/RiC/ontology#isOrWasSubordinateTo ; RiC-R045 ('has or had subordinate ' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadTeacher ; https://www.ica.org/standards/RiC/ontology#hasOrHadStudent ; RiC-R053 ('has or had teacher' relation) +https://www.ica.org/standards/RiC/ontology#hasOrHadTitle ; https://www.ica.org/standards/RiC/ontology#isOrWasTitleOf ; +https://www.ica.org/standards/RiC/ontology#hasOrHadWorkRelationWith ; ; RiC-R046 ('has or had work relation with' relation) +https://www.ica.org/standards/RiC/ontology#hasOrganicOrFunctionalProvenance ; https://www.ica.org/standards/RiC/ontology#isOrganicOrFunctionalProvenanceOf ; +https://www.ica.org/standards/RiC/ontology#hasOrganicProvenance ; https://www.ica.org/standards/RiC/ontology#isOrganicProvenanceOf ; RiC-R026 ('has provenance' relation) +https://www.ica.org/standards/RiC/ontology#hasOriginal ; https://www.ica.org/standards/RiC/ontology#isOriginalOf ; RiC-R010i ('is original of' relation) +https://www.ica.org/standards/RiC/ontology#hasPartTransitive ; https://www.ica.org/standards/RiC/ontology#isPartOfTransitive ; +https://www.ica.org/standards/RiC/ontology#hasProductionTechniqueType ; https://www.ica.org/standards/RiC/ontology#isProductionTechniqueTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasPublicationDate ; https://www.ica.org/standards/RiC/ontology#isPublicationDateOf ; +https://www.ica.org/standards/RiC/ontology#hasPublisher ; https://www.ica.org/standards/RiC/ontology#isPublisherOf ; +https://www.ica.org/standards/RiC/ontology#hasReceiver ; https://www.ica.org/standards/RiC/ontology#isReceiverOf ; RiC-R029 ('has receiver' relation) +https://www.ica.org/standards/RiC/ontology#hasRecordSetType ; https://www.ica.org/standards/RiC/ontology#isRecordSetTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasRecordState ; https://www.ica.org/standards/RiC/ontology#isRecordStateOf ; +https://www.ica.org/standards/RiC/ontology#hasReply ; https://www.ica.org/standards/RiC/ontology#isReplyTo ; RiC-R013 ('has reply' relation) +https://www.ica.org/standards/RiC/ontology#hasRepresentationType ; https://www.ica.org/standards/RiC/ontology#isRepresentationTypeOf ; +https://www.ica.org/standards/RiC/ontology#hasSender ; https://www.ica.org/standards/RiC/ontology#isSenderOf ; RiC-R031 ('has sender' relation) +https://www.ica.org/standards/RiC/ontology#hasSibling ; ; RiC-R048 ('has sibling' relation) +https://www.ica.org/standards/RiC/ontology#hasSubdivisionTransitive ; https://www.ica.org/standards/RiC/ontology#isSubdivisionOfTransitive ; +https://www.ica.org/standards/RiC/ontology#hasSubeventTransitive ; https://www.ica.org/standards/RiC/ontology#isSubeventOfTransitive ; +https://www.ica.org/standards/RiC/ontology#hasSubordinateTransitive ; https://www.ica.org/standards/RiC/ontology#isSubordinateToTransitive ; +https://www.ica.org/standards/RiC/ontology#hasSuccessor ; https://www.ica.org/standards/RiC/ontology#isSuccessorOf ; RIC-R016 ('has successor' relation) +http://www.w3.org/2004/02/skos/core#hasTopConcept ; http://www.w3.org/2004/02/skos/core#topConceptOf ; +https://www.ica.org/standards/RiC/ontology#hasUnitOfMeasurement ; https://www.ica.org/standards/RiC/ontology#isUnitOfMeasurementOf ; +https://www.ica.org/standards/RiC/ontology#hasWithin ; https://www.ica.org/standards/RiC/ontology#isWithin ; RiC-R085i ('has within' relation) +https://www.ica.org/standards/RiC/ontology#included ; https://www.ica.org/standards/RiC/ontology#wasIncludedIn ; +https://www.ica.org/standards/RiC/ontology#includesOrIncluded ; https://www.ica.org/standards/RiC/ontology#isOrWasIncludedIn ; RiC-R024 ('includes or included' relation) +https://www.ica.org/standards/RiC/ontology#includesTransitive ; https://www.ica.org/standards/RiC/ontology#isIncludedInTransitive ; +http://www.w3.org/2004/02/skos/core#inScheme ; ; +https://www.ica.org/standards/RiC/ontology#instantiationToInstantiationRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#intellectualPropertyRightsRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#intersects ; ; RiC-R086 ('intersects' relation) +https://www.ica.org/standards/RiC/ontology#isAccumulatorOf ; https://www.ica.org/standards/RiC/ontology#hasAccumulator ; RiC-R028i ('is accumulator of' relation) +https://www.ica.org/standards/RiC/ontology#isActivityTypeOf ; https://www.ica.org/standards/RiC/ontology#hasActivityType ; +https://www.ica.org/standards/RiC/ontology#isAddresseeOf ; https://www.ica.org/standards/RiC/ontology#hasAddressee ; RiC-032i ('is addressee of' relation) +https://www.ica.org/standards/RiC/ontology#isAgentAssociatedWithAgent ; ; RiC-R044 ('is agent associated with agent' relation) +https://www.ica.org/standards/RiC/ontology#isAgentAssociatedWithPlace ; https://www.ica.org/standards/RiC/ontology#isPlaceAssociatedWithAgent ; +https://www.ica.org/standards/RiC/ontology#isAssociatedWithDate ; https://www.ica.org/standards/RiC/ontology#isDateAssociatedWith ; RiC-R068i ('is associated with date' relation) +https://www.ica.org/standards/RiC/ontology#isAssociatedWithEvent ; https://www.ica.org/standards/RiC/ontology#isEventAssociatedWith ; RiC-R057i ('is associated with event' relation) +https://www.ica.org/standards/RiC/ontology#isAssociatedWithPlace ; https://www.ica.org/standards/RiC/ontology#isPlaceAssociatedWith ; RiC-R074i ('is associated with place' relation) +https://www.ica.org/standards/RiC/ontology#isAssociatedWithRule ; https://www.ica.org/standards/RiC/ontology#isRuleAssociatedWith ; RiC-R062i ('is associated with rule' relation) +https://www.ica.org/standards/RiC/ontology#isAuthorOf ; https://www.ica.org/standards/RiC/ontology#hasAuthor ; RiC-R079i ('is author of' relation) +https://www.ica.org/standards/RiC/ontology#isAuthorizingAgentInMandateRelation ; https://www.ica.org/standards/RiC/ontology#authorizingAgent ; +https://www.ica.org/standards/RiC/ontology#isBeginningDateOf ; https://www.ica.org/standards/RiC/ontology#hasBeginningDate ; RiC-R069 ('is beginning date of' relation) +https://www.ica.org/standards/RiC/ontology#isBirthDateOf ; https://www.ica.org/standards/RiC/ontology#hasBirthDate ; RiC-R070 ('is birth date of' relation) +https://www.ica.org/standards/RiC/ontology#isBirthPlaceOf ; https://www.ica.org/standards/RiC/ontology#hasBirthPlace ; +https://www.ica.org/standards/RiC/ontology#isCarrierTypeOf ; https://www.ica.org/standards/RiC/ontology#hasCarrierType ; +https://www.ica.org/standards/RiC/ontology#isChildOf ; https://www.ica.org/standards/RiC/ontology#hasChild ; RiC-R018i ('is child of' relation) +https://www.ica.org/standards/RiC/ontology#isCollectorOf ; https://www.ica.org/standards/RiC/ontology#hasCollector ; RiC-R030i ('is collector of' relation) +https://www.ica.org/standards/RiC/ontology#isComponentOfTransitive ; https://www.ica.org/standards/RiC/ontology#hasComponentTransitive ; +https://www.ica.org/standards/RiC/ontology#isConstituentOfTransitive ; https://www.ica.org/standards/RiC/ontology#hasConstituentTransitive ; +https://www.ica.org/standards/RiC/ontology#isContainedByTransitive ; https://www.ica.org/standards/RiC/ontology#containsTransitive ; +https://www.ica.org/standards/RiC/ontology#isContentTypeOf ; https://www.ica.org/standards/RiC/ontology#hasContentOfType ; +https://www.ica.org/standards/RiC/ontology#isCopyOf ; https://www.ica.org/standards/RiC/ontology#hasCopy ; RiC-R012i ('is copy of' relation) +https://www.ica.org/standards/RiC/ontology#isCreationDateOf ; https://www.ica.org/standards/RiC/ontology#hasCreationDate ; RiC-R080 ('is creation date of' relation) +https://www.ica.org/standards/RiC/ontology#isCreatorOf ; https://www.ica.org/standards/RiC/ontology#hasCreator ; RiC-R027i ('is creator of 'relation') +https://www.ica.org/standards/RiC/ontology#isDateAssociatedWith ; https://www.ica.org/standards/RiC/ontology#isAssociatedWithDate ; RiC-R068 ('is date associated with' relation) +https://www.ica.org/standards/RiC/ontology#isDateOfOccurrenceOf ; https://www.ica.org/standards/RiC/ontology#occurredAtDate ; RiC-R084 ('is date of occurrence of' relation) +https://www.ica.org/standards/RiC/ontology#isDateTypeOf ; https://www.ica.org/standards/RiC/ontology#hasDateType ; +https://www.ica.org/standards/RiC/ontology#isDeathDateOf ; https://www.ica.org/standards/RiC/ontology#hasDeathDate ; RiC-R072 ('is death date of' relation) +https://www.ica.org/standards/RiC/ontology#isDeathPlaceOf ; https://www.ica.org/standards/RiC/ontology#hasDeathPlace ; +https://www.ica.org/standards/RiC/ontology#isDestructionDateOf ; https://www.ica.org/standards/RiC/ontology#hasDestructionDate ; +https://www.ica.org/standards/RiC/ontology#isDirectComponentOf ; https://www.ica.org/standards/RiC/ontology#hasDirectComponent ; +https://www.ica.org/standards/RiC/ontology#isDirectConstituentOf ; https://www.ica.org/standards/RiC/ontology#hasDirectConstituent ; +https://www.ica.org/standards/RiC/ontology#isDirectPartOf ; https://www.ica.org/standards/RiC/ontology#hasDirectPart ; +https://www.ica.org/standards/RiC/ontology#isDirectSubdivisionOf ; https://www.ica.org/standards/RiC/ontology#hasDirectSubdivision ; +https://www.ica.org/standards/RiC/ontology#isDirectSubeventOf ; https://www.ica.org/standards/RiC/ontology#hasDirectSubevent ; +https://www.ica.org/standards/RiC/ontology#isDirectSubordinateTo ; https://www.ica.org/standards/RiC/ontology#hasDirectSubordinate ; +https://www.ica.org/standards/RiC/ontology#isDirectlyContainedBy ; https://www.ica.org/standards/RiC/ontology#directlyContains ; +https://www.ica.org/standards/RiC/ontology#isDirectlyIncludedIn ; https://www.ica.org/standards/RiC/ontology#directlyIncludes ; +https://www.ica.org/standards/RiC/ontology#isDocumentaryFormTypeOf ; https://www.ica.org/standards/RiC/ontology#hasDocumentaryFormType ; +https://www.ica.org/standards/RiC/ontology#isDraftOf ; https://www.ica.org/standards/RiC/ontology#hasDraft ; RiC-R011 ('is draft of' relation) +https://www.ica.org/standards/RiC/ontology#isEndDateOf ; https://www.ica.org/standards/RiC/ontology#hasEndDate ; RiC-R071 ('is end date of' relation) +https://www.ica.org/standards/RiC/ontology#isEquivalentTo ; ; +https://www.ica.org/standards/RiC/ontology#isEventAssociatedWith ; https://www.ica.org/standards/RiC/ontology#isAssociatedWithEvent ; RiC-R057 ('is event associated with' relation) +https://www.ica.org/standards/RiC/ontology#isEventTypeOf ; https://www.ica.org/standards/RiC/ontology#hasEventType ; +https://www.ica.org/standards/RiC/ontology#isEvidencedBy ; https://www.ica.org/standards/RiC/ontology#evidences ; Object property implementation of RiC-RA05 (Source of Relation attribute). +https://www.ica.org/standards/RiC/ontology#isExtentOf ; https://www.ica.org/standards/RiC/ontology#hasExtent ; +https://www.ica.org/standards/RiC/ontology#isExtentTypeOf ; https://www.ica.org/standards/RiC/ontology#hasExtentType ; +https://www.ica.org/standards/RiC/ontology#isFamilyTypeOf ; https://www.ica.org/standards/RiC/ontology#hasFamilyType ; +https://www.ica.org/standards/RiC/ontology#isFromUseDateOf ; https://www.ica.org/standards/RiC/ontology#wasUsedFromDate ; +https://www.ica.org/standards/RiC/ontology#isFunctionallyEquivalentTo ; ; RiC-R035 ('is functionally equivalent to' relation) +https://www.ica.org/standards/RiC/ontology#isIdentifierTypeOf ; https://www.ica.org/standards/RiC/ontology#hasIdentifierType ; +https://www.ica.org/standards/RiC/ontology#isIncludedInTransitive ; https://www.ica.org/standards/RiC/ontology#includesTransitive ; +https://www.ica.org/standards/RiC/ontology#isInstantiationAssociatedWithInstantiation ; ; RiC-R034 ('is instantiation associated with instantiation' relation) +https://www.ica.org/standards/RiC/ontology#isLastUpdateDateOf ; https://www.ica.org/standards/RiC/ontology#wasLastUpdatedAtDate ; +https://www.ica.org/standards/RiC/ontology#isModificationDateOf ; https://www.ica.org/standards/RiC/ontology#hasModificationDate ; RiC-R073 ('is modification date of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasAdjacentTo ; ; RiC-R077 ('is or was adjacent to' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasAffectedBy ; https://www.ica.org/standards/RiC/ontology#affectsOrAffected ; RiC-R059i ('is or was affected by' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasAgentNameOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadAgentName ; +https://www.ica.org/standards/RiC/ontology#isOrWasAnalogueInstantiationOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadAnalogueInstantiation ; +https://www.ica.org/standards/RiC/ontology#isOrWasAppellationOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadAppellation ; +https://www.ica.org/standards/RiC/ontology#isOrWasCategoryOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadCategory ; +https://www.ica.org/standards/RiC/ontology#isOrWasCategoryOfAllMembersOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithCategory ; +https://www.ica.org/standards/RiC/ontology#isOrWasCategoryOfSomeMembersOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithCategory ; +https://www.ica.org/standards/RiC/ontology#isOrWasComponentOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadComponent ; RiC-R004i ('is or was component of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasConstituentOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadConstituent ; RiC-R003i ('is or was constituent of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasContainedBy ; https://www.ica.org/standards/RiC/ontology#containsOrContained ; RiC-R007i ('is or was contained by' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasContentTypeOfAllMembersOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithContentType ; +https://www.ica.org/standards/RiC/ontology#isOrWasContentTypeOfSomeMembersOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithContentType ; +https://www.ica.org/standards/RiC/ontology#isOrWasControllerOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadController ; RiC-R041 ('is or was controller of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasCoordinatesOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadCoordinates ; +https://www.ica.org/standards/RiC/ontology#isOrWasCorporateBodyTypeOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadCorporateBodyType ; +https://www.ica.org/standards/RiC/ontology#isOrWasCreationDateOfAllMembersOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithCreationDate ; RiC-R081 ('is or was creation date of all members of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasCreationDateOfMostMembersOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadMostMembersWithCreationDate ; RiC-R083 ('is or was creation date of most members of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasCreationDateOfSomeMembersOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithCreationDate ; RiC-R082 ('is or was creation date of some members of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasDemographicGroupOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadDemographicGroup ; +https://www.ica.org/standards/RiC/ontology#isOrWasDerivedFromInstantiation ; https://www.ica.org/standards/RiC/ontology#hasOrHadDerivedInstantiation ; RiC-R014i ('is or was derived from instantiation' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasDescribedBy ; https://www.ica.org/standards/RiC/ontology#describesOrDescribed ; RiC-R021i ('is or was described by' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasDigitalInstantiationOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadDigitalInstantiation ; +https://www.ica.org/standards/RiC/ontology#isOrWasDocumentaryFormTypeOfAllMembersOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithDocumentaryFormType ; +https://www.ica.org/standards/RiC/ontology#isOrWasDocumentaryFormTypeOfSomeMembersOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithDocumentaryFormType ; +https://www.ica.org/standards/RiC/ontology#isOrWasEmployerOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadEmployer ; +https://www.ica.org/standards/RiC/ontology#isOrWasEnforcedBy ; https://www.ica.org/standards/RiC/ontology#isOrWasResponsibleForEnforcing ; RiC-R066 ('is or was enforced by' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasExpressedBy ; https://www.ica.org/standards/RiC/ontology#expressesOrExpressed ; RiC-R064 ('is or was expressed by' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasHolderOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadHolder ; RiC-R039 ('is or was holder of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasHolderOfIntellectualPropertyRightsOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadIntellectualPropertyRightsHolder ; RiC-R040 ('is or was holder of intellectual property rights of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasIdentifierOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadIdentifier ; +https://www.ica.org/standards/RiC/ontology#isOrWasIncludedIn ; https://www.ica.org/standards/RiC/ontology#includesOrIncluded ; RiC-R024i ('is or was included in' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasInstantiationOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadInstantiation ; RiC-R025i ('is or was instantiation of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasJurisdictionOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadJurisdiction ; RiC-R076 ('is or was jurisdiction of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasLanguageOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadLanguage ; +https://www.ica.org/standards/RiC/ontology#isOrWasLanguageOfAllMembersOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithLanguage ; +https://www.ica.org/standards/RiC/ontology#isOrWasLanguageOfSomeMembersOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithLanguage ; +https://www.ica.org/standards/RiC/ontology#isOrWasLeaderOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadLeader ; RiC-R042 ('is or was leader of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasLegalStatusOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadLegalStatus ; +https://www.ica.org/standards/RiC/ontology#isOrWasLegalStatusOfAllMembersOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithLegalStatus ; +https://www.ica.org/standards/RiC/ontology#isOrWasLegalStatusOfSomeMembersOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithLegalStatus ; +https://www.ica.org/standards/RiC/ontology#isOrWasLocationOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadLocation ; RiC-R075 ('is or was location of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasLocationOfAgent ; https://www.ica.org/standards/RiC/ontology#agentHasOrHadLocation ; +https://www.ica.org/standards/RiC/ontology#isOrWasMainSubjectOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadMainSubject ; RiC-R020i ('is or was main subject of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasManagerOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadManager ; RiC-R038 ('is or was manager of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasMandateTypeOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadMandateType ; +https://www.ica.org/standards/RiC/ontology#isOrWasMemberOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadMember ; RiC-R055i ('is or was member of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasNameOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadName ; +https://www.ica.org/standards/RiC/ontology#isOrWasOccupationTypeOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadOccupationOfType ; +https://www.ica.org/standards/RiC/ontology#isOrWasOccupiedBy ; https://www.ica.org/standards/RiC/ontology#occupiesOrOccupied ; RiC-R054i ('is or was occupied by' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasOwnerOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadOwner ; RiC-R037 ('is or was owner of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasPartOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadPart ; RiC-R002i ('is or was part of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasParticipantIn ; https://www.ica.org/standards/RiC/ontology#hasOrHadParticipant ; RiC-R058i ('is or was participant in' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasPerformedBy ; https://www.ica.org/standards/RiC/ontology#performsOrPerformed ; RiC-R060 ('is or was performed by' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasPhysicalLocationOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadPhysicalLocation ; +https://www.ica.org/standards/RiC/ontology#isOrWasPlaceNameOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadPlaceName ; +https://www.ica.org/standards/RiC/ontology#isOrWasPlaceTypeOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadPlaceType ; +https://www.ica.org/standards/RiC/ontology#isOrWasRecordStateOfAllMembersOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadAllMembersWithRecordState ; +https://www.ica.org/standards/RiC/ontology#isOrWasRecordStateOfSomeMembersOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadSomeMembersWithRecordState ; +https://www.ica.org/standards/RiC/ontology#isOrWasRegulatedBy ; https://www.ica.org/standards/RiC/ontology#regulatesOrRegulated ; RiC-R063i ('is or was regulated by' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasResponsibleForEnforcing ; https://www.ica.org/standards/RiC/ontology#isOrWasEnforcedBy ; RiC-R066i ('is or was responsible for enforcing' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasRuleTypeOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadRuleType ; +https://www.ica.org/standards/RiC/ontology#isOrWasSubdivisionOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadSubdivision ; RiC-R005i ('is or was subdivision' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasSubeventOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadSubevent ; RiC-R006i ('is or was subevent of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasSubjectOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadSubject ; RIc-R019i ('is or was subject of' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasSubordinateTo ; https://www.ica.org/standards/RiC/ontology#hasOrHadSubordinate ; RiC-R045i ('is or was subordinate to' relation) +https://www.ica.org/standards/RiC/ontology#isOrWasTitleOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadTitle ; +https://www.ica.org/standards/RiC/ontology#isOrWasUnderAuthorityOf ; https://www.ica.org/standards/RiC/ontology#hasOrHadAuthorityOver ; RiC-R036i ('is or was under authority of' relation) +https://www.ica.org/standards/RiC/ontology#isOrganicOrFunctionalProvenanceOf ; https://www.ica.org/standards/RiC/ontology#hasOrganicOrFunctionalProvenance ; +https://www.ica.org/standards/RiC/ontology#isOrganicProvenanceOf ; https://www.ica.org/standards/RiC/ontology#hasOrganicProvenance ; RiC-R026i ('is provenance of' relation) +https://www.ica.org/standards/RiC/ontology#isOriginalOf ; https://www.ica.org/standards/RiC/ontology#hasOriginal ; RiC-R010 (is original of relation) +https://www.ica.org/standards/RiC/ontology#isPartOfTransitive ; https://www.ica.org/standards/RiC/ontology#hasPartTransitive ; +https://www.ica.org/standards/RiC/ontology#isPlaceAssociatedWith ; https://www.ica.org/standards/RiC/ontology#isAssociatedWithPlace ; RiC-R074 ('is place associated with' relation) +https://www.ica.org/standards/RiC/ontology#isPlaceAssociatedWithAgent ; https://www.ica.org/standards/RiC/ontology#isAgentAssociatedWithPlace ; +https://www.ica.org/standards/RiC/ontology#isProductionTechniqueTypeOf ; https://www.ica.org/standards/RiC/ontology#hasProductionTechniqueType ; +https://www.ica.org/standards/RiC/ontology#isPublicationDateOf ; https://www.ica.org/standards/RiC/ontology#hasPublicationDate ; +https://www.ica.org/standards/RiC/ontology#isPublisherOf ; https://www.ica.org/standards/RiC/ontology#hasPublisher ; +https://www.ica.org/standards/RiC/ontology#isReceiverOf ; https://www.ica.org/standards/RiC/ontology#hasReceiver ; RiC-R029i ('is receiver of' relation) +https://www.ica.org/standards/RiC/ontology#isRecordResourceAssociatedWithRecordResource ; ; RiC-R022 ('is record resource associated with record resource' relation) +https://www.ica.org/standards/RiC/ontology#isRecordSetTypeOf ; https://www.ica.org/standards/RiC/ontology#hasRecordSetType ; +https://www.ica.org/standards/RiC/ontology#isRecordStateOf ; https://www.ica.org/standards/RiC/ontology#hasRecordState ; +https://www.ica.org/standards/RiC/ontology#isRelatedTo ; ; RiC-R001 ('is related to' relation) +https://www.ica.org/standards/RiC/ontology#isReplyTo ; https://www.ica.org/standards/RiC/ontology#hasReply ; RiC-R013i ('is reply to' relation) +https://www.ica.org/standards/RiC/ontology#isRepresentationTypeOf ; https://www.ica.org/standards/RiC/ontology#hasRepresentationType ; +https://www.ica.org/standards/RiC/ontology#isResponsibleForIssuing ; https://www.ica.org/standards/RiC/ontology#issuedBy ; RiC-R065i ('is responsible for issuing' relation) +https://www.ica.org/standards/RiC/ontology#isRuleAssociatedWith ; https://www.ica.org/standards/RiC/ontology#isAssociatedWithRule ; RiC-R062 ('is rule associated with' relation) +https://www.ica.org/standards/RiC/ontology#isSenderOf ; https://www.ica.org/standards/RiC/ontology#hasSender ; RiC-R031i ('is sender of' relation) +https://www.ica.org/standards/RiC/ontology#isSubdivisionOfTransitive ; https://www.ica.org/standards/RiC/ontology#hasSubdivisionTransitive ; +https://www.ica.org/standards/RiC/ontology#isSubeventOfTransitive ; https://www.ica.org/standards/RiC/ontology#hasSubeventTransitive ; +https://www.ica.org/standards/RiC/ontology#isSubordinateToTransitive ; https://www.ica.org/standards/RiC/ontology#hasSubordinateTransitive ; +https://www.ica.org/standards/RiC/ontology#isSuccessorOf ; https://www.ica.org/standards/RiC/ontology#hasSuccessor ; RiC-R016i ('is successor of' relation) +https://www.ica.org/standards/RiC/ontology#isToUseDateOf ; https://www.ica.org/standards/RiC/ontology#wasUsedToDate ; +https://www.ica.org/standards/RiC/ontology#isUnitOfMeasurementOf ; https://www.ica.org/standards/RiC/ontology#hasUnitOfMeasurement ; +https://www.ica.org/standards/RiC/ontology#isWithin ; https://www.ica.org/standards/RiC/ontology#hasWithin ; RiC-R085 ('is within' relation) +https://www.ica.org/standards/RiC/ontology#issuedBy ; https://www.ica.org/standards/RiC/ontology#isResponsibleForIssuing ; RiC-R065 ('issued by' relation) +https://www.ica.org/standards/RiC/ontology#knowingOfRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#knowingRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#knownBy ; https://www.ica.org/standards/RiC/ontology#knowsOf ; RiC-R050i ('known by' relation) +https://www.ica.org/standards/RiC/ontology#knows ; ; RiC-R051 ('knows' relation) +https://www.ica.org/standards/RiC/ontology#knowsOf ; https://www.ica.org/standards/RiC/ontology#knownBy ; RiC-R050 ('knows of' relation) +https://www.ica.org/standards/RiC/ontology#leadershipRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#leadershipWithPosition ; https://www.ica.org/standards/RiC/ontology#positionIsContextOfLeadershipRelation ; +https://www.ica.org/standards/RiC/ontology#managementRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#mandateRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#membershipRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#membershipWithPosition ; https://www.ica.org/standards/RiC/ontology#positionIsContextOfMembershipRelation ; +https://www.ica.org/standards/RiC/ontology#migratedFrom ; https://www.ica.org/standards/RiC/ontology#migratedInto ; RiC-R015i ('migrated from' relation) +https://www.ica.org/standards/RiC/ontology#migratedInto ; https://www.ica.org/standards/RiC/ontology#migratedFrom ; RiC-R015 ('migrated into' relation) +https://www.ica.org/standards/RiC/ontology#migrationRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#occupiesOrOccupied ; https://www.ica.org/standards/RiC/ontology#isOrWasOccupiedBy ; RiC-R054 ('occupies or occupied' relation) +https://www.ica.org/standards/RiC/ontology#occurredAtDate ; https://www.ica.org/standards/RiC/ontology#isDateOfOccurrenceOf ; RiC-R084i ('occurred at date' relation) +https://www.ica.org/standards/RiC/ontology#organicOrFunctionalProvenanceRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#organicProvenanceRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#overlapsOrOverlapped ; ; RiC-R078 ('overlaps or overlapped' relation) +https://www.ica.org/standards/RiC/ontology#ownershipRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#performanceRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#performsOrPerformed ; https://www.ica.org/standards/RiC/ontology#isOrWasPerformedBy ; RiC-R060i ('performs or performed' relation) +https://www.ica.org/standards/RiC/ontology#placeRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#positionHoldingRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#positionIsContextOfLeadershipRelation ; https://www.ica.org/standards/RiC/ontology#leadershipWithPosition ; +https://www.ica.org/standards/RiC/ontology#positionIsContextOfMembershipRelation ; https://www.ica.org/standards/RiC/ontology#membershipWithPosition ; +https://www.ica.org/standards/RiC/ontology#positionToGroupRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#precededInSequence ; https://www.ica.org/standards/RiC/ontology#followedInSequence ; +https://www.ica.org/standards/RiC/ontology#precedesInSequenceTransitive ; https://www.ica.org/standards/RiC/ontology#followsInSequenceTransitive ; +https://www.ica.org/standards/RiC/ontology#precedesInTime ; https://www.ica.org/standards/RiC/ontology#followsInTime ; RiC-R009 ('precedes in time' relation) +https://www.ica.org/standards/RiC/ontology#precedesOrPreceded ; https://www.ica.org/standards/RiC/ontology#followsOrFollowed ; RiC-R008 ('precedes or preceded' relation) +https://www.ica.org/standards/RiC/ontology#proxyFor ; ; +https://www.ica.org/standards/RiC/ontology#proxyIn ; ; +https://www.ica.org/standards/RiC/ontology#recordResourceGeneticRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#recordResourceHoldingRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#recordResourceToInstantiationRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#recordResourceToRecordResourceRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#regulatesOrRegulated ; https://www.ica.org/standards/RiC/ontology#isOrWasRegulatedBy ; RiC-R063 ('regulates or regulated' relation) +https://www.ica.org/standards/RiC/ontology#relationConnects ; https://www.ica.org/standards/RiC/ontology#thingIsConnectedToRelation ; +https://www.ica.org/standards/RiC/ontology#relationHasContext ; https://www.ica.org/standards/RiC/ontology#thingIsContextOfRelation ; +https://www.ica.org/standards/RiC/ontology#relationHasSource ; https://www.ica.org/standards/RiC/ontology#thingIsSourceOfRelation ; +https://www.ica.org/standards/RiC/ontology#relationHasTarget ; https://www.ica.org/standards/RiC/ontology#thingIsTargetOfRelation ; +https://www.ica.org/standards/RiC/ontology#relation_role ; ; +https://www.ica.org/standards/RiC/ontology#resultedFromTheMergerOf ; https://www.ica.org/standards/RiC/ontology#wasMergedInto ; +https://www.ica.org/standards/RiC/ontology#resultedFromTheSplitOf ; https://www.ica.org/standards/RiC/ontology#wasSplitInto ; +https://www.ica.org/standards/RiC/ontology#resultsOrResultedFrom ; https://www.ica.org/standards/RiC/ontology#resultsOrResultedIn ; RiC-R061i ('results or resulted from' relation) +https://www.ica.org/standards/RiC/ontology#resultsOrResultedIn ; https://www.ica.org/standards/RiC/ontology#resultsOrResultedFrom ; RiC-R061 ('results or resulted in' relation) +https://www.ica.org/standards/RiC/ontology#roleIsContextOfCreationRelation ; https://www.ica.org/standards/RiC/ontology#creationWithRole ; +https://www.ica.org/standards/RiC/ontology#ruleRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#sequentialRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#siblingRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#spouseRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#teachingRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#temporalRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#thingIsConnectedToRelation ; https://www.ica.org/standards/RiC/ontology#relationConnects ; +https://www.ica.org/standards/RiC/ontology#thingIsContextOfRelation ; https://www.ica.org/standards/RiC/ontology#relationHasContext ; +https://www.ica.org/standards/RiC/ontology#thingIsSourceOfRelation ; https://www.ica.org/standards/RiC/ontology#relationHasSource ; +https://www.ica.org/standards/RiC/ontology#thingIsTargetOfRelation ; https://www.ica.org/standards/RiC/ontology#relationHasTarget ; +http://www.w3.org/2004/02/skos/core#topConceptOf ; http://www.w3.org/2004/02/skos/core#hasTopConcept ; +https://www.ica.org/standards/RiC/ontology#typeRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#wasComponentOf ; https://www.ica.org/standards/RiC/ontology#hadComponent ; +https://www.ica.org/standards/RiC/ontology#wasConstituentOf ; https://www.ica.org/standards/RiC/ontology#hadConstituent ; +https://www.ica.org/standards/RiC/ontology#wasContainedBy ; https://www.ica.org/standards/RiC/ontology#contained ; +https://www.ica.org/standards/RiC/ontology#wasIncludedIn ; https://www.ica.org/standards/RiC/ontology#included ; +https://www.ica.org/standards/RiC/ontology#wasLastUpdatedAtDate ; https://www.ica.org/standards/RiC/ontology#isLastUpdateDateOf ; +https://www.ica.org/standards/RiC/ontology#wasMergedInto ; https://www.ica.org/standards/RiC/ontology#resultedFromTheMergerOf ; +https://www.ica.org/standards/RiC/ontology#wasPartOf ; https://www.ica.org/standards/RiC/ontology#hadPart ; +https://www.ica.org/standards/RiC/ontology#wasSplitInto ; https://www.ica.org/standards/RiC/ontology#resultedFromTheSplitOf ; +https://www.ica.org/standards/RiC/ontology#wasSubdivisionOf ; https://www.ica.org/standards/RiC/ontology#hadSubdivision ; +https://www.ica.org/standards/RiC/ontology#wasSubeventOf ; https://www.ica.org/standards/RiC/ontology#hadSubevent ; +https://www.ica.org/standards/RiC/ontology#wasSubordinateTo ; https://www.ica.org/standards/RiC/ontology#hadSubordinate ; +https://www.ica.org/standards/RiC/ontology#wasUsedFromDate ; https://www.ica.org/standards/RiC/ontology#isFromUseDateOf ; +https://www.ica.org/standards/RiC/ontology#wasUsedToDate ; https://www.ica.org/standards/RiC/ontology#isToUseDateOf ; +https://www.ica.org/standards/RiC/ontology#wholePartRelation_role ; ; +https://www.ica.org/standards/RiC/ontology#workRelation_role ; ; diff --git a/Doc/InverseProperty/run.sh b/Doc/InverseProperty/run.sh new file mode 100644 index 00000000..2fdb286b --- /dev/null +++ b/Doc/InverseProperty/run.sh @@ -0,0 +1,2 @@ +xml sel -I -N rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" -N rico="https://www.ica.org/standards/RiC/ontology#" -N owl="http://www.w3.org/2002/07/owl#" -t -m "//owl:ObjectProperty" -v 'concat(@rdf:about, " ; ", owl:inverseOf/@rdf:resource, " ; ", rico:RiCCMCorrespondingComponent, " +")' Backend/src/main/resources/ontologies/rico.rdf > Doc/inverse.txt diff --git a/Frontend/src/app/components/create-ressource/create-ressource.component.html b/Frontend/src/app/components/create-ressource/create-ressource.component.html index b6cb55b8..69c63156 100644 --- a/Frontend/src/app/components/create-ressource/create-ressource.component.html +++ b/Frontend/src/app/components/create-ressource/create-ressource.component.html @@ -3,109 +3,141 @@ - - - Entity type * - - + + + Entity type(s) * + + + + + + + + + - - - Existing type - - - Custom type - - + @if(dialogData === null && inputData === undefined) { + + + RICO type + + + Other Ontologies + + - - - Select a type - - Loading types… - {{ t }} - - Types are fetched from the RDF graph base. - + + + Select a type + + Loading types… + {{ t }} + + Types are fetched from the RDF graph base. + - - + + - - - Type source - - - Ontology URL + name - - - Full URI - + + + Type source + + + Ontology URL + name + + + Full URI + + - - - - Ontology - - - Select an ontology… - {{ o.name }} - - / - + + + Ontology + + + Select an ontology… + {{ o.name }} + + / + + + + Resolved URI: {{ resolvedTypeUri }} + + + + + + Full type URI + + Enter the complete, fully qualified URI for this type. - - Resolved URI: {{ resolvedTypeUri }} - - - - - Full type URI - - Enter the complete, fully qualified URI for this type. - + + Entity type is required. + + } + @else if (dialogData || inputData ){ + + Selected type + + + {{ availableTypes }} + + - - Entity type is required. - + } @@ -142,7 +174,7 @@ - Ajouter une association + Add property @@ -151,10 +183,10 @@ - Predicate source + Entity Properties - - - Predicate - - Select a predicate... - - {{ prop.p }} - - - @@ -228,30 +246,6 @@ - - - Type - - - Literal - - - IRI - - - Type @@ -277,21 +271,35 @@ - Range : {{ newAssociation.predicate.range }} - Value - - Select a value... - - {{ range.label }} - - + + + + + + + + + Select a value... + + {{ range.label }} + + + + + + @@ -304,7 +312,7 @@ (filePathChange)="receiveFilePath($event)"> } - @else { + @else if (newAssociation.mode === 'new') { Value @@ -312,7 +320,7 @@ type="text" [(ngModel)]="newAssociation.value" [ngModelOptions]="{standalone: true}" - [placeholder]="newAssociation.valueKind === 'iri' ? 'https://...' : 'Enter a value'" + [placeholder]="'Enter a value'" class="w-full text-sm border border-gray-300 rounded-md px-2 py-1.5 bg-white focus:outline-none focus:ring-2 focus:ring-blue-400"/> } @@ -320,13 +328,12 @@ - + Confirm diff --git a/Frontend/src/app/components/create-ressource/create-ressource.component.scss b/Frontend/src/app/components/create-ressource/create-ressource.component.scss index e69de29b..4fd2d47c 100644 --- a/Frontend/src/app/components/create-ressource/create-ressource.component.scss +++ b/Frontend/src/app/components/create-ressource/create-ressource.component.scss @@ -0,0 +1,3 @@ +button { + cursor : pointer ; +} \ No newline at end of file diff --git a/Frontend/src/app/components/create-ressource/create-ressource.component.ts b/Frontend/src/app/components/create-ressource/create-ressource.component.ts index 53074cc4..4917bd88 100644 --- a/Frontend/src/app/components/create-ressource/create-ressource.component.ts +++ b/Frontend/src/app/components/create-ressource/create-ressource.component.ts @@ -1,15 +1,18 @@ -import { Component, OnInit, Inject } from '@angular/core'; +import { Component, OnInit, Inject, Input, Output, EventEmitter, Optional, ChangeDetectorRef, inject } from '@angular/core'; import { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup, FormArray, Validators } from '@angular/forms'; import { CommonModule } from '@angular/common'; import { Entity } from '../../models/ressource'; + import { EntityDetailsComponent } from '../entity-details/entity-details.component'; import { GestionRessourcesService } from '../../services/gestion-ressources.service'; +import { RicoPropertiesComponent } from '../rico-properties/rico-properties.component'; + import { debounceTime } from 'rxjs'; import { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar'; import { FileViewerComponent } from '../file-viewer/file-viewer.component'; +import { MatDialog } from '@angular/material/dialog'; -import {MAT_DIALOG_DATA} from '@angular/material/dialog'; -import { ChangeDetectorRef } from '@angular/core'; +import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; export type OntologyLabels = Record; @@ -30,7 +33,8 @@ export let ONTOLOGY_LABELS: OntologyLabels = { CommonModule, EntityDetailsComponent, MatSnackBarModule, - FileViewerComponent + FileViewerComponent, + RicoPropertiesComponent ], templateUrl: './create-ressource.component.html', @@ -44,11 +48,8 @@ export class CreateRessourceComponent implements OnInit { properties: { key: string; value: string; kind: 'literal' | 'iri'; predicate: string }[] = []; - // entityPropertiesDict : any[] = []; - // When Entity is a media file // - isEntityMediaFile(): boolean { return this.newAssociation?.predicate?.p === 'https://www.ica.org/standards/RiC/ontology#identifier' ; } @@ -57,12 +58,12 @@ export class CreateRessourceComponent implements OnInit { this.newAssociation!.value = path; } - // + createSubEntity : boolean = false; allPredicatesByType: any[] = []; - typeMode: 'existing' | 'custom' = 'existing'; + typeMode: 'defined' |'rico' | 'custom' = 'rico'; customSource: 'url' | 'full' = 'url'; availableTypes: string[] = []; @@ -79,14 +80,26 @@ export class CreateRessourceComponent implements OnInit { ontologyList: { name: string; iri: string }[] = []; - constructor(@Inject(MAT_DIALOG_DATA) public data: any, - private fb: FormBuilder, - private ontologyService: GestionRessourcesService, - private snackBar : MatSnackBar, - private cdr: ChangeDetectorRef, - ) { - + // Used only when opened as a dialog + public dialogData: any = inject(MAT_DIALOG_DATA, { optional: true }); + private dialogRef: MatDialogRef | null = inject(MatDialogRef, { optional: true }); + + // Used only when used as a child component tag + @Input() inputData: any; + + //let the parent know when created inline (no dialogRef to close) + @Output() closed = new EventEmitter(); + // The single source of truth + public data: any; + + constructor( + private fb: FormBuilder, + private ontologyService: GestionRessourcesService, + private snackBar : MatSnackBar, + private cdr: ChangeDetectorRef, + private dialog: MatDialog + ) { this.personForm = this.fb.group({ entityType: [''], @@ -102,26 +115,72 @@ export class CreateRessourceComponent implements OnInit { this.ontologyList = this.getOntologyList(); } + onChildClosed(event: any) { + if (event === true) { + this.createSubEntity = false; + this.onPredicateChange(null); // Refresh the list of possible ranges after the child entity is created + } + } + + getFullEntityPath(entityType : string, ontologyName: string): string { + return ontologyName + ? this.ontologyService.getTypeUrlByName(ontologyName) + entityType + : ''; + } + + openRicoPropertiesDialog() { + this.newAssociation!.mode = 'existing'; + + const dialogRef = this.dialog.open(RicoPropertiesComponent, { + width: '600px', + height: '350px', + data: { + predicates: this.allPredicatesByType, + association: this.newAssociation + } + }); + + dialogRef.afterClosed().subscribe(result => { + if (result) { + console.log('Dialog result:', result); + this.confirmAddAssociation(); + + } else { + console.log('Dialog closed without changes'); + } + }); + } + + extractEntityTypeFromIRI(iri :string ) : string { + return iri.includes('#') + ? iri.substring(iri.lastIndexOf('#') + 1) + : iri.substring(iri.lastIndexOf('/') + 1); + } ngOnInit(): void { - // this.ontologyService.getTypes().subscribe({ - // next: (data: any[]) => { - // this.availableTypes = data; - // }, - // error: (err) => { - // console.error("Erreur lors du chargement des types d'ontology ", err); - // } - // }); - this.availableTypes = this.data?.type && this.data?.ontology - ? [this.ontologyService.getTypeUrlByName(this.data?.ontology)+this.data.type] - : []; + + if (!this.dialogData && this.inputData === undefined) { + this.getAllRicoEntities(); + } + + // else if (this.dialogData.type && this.dialogData.ontology || this.inputData.type && this.inputData.ontology ) { + else if (this.dialogData || this.inputData) { + + this.data = this.inputData ?? this.dialogData; + + console.log("RECEIVED DATA : ", this.data); + + this.availableTypes = this.data?.type && this.data?.ontology + ? [this.ontologyService.getTypeUrlByName(this.data?.ontology)+this.data.type] + : []; + } this.personForm.get('entityType')?.valueChanges .pipe(debounceTime(300)) .subscribe(value => { if (value) { - console.log("VALUEEEEE :",this.data.type); - this.ontologyService.getPredicatesByTypeRico(this.data.type) + + this.ontologyService.getPredicatesByTypeRico(this.personForm.get('entityType')?.value) .subscribe(res => { console.log("All predicates : ",res); this.allPredicatesByType = Object.values( @@ -130,12 +189,25 @@ export class CreateRessourceComponent implements OnInit { return acc; }, {}) ); - //.map(r => r.p); } ); } }); + + if (this.data) { + // const fullType = this.ontologyService.getTypeUrlByName(this.data.ontology) + this.data.type; + this.personForm.get('entityType')?.patchValue(this.data?.type, { emitEvent: true }); + } + + // if(this.typeMode === 'rico' && !this.data?.type ) { + // this.getAllRicoEntities(); + // } + + } + + createSubEntityToggle() { + this.createSubEntity = true; } onPredicateChange(event: any) { @@ -184,13 +256,45 @@ export class CreateRessourceComponent implements OnInit { return `${selectedIri}${sep}${typeName}`; } - setTypeMode(mode: 'existing' | 'custom') { + setTypeMode(mode: 'rico' | 'custom') { this.typeMode = mode; this.personForm.get('entityType')?.reset(); this.personForm.get('customTypeUri')?.reset(); this.personForm.get('customTypeUrl')?.reset(); } + getAllRicoEntities() : void { + + this.ontologyService.getAllRicoClasses().subscribe({ + next: (data) => { + try { + // Step 1: Map to type strings + const allRicoClassesNotFormatted = this.ontologyService.getOntologyLabel( + data.map((d: any) => d.type) + ); + + // Step 2: Extract the RIC-O array + let ricOClasses = allRicoClassesNotFormatted[0]['rico']; + + // Step 3: Remove duplicates + // Assuming each element is a string; if it's an object, use a key like `type` + ricOClasses = Array.from(new Set(ricOClasses)); + + this.availableTypes = ricOClasses; + console.log("Classes RICO (no duplicates) ", this.availableTypes); + + } catch (e) { + console.error("ERROR in getOntologyLabel:", e); + } + + this.cdr.markForCheck(); + }, + error: (err) => { + console.error(err); + } + }); + } + setCustomSource(src: 'url' | 'full') { this.customSource = src; this.personForm.get('customTypeUri')?.reset(); @@ -249,13 +353,15 @@ export class CreateRessourceComponent implements OnInit { cancelNewPerson() { this.personForm.reset(); + this.dialogRef?.close(); } saveNewPerson() { let type: string = ''; - if (this.typeMode === 'existing') { - type = this.personForm.get('entityType')?.value; + if (this.typeMode === 'rico') { + type = this.getFullEntityPath(this.personForm.get('entityType')?.value, 'rico'); + } else { type = this.customSource === 'url' @@ -301,6 +407,8 @@ export class CreateRessourceComponent implements OnInit { panelClass: ['snackbar-success'] } ); + // const dataToSend = { status: 'closed', reason: 'user clicked button' }; + this.closed.emit(true); // optional UX improvements this.personForm.reset(); this.properties = []; diff --git a/Frontend/src/app/components/entity-details/entity-details.component.html b/Frontend/src/app/components/entity-details/entity-details.component.html index 334c4167..bb243983 100644 --- a/Frontend/src/app/components/entity-details/entity-details.component.html +++ b/Frontend/src/app/components/entity-details/entity-details.component.html @@ -62,15 +62,40 @@ {{ selectedEntity?.titre }} - + + {{ property.key }} - - - - + + + + + + {{property.name}} + + @@ -143,7 +168,7 @@ {{ selectedEntity?.titre }} - Ajouter une association + Add property diff --git a/Frontend/src/app/components/entity-details/entity-details.component.scss b/Frontend/src/app/components/entity-details/entity-details.component.scss index b33c3da3..6cf4bc8d 100644 --- a/Frontend/src/app/components/entity-details/entity-details.component.scss +++ b/Frontend/src/app/components/entity-details/entity-details.component.scss @@ -9,4 +9,8 @@ background-color: #dc2626 !important; // red-600 color: white !important; } +} + +button { + cursor : pointer ; } \ No newline at end of file diff --git a/Frontend/src/app/components/entity-details/entity-details.component.ts b/Frontend/src/app/components/entity-details/entity-details.component.ts index 15d62334..e579885c 100644 --- a/Frontend/src/app/components/entity-details/entity-details.component.ts +++ b/Frontend/src/app/components/entity-details/entity-details.component.ts @@ -1,7 +1,6 @@ import { Component, OnInit, Input, OnChanges, SimpleChanges, inject, ChangeDetectorRef, Output, EventEmitter } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Entity } from '../../models/ressource'; -import { allEntities } from '../../models/ressource'; import { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup, FormArray, Validators } from '@angular/forms'; import {GestionRessourcesService} from '../../services/gestion-ressources.service'; @@ -13,11 +12,13 @@ import { ConfirmDeletePropertyData, ConfirmDeletePropertyComponent } from '../co import { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar'; import {ONTOLOGY_LABELS} from '../../models/ontology-labels'; +import { FileViewerComponent } from '../file-viewer/file-viewer.component'; + @Component({ selector: 'app-entity-details', standalone: true, - imports: [CommonModule, FormsModule, ReactiveFormsModule, MatDialogModule, MatSnackBarModule], + imports: [CommonModule, FormsModule, ReactiveFormsModule, MatDialogModule, MatSnackBarModule, FileViewerComponent], templateUrl: './entity-details.component.html', styleUrl: './entity-details.component.scss' }) @@ -89,11 +90,11 @@ export class EntityDetailsComponent implements OnInit, OnChanges { console.log("ONTOLOGYy NAME : ", ontologyName); let propertyName = prop.predicate.substring(prop.predicate.lastIndexOf('#') + 1, prop.predicate.length); - entityPropertiesDict.push({ key: propertyName, value: prop.value, kind: prop.kind, predicate : prop.predicate, ontology: ontologyName }); + entityPropertiesDict.push({ name : prop.name,key: propertyName, value: prop.value, kind: prop.kind, predicate : prop.predicate, ontology: ontologyName }); } else { let propertyName = prop.predicate.substring(prop.predicate.lastIndexOf('/') + 1, prop.predicate.length); - entityPropertiesDict.push({ key: propertyName, value: prop.value, kind : prop.kind, predicate : prop.predicate }); + entityPropertiesDict.push({ name : prop.name,key: propertyName, value: prop.value, kind : prop.kind, predicate : prop.predicate }); } } @@ -104,11 +105,11 @@ export class EntityDetailsComponent implements OnInit, OnChanges { changeSelectedEntity(entityIri : string) { if (entityIri) { - const entityKey = entityIri.substring(entityIri.lastIndexOf('/') + 1, entityIri.length); - console.log("Reference entity key : ",entityKey); + // const entityKey = entityIri.substring(entityIri.lastIndexOf('/') + 1, entityIri.length); + // console.log("Reference entity key : ",entityKey); // this.previousSelectedEntity = this.selectedEntity; this.stack.push(this.selectedEntity); - this.gestionRessourceService.getEntityDetails(entityKey).subscribe({ + this.gestionRessourceService.getEntityDetails(entityIri).subscribe({ next: (data) => { console.log("DATA:", data); this.selectedEntity = data; @@ -125,8 +126,6 @@ export class EntityDetailsComponent implements OnInit, OnChanges { ngOnInit(): void { this.detailTab = 'rico'; - this.myNewEntites = allEntities; - console.log("All ontology labels : ", this.ontologyLabels); } @@ -146,11 +145,6 @@ export class EntityDetailsComponent implements OnInit, OnChanges { } } - getEntityById(id: number): Entity | undefined { - const id_str = id.toString(); - return allEntities.find(entity => entity.id === id_str); - } - selectEntity(entity: any) { this.selectedEntity = entity; this.getEntityPropertiesDict(); // ← ajouter @@ -178,19 +172,19 @@ export class EntityDetailsComponent implements OnInit, OnChanges { dialogRef.afterClosed().subscribe((confirmed: boolean) => { if (confirmed) { - this.gestionRessourceService.deleteEntity(this.selectedEntity.entityKey).subscribe({ + this.gestionRessourceService.deleteEntity(this.selectedEntity.iri).subscribe({ next: () => { this.snackBar.open( - `"${this.selectedEntity.titre}" was successfully deleted.`, + `Entity was successfully deleted.`, 'Close', { duration: 5000, - horizontalPosition: 'right', - verticalPosition: 'bottom', + horizontalPosition: 'center', + verticalPosition: 'top', panelClass: ['snackbar-success'] } ); - console.log('Entity deleted:', this.selectedEntity.entityKey); + console.log('Entity deleted:', this.selectedEntity.iri); this.closeDetail(); }, error: (err : any) => { @@ -219,7 +213,7 @@ export class EntityDetailsComponent implements OnInit, OnChanges { kind })) }; - this.gestionRessourceService.editEntity(this.selectedEntity.entityKey, payload).subscribe({ + this.gestionRessourceService.editEntity(this.selectedEntity.iri, payload).subscribe({ next: () => { this.snackBar.open( `"${this.selectedEntity.iri}" was successfully updated.`, @@ -231,7 +225,7 @@ export class EntityDetailsComponent implements OnInit, OnChanges { panelClass: ['snackbar-success'] } ); - console.log('Entity updated:', this.selectedEntity.entityKey); + console.log('Entity updated:', this.selectedEntity.iri); }, error: (err) => { console.error('Edit failed:', err); @@ -283,53 +277,102 @@ export class EntityDetailsComponent implements OnInit, OnChanges { } -// Computed list of ontology entries for the dropdown -get ontologyEntries(): { label: string; url: string }[] { - return Object.entries(ONTOLOGY_LABELS).map(([url, label]) => ({ url, label: label as string })); -} + // Computed list of ontology entries for the dropdown + get ontologyEntries(): { label: string; url: string }[] { + return Object.entries(ONTOLOGY_LABELS).map(([url, label]) => ({ url, label: label as string })); + } -addAssociation() { - this.newAssociation = { - mode: null, - predicate: '', - ontologyUrl: '', - customPredicate: '', - kind: 'literal', - value: '' - }; -} + addAssociation() { + this.newAssociation = { + mode: null, + predicate: '', + ontologyUrl: '', + customPredicate: '', + kind: 'literal', + value: '' + }; + } + + confirmAddAssociation() { + if (!this.newAssociation || !this.newAssociation.value) return; + + let fullPredicate: string; + let propertyName: string; + let ontologyUrl: string; + + if (this.newAssociation.mode === 'existing') { + if (!this.newAssociation.predicate) return; + fullPredicate = this.newAssociation.predicate; + + if (fullPredicate.includes('#')) { + ontologyUrl = fullPredicate.substring(0, fullPredicate.lastIndexOf('#') + 1); + propertyName = fullPredicate.substring(fullPredicate.lastIndexOf('#') + 1); + } else { + ontologyUrl = fullPredicate.substring(0, fullPredicate.lastIndexOf('/') + 1); + propertyName = fullPredicate.substring(fullPredicate.lastIndexOf('/') + 1); + } + } else { + if (!this.newAssociation.ontologyUrl || !this.newAssociation.customPredicate) return; + ontologyUrl = this.newAssociation.ontologyUrl; // already ends with # or / + fullPredicate = ontologyUrl + this.newAssociation.customPredicate; + propertyName = this.newAssociation.customPredicate; + } + + const ontologyName = this.gestionRessourceService.getTypeNameByUrl(ontologyUrl); -confirmAddAssociation() { - if (!this.newAssociation || !this.newAssociation.value) return; - - let fullPredicate: string; - let propertyName: string; - - if (this.newAssociation.mode === 'existing') { - if (!this.newAssociation.predicate) return; - fullPredicate = this.newAssociation.predicate; - fullPredicate.includes('#') - ? propertyName = fullPredicate.substring(fullPredicate.lastIndexOf('#') + 1) - : propertyName = fullPredicate.substring(fullPredicate.lastIndexOf('/') + 1); - } else { - if (!this.newAssociation.ontologyUrl || !this.newAssociation.customPredicate) return; - const base = this.newAssociation.ontologyUrl; // already ends with # or / - fullPredicate = base + this.newAssociation.customPredicate; - propertyName = this.newAssociation.customPredicate; + this.entityPropertiesDict.push({ + key: propertyName, + value: this.newAssociation.value, + kind: this.newAssociation.kind, + predicate: fullPredicate, + ontology: ontologyName // matches detailTab + }); + + this.newAssociation = null; + this.cdr.markForCheck(); } - this.entityPropertiesDict.push({ - key: propertyName, - value: this.newAssociation.value, - kind: this.newAssociation.kind, - predicate: fullPredicate - }); + cancelAddAssociation() { + this.newAssociation = null; + } - this.newAssociation = null; -} + isFilePath(path: string): boolean { -cancelAddAssociation() { - this.newAssociation = null; -} + if (!path) return false; + + const windowsPath = /^[a-zA-Z]:\\.*$/; // C:\... + const windowsUNC = /^\\\\[^\\]+\\[^\\]+/; // \\Server\Share + const unixPath = /^\/(Users|home|tmp|var|etc|opt)/; // /Users/... or /home/... + const fileUrl = /^file:\/\/\/.+/; // file:///... + + return ( + windowsPath.test(path) || + windowsUNC.test(path) || + unixPath.test(path) || + fileUrl.test(path) + ); + } + + openFileViewer(property: any, filePath: string) { + if (!filePath ) return ; + + console.log("Opening file viewer for property: ", property); + + const dialogRef = this.dialog.open(FileViewerComponent, { + width: '1000px', + data: filePath + }); + + dialogRef.afterClosed().subscribe((newFilePath) => { + if (newFilePath) { + console.log('Received from File Viewer dialog:', newFilePath); + property.value = newFilePath; // Update the property value with the new file path + this.cdr.markForCheck(); + + } else { + console.log('File ViewerDialog closed without selection'); + } + }); + } } diff --git a/Frontend/src/app/components/file-viewer/file-viewer.component.html b/Frontend/src/app/components/file-viewer/file-viewer.component.html index 6aa9360b..d245a06e 100644 --- a/Frontend/src/app/components/file-viewer/file-viewer.component.html +++ b/Frontend/src/app/components/file-viewer/file-viewer.component.html @@ -1,14 +1,14 @@ - + Select File - + Full Path: {{ filePath }} @@ -31,4 +31,12 @@ + + + Validate + \ No newline at end of file diff --git a/Frontend/src/app/components/file-viewer/file-viewer.component.ts b/Frontend/src/app/components/file-viewer/file-viewer.component.ts index 870641ae..4d628913 100644 --- a/Frontend/src/app/components/file-viewer/file-viewer.component.ts +++ b/Frontend/src/app/components/file-viewer/file-viewer.component.ts @@ -1,4 +1,4 @@ -import { Component, Output, EventEmitter } from '@angular/core'; +import { Component, Output, EventEmitter, Inject, OnInit, inject } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormsModule } from '@angular/forms'; @@ -6,16 +6,22 @@ import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'; type FileType = 'image' | 'video' | 'audio' | 'pdf' | 'unknown'; +import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; + @Component({ selector: 'app-file-viewer', imports: [CommonModule, FormsModule], templateUrl: './file-viewer.component.html', styleUrl: './file-viewer.component.scss' }) -export class FileViewerComponent { +export class FileViewerComponent implements OnInit { filePath: string = ''; + public data: any = inject(MAT_DIALOG_DATA, { optional: true }); + private dialogRef: MatDialogRef | null = inject(MatDialogRef, { optional: true }); + public isDialogRoot: boolean = false; + @Output() filePathChange = new EventEmitter(); fileUrl: string = ''; @@ -23,7 +29,19 @@ export class FileViewerComponent { fileType: FileType = 'unknown'; - constructor(private sanitizer: DomSanitizer) {} + constructor(private sanitizer: DomSanitizer, + // @Inject(MAT_DIALOG_DATA) public data: any, + // private dialogRef: MatDialogRef, + + ) {} + + ngOnInit() { + this.isDialogRoot = this.dialogRef?.componentInstance === this; + + if (this.isDialogRoot) { + this.openFile(this.data); + } + } detectFileType(path: string): FileType { const ext = path.split('.').pop()?.toLowerCase(); @@ -38,19 +56,30 @@ export class FileViewerComponent { return 'unknown'; } - async openFile() { - const path = await window.electronAPI.selectFile(); + async openFile(pathParam: string) { + + let path = pathParam !== '' ? pathParam : await window.electronAPI.selectFile(); if (path) { this.filePathChange.emit(path); this.filePath = path; - this.fileUrl = `file:///${path.replace(/\\/g, '/')}`; - + // this.fileUrl = `file:///${path.replace(/\\/g, '/')}`; + this.fileUrl = `file://${encodeURI(path.replace(/\\/g, '/'))}`; //sanitize for iframe/video/audio usage this.safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.fileUrl); this.fileType = this.detectFileType(path); + } } + + closeAndReturn() { + console.log('closeAndReturn CALLED, dialogRef:', this.dialogRef, 'filePath:', this.filePath); + if (this.dialogRef) { + this.dialogRef.close(this.filePath); + } + } + + } \ No newline at end of file diff --git a/Frontend/src/app/components/gestion-projets/gestion-projets.component.html b/Frontend/src/app/components/gestion-projets/gestion-projets.component.html index 0542c5fa..27dae9e6 100644 --- a/Frontend/src/app/components/gestion-projets/gestion-projets.component.html +++ b/Frontend/src/app/components/gestion-projets/gestion-projets.component.html @@ -6,9 +6,6 @@ HEADER ══════════════════════════════════════════════════════════ --> - - Files - @@ -83,6 +80,22 @@ RDF Project Management New Project + + + + + + New Project from backup + @@ -250,6 +263,18 @@ Delete + + + + + + Import + @@ -334,6 +359,13 @@ Aucun projet } + - Nom du projet * + Project's Name * New Project RDF placeholder="ex: archive_2025" class="w-full px-3 py-2.5 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent text-sm transition-all" [class.border-red-300]="projectForm.get('name')?.invalid && projectForm.get('name')?.touched"> - Lettres, chiffres, tirets et underscores uniquement + Must contain only letters, numbers, dashes, and underscores. @if (projectForm.get('name')?.invalid && projectForm.get('name')?.touched) { - Nom requis — lettres, chiffres, tirets et underscores uniquement + Name is required and must contain only letters, numbers, dashes, and underscores. + + } + + + + + + Prefix for future entity’s IRI generation * + + + If your project has a stable URL in a Language Archive, you can enter it here. Otherwise, you can leave the default IRI generation scheme. + + + + + + @if (projectForm.get('prefix')?.invalid && projectForm.get('prefix')?.touched) { + + A URL is required for the project prefix. } @@ -397,8 +452,9 @@ New Project RDF + - + @@ -523,6 +579,22 @@ {{ selectedProject.name + + Prefix + + + + + + + + + + @@ -575,6 +647,7 @@ {{ selectedProject.name Update Project + @if (selectedProject?.name === originalProject!.name) { {{ selectedProject.name {{ activeProject?.name === selectedProject.name ? 'Project Already Active' : 'Open project' }} + } + + @if (activeProject?.name === originalProject!.name ) { - @if (activeProject?.name === originalProject!.name) { - @if (activeProject?.name === originalProject!.name) { @@ -596,7 +670,36 @@ {{ selectedProject.name Manage Data Sources - } + + + + + + Export Internal DataSource + + + + + + + Export Backup Project + ; + @ViewChild('zipInput') zipInput!: ElementRef; + + private pendingImportProject: any | null = null; + + onImportFile(project: any): void { + if (this.activeProject?.name !== project.name) { + // Import writes into the currently open repository — enforce that here + // rather than letting the backend fail with a confusing "no project open" error. + alert(`Open "${project.name}" first before importing into it.`); + return; + } + this.pendingImportProject = project; + this.fileInput.nativeElement.value = ''; // reset so re-selecting the same file still fires 'change' + this.fileInput.nativeElement.click(); + } + + onFileSelected(event: Event) { + const input = event.target as HTMLInputElement; + const file = input.files?.[0]; + if (!file || !this.pendingImportProject) return; + + + this.isLoading = true; + + this.projectService.importTurtleSource(file).subscribe({ + next: (result) => { + this.isLoading = false; + //alert(`Imported ${result.tripleCount} triples into source .`); + alert(`Imported triples into internal datasource .`); + }, + error: (err) => { + this.isLoading = false; + const detail = err.error?.lineNumber + ? `Line ${err.error.lineNumber}, column ${err.error.columnNumber}: ${err.error.message}` + : err.error?.message ?? 'Import failed.'; + alert(detail); + } + }); + } + + onBackupSelected(event: Event) { + const input = event.target as HTMLInputElement; + const file = input.files?.[0]; + if (!file) return; + + this.isLoading = true; + + this.projectService.importBackUpProject(file).subscribe({ + next: (res) => { + this.isLoading = false; + alert(res.message ?? 'Imported backup project.'); + this.loadAll(); + }, + error: (err) => { + this.isLoading = false; + alert("Error: " + (err.error?.message ?? 'Import failed.')); + } + }); + } + + onImportBackUpProject(project: any): void { + this.pendingImportProject = project; + this.zipInput.nativeElement.value = ''; + this.zipInput.nativeElement.click(); + } + + private async saveViaElectron(blob: Blob, filename: string): Promise { + const buffer = await blob.arrayBuffer(); + const result = await (window as any).electronAPI.saveFile(new Uint8Array(buffer), filename); + + if (!result.success) { + if (!result.canceled) { + // show an error toast/snackbar here + console.error('Save failed:', result.error); + } + return; + } + + // show a success message with result.filePath + this.snackBar.open('File saved successfully.', 'Close', { duration: 3000 }); + } + + private saveViaBrowser(blob: Blob, filename: string): void { + if (!blob || blob.size === 0) { + console.error('Export failed: empty blob received'); + this.snackBar.open('Export failed: no data received.', 'Close', { duration: 5000 }); + return; + } + + try { + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = filename; + document.body.appendChild(a); // certains navigateurs (Safari) exigent que l'élément soit dans le DOM + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + } catch (e) { + console.error('Export failed:', e); + this.snackBar.open('Export failed. See console for details.', 'Close', { duration: 5000 }); + } + } + + async onExportInternal() { + try { + const blob = await this.projectService.exportInternalDataSource(); + const filename = `${this.activeProject?.name}-internal-export.ttl`; + + const isElectron = !!(window as any).electronAPI; + if (isElectron) { + await this.saveViaElectron(blob, filename); + } else { + this.saveViaBrowser(blob, filename); + } + } catch (e) { + console.error('Export internal failed:', e); + this.snackBar.open('Export failed. See console for details.', 'Close', { duration: 5000 }); + } + } + + async onExportBackup() { + try { + const blob = await this.projectService.exportBackup(); + const filename = `${this.activeProject?.name}-backup.zip`; + + const isElectron = !!(window as any).electronAPI; + if (isElectron) { + await this.saveViaElectron(blob, filename); + } else { + this.saveViaBrowser(blob, filename); + } + } catch (e) { + console.error('Export backup failed:', e); + this.snackBar.open('Export failed. See console for details.', 'Close', { duration: 5000 }); + } + } + + // ── Lifecycle ────────────────────────────────────────────────────────────── ngOnInit(): void { @@ -67,6 +207,21 @@ export class GestionProjetsComponent implements OnInit, OnDestroy { this.projectService.activeProject$ .pipe(takeUntil(this.destroy$)) .subscribe(p => (this.activeProject = p)); + + this.projectForm.get('name')?.valueChanges.subscribe(value => { + if (this.projectForm.get('prefix')?.value.startsWith('http://fr.cnrs.lacito.FieldArchive/')) { + this.projectForm.patchValue({ + prefix: 'http://fr.cnrs.lacito.FieldArchive/' + value + }); + } + }); + this.projectForm.get('prefix')?.valueChanges.subscribe(value => { + if (value === '') { + this.projectForm.patchValue({ + prefix: 'http://fr.cnrs.lacito.FieldArchive/' + }); + } + }); } goToFiles() { @@ -84,7 +239,8 @@ export class GestionProjetsComponent implements OnInit, OnDestroy { this.projectForm = this.fb.group({ name: ['', [Validators.required, Validators.pattern(/^[a-zA-Z0-9_-]+$/)]], description: [''], - persistent: [true] + persistent: [true], + prefix: ['http://fr.cnrs.lacito.FieldArchive/', [Validators.required, Validators.pattern(/^(https?:\/\/)?([\da-z\.-]+)\.([a-z]{2,6})([\/\w \.-]*)*\/?$/)]] }); } @@ -94,7 +250,7 @@ export class GestionProjetsComponent implements OnInit, OnDestroy { this.projectService.getAllProjects() .pipe(takeUntil(this.destroy$), finalize(() => (this.isLoading = false))) .subscribe({ - next: (list) => { this.projects = list; this.applyFilters(); }, + next: (list) => { this.projects = list; console.log("PROJECTS : ", list); this.applyFilters(); }, error: () => {} }); @@ -186,7 +342,7 @@ export class GestionProjetsComponent implements OnInit, OnDestroy { if (!project.name || this.isLoading) return; this.isLoading = true; - this.projectService.openProject({ name: project.name, persistent: true }) + this.projectService.openProject({ name: project.name, persistent: true, prefix: project.prefix }) .pipe(takeUntil(this.destroy$), finalize(() => (this.isLoading = false))) .subscribe({ next: () => this.router.navigate(['/gestion-ressources']), @@ -213,7 +369,9 @@ export class GestionProjetsComponent implements OnInit, OnDestroy { // ── Modal ────────────────────────────────────────────────────────────────── openCreateModal(): void { - this.projectForm.reset({ persistent: true, name: '', description: '' }); + this.projectForm.reset( + { persistent: true, name: '', description: '', prefix: 'http://fr.cnrs.lacito.FieldArchive/' } + ); this.showCreateModal = true; } @@ -223,19 +381,20 @@ export class GestionProjetsComponent implements OnInit, OnDestroy { onSubmitProject(): void { if (!this.projectForm.valid || this.isLoading) return; - const { name, description, persistent } = this.projectForm.value; + const { name, description, persistent, prefix } = this.projectForm.value; this.isLoading = true; - this.projectService.openProject({ name, description, persistent }) + this.projectService.createProject({ name, description, persistent, prefix }) .pipe(takeUntil(this.destroy$), finalize(() => (this.isLoading = false))) .subscribe({ - next: () => { this.closeCreateModal(); this.router.navigate(['/gestion-sources']); }, + next: () => { this.closeCreateModal(); this.loadAll() }, error: () => {} }); } - goToSources(): void { - this.router.navigate(['/gestion-sources']); - } + + goToSources(): void { + this.router.navigate(['/gestion-sources']); + } // ── Panneau détail ───────────────────────────────────────────────────────── diff --git a/Frontend/src/app/components/gestion-ressources/gestion-ressources.component.html b/Frontend/src/app/components/gestion-ressources/gestion-ressources.component.html index 40fdf15a..e641a744 100644 --- a/Frontend/src/app/components/gestion-ressources/gestion-ressources.component.html +++ b/Frontend/src/app/components/gestion-ressources/gestion-ressources.component.html @@ -2,6 +2,7 @@ + @@ -12,6 +13,7 @@ + {{ projectName }} @@ -27,75 +29,45 @@ RDF Entity Management System - - - - - - - - - - Projets - - + - Datasource View - - - - - - - - - - - + + + + - Tab View + Projects - - - - - + SPARQL - - + + + + - - - - + + {{ getKey(ontology_type) }} - - {{ getValuesOfKey(ontology_type)?.length }} + + {{ getValuesOfKey(ontology_type).length }} - - - - + + + @for (item of accordion_items; track item; let index = $index) { + + + + + {{ item.title }} + ({{ item.values.length }}) + ({{ getValuesOfKey(ontology_type).length }}) + - - - {{ entityType }} - - ● - + + + + + + + - - + + + @if(accordionItem.expanded && index === 1) { + + + + + {{ entityType }} + + ● + + + } + @if (index !== 1 && accordionItem.expanded) { + + + + + {{ entityType }} + + ● + + + } + + + } + + + @@ -244,10 +281,10 @@ -
Types are fetched from the RDF graph base.
+ Resolved URI: {{ resolvedTypeUri }} +
{{ resolvedTypeUri }}
Enter the complete, fully qualified URI for this type.
- Resolved URI: {{ resolvedTypeUri }} -
+ {{ availableTypes }} +
Full Path:
{{ filePath }}
Lettres, chiffres, tirets et underscores uniquement
Must contain only letters, numbers, dashes, and underscores.