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/Frontend/src/app/components/create-ressource/create-ressource.component.html b/Frontend/src/app/components/create-ressource/create-ressource.component.html
index b6cb55b8..aee1c9f4 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 @@
-
-
-
+
+
+
-
-
-
-
+ @if(dialogData === null && inputData === undefined) {
+
+
+
+
-
-
-
-
-
Types are fetched from the RDF graph base.
-
+
+
+
+
+
Types are fetched from the RDF graph base.
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
/
-
+
+
+
+
+
+ /
+
+
+
+ Resolved URI: {{ resolvedTypeUri }}
+
+
+
+
+
+
+
+
Enter the complete, fully qualified URI for this type.
-
- Resolved URI: {{ resolvedTypeUri }}
-
-
-
-
-
-
-
Enter the complete, fully qualified URI for this type.
-
+
+ Entity type is required.
+
+ }
+ @else if (dialogData || inputData ){
+
+
+
+
+ {{ availableTypes }}
+
+
-
- Entity type is required.
-
+ }
@@ -142,7 +174,7 @@
- Ajouter une association
+ Add property
@@ -151,10 +183,10 @@
-
+
-
-
+
+
{{ getKey(ontology_type) }}
-
- {{ getValuesOfKey(ontology_type)?.length }}
+
+ {{ getValuesOfKey(ontology_type).length }}
-
-
-
-
+
+
+ @for (item of accordion_items; track item; let index = $index) {
+
+
-
-
+
+
+ @if(accordionItem.expanded && index === 1) {
+
+
+
+
+ {{ entityType }}
+
+ ●
+
+
+ }
+ @if (index !== 1 && accordionItem.expanded) {
+
+
+
+
+ {{ entityType }}
+
+ ●
+
+
+ }
+
+
+ }
+
+
+
@@ -244,10 +281,10 @@
-
+
diff --git a/Frontend/src/app/components/gestion-ressources/gestion-ressources.component.scss b/Frontend/src/app/components/gestion-ressources/gestion-ressources.component.scss
index 27887aba..d25bcc08 100644
--- a/Frontend/src/app/components/gestion-ressources/gestion-ressources.component.scss
+++ b/Frontend/src/app/components/gestion-ressources/gestion-ressources.component.scss
@@ -1,14 +1,398 @@
-@import 'tailwindcss';
-@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@300;400;500;600;700;800&display=swap');
+// src/app/components/gestion-sources/gestion-sources.component.scss
-* {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
+// Animations
+@keyframes fade-in {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
}
-body {
- font-family: 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
\ No newline at end of file
+@keyframes slide-in {
+ from {
+ transform: translateX(100%);
+ opacity: 0;
+ }
+ to {
+ transform: translateX(0);
+ opacity: 1;
+ }
+}
+
+@keyframes slide-down {
+ from {
+ transform: translateY(-10px);
+ opacity: 0;
+ }
+ to {
+ transform: translateY(0);
+ opacity: 1;
+ }
+}
+
+// Utility classes
+.animate-fade-in {
+ animation: fade-in 0.3s ease-in-out;
+}
+
+.animate-slide-in {
+ animation: slide-in 0.3s ease-out;
+}
+
+// Snackbar styles
+::ng-deep {
+ .snackbar-success {
+ background: #10b981 !important;
+ color: white !important;
+ }
+
+ .snackbar-error {
+ background: #ef4444 !important;
+ color: white !important;
+ }
+
+ .snackbar-warning {
+ background: #f59e0b !important;
+ color: white !important;
+ }
+
+ .snackbar-info {
+ background: #3b82f6 !important;
+ color: white !important;
+ }
+}
+
+// Custom scrollbar
+::-webkit-scrollbar {
+ width: 8px;
+ height: 8px;
+}
+
+::-webkit-scrollbar-track {
+ background: #f1f5f9;
+}
+
+::-webkit-scrollbar-thumb {
+ background: #cbd5e1;
+ border-radius: 4px;
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background: #94a3b8;
+}
+
+// Hover effects for table rows
+tr.group:hover {
+ .opacity-0 {
+ opacity: 1;
+ }
+}
+
+// Responsive adjustments
+@media (max-width: 768px) {
+ .hidden-mobile {
+ display: none;
+ }
+}
+
+.filter-container {
+ position: relative;
+
+ .filter-button.active {
+ background-color: rgba(63, 81, 181, 0.1);
+ color: #3f51b5;
+ }
+}
+
+.filter-menu {
+ position: absolute;
+ top: 50px;
+ right: 0;
+ background: white;
+ border-radius: 8px;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+ padding: 16px;
+ min-width: 300px;
+ z-index: 1000;
+
+ .filter-section {
+ margin-bottom: 16px;
+
+ h4 {
+ font-size: 12px;
+ font-weight: 600;
+ text-transform: uppercase;
+ color: #666;
+ margin: 0 0 8px 0;
+ }
+
+ .filter-options {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
+
+ button {
+ font-size: 13px;
+ padding: 6px 12px;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ background: white;
+ transition: all 0.2s;
+
+ &.active {
+ background-color: #3f51b5;
+ color: white;
+ border-color: #3f51b5;
+ }
+
+ &:hover:not(.active) {
+ background-color: #f5f5f5;
+ }
+ }
+ }
+
+ .search-field {
+ width: 100%;
+ margin-top: 8px;
+ }
+ }
+
+ .filter-actions {
+ border-top: 1px solid #eee;
+ padding-top: 12px;
+ text-align: right;
+
+ button {
+ color: #666;
+ font-size: 13px;
+ }
+ }
+}
+
+// ===== 2. DIALOGUE STATISTIQUES =====
+.stats-dialog-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: rgba(0, 0, 0, 0.5);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 2000;
+ animation: fadeIn 0.2s;
+}
+
+.stats-dialog {
+ background: white;
+ border-radius: 12px;
+ padding: 24px;
+ max-width: 600px;
+ width: 90%;
+ max-height: 80vh;
+ overflow-y: auto;
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
+ animation: slideUp 0.3s;
+
+ .stats-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 24px;
+ padding-bottom: 16px;
+ border-bottom: 2px solid #f0f0f0;
+
+ h2 {
+ margin: 0;
+ font-size: 24px;
+ font-weight: 600;
+ color: #333;
+ }
+ }
+
+ .stats-content {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
+ gap: 16px;
+ }
+
+ .stat-card {
+ background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
+ border-radius: 12px;
+ padding: 20px;
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ transition: transform 0.2s;
+
+ &:hover {
+ transform: translateY(-4px);
+ }
+
+ &.full-width {
+ grid-column: 1 / -1;
+ }
+
+ .stat-icon {
+ width: 48px;
+ height: 48px;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: white;
+ color: #3f51b5;
+
+ &.internal {
+ background: #e3f2fd;
+ color: #1976d2;
+ }
+
+ &.external {
+ background: #f3e5f5;
+ color: #7b1fa2;
+ }
+
+ &.editable {
+ background: #e8f5e9;
+ color: #388e3c;
+ }
+
+ &.readonly {
+ background: #ffebee;
+ color: #d32f2f;
+ }
+
+ &.tools {
+ background: #fff3e0;
+ color: #f57c00;
+ }
+
+ mat-icon {
+ font-size: 28px;
+ width: 28px;
+ height: 28px;
+ }
+ }
+
+ .stat-info {
+ flex: 1;
+
+ .stat-value {
+ font-size: 32px;
+ font-weight: 700;
+ color: #333;
+ line-height: 1;
+ margin-bottom: 4px;
+ }
+
+ .stat-label {
+ font-size: 13px;
+ color: #666;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ }
+
+ .tools-list {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
+ margin-top: 8px;
+
+ .tool-chip {
+ background: white;
+ padding: 4px 12px;
+ border-radius: 16px;
+ font-size: 12px;
+ font-weight: 500;
+ color: #333;
+ }
+ }
+ }
+ }
+}
+
+// ===== 3. ANIMATIONS =====
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+}
+
+@keyframes slideUp {
+ from {
+ transform: translateY(20px);
+ opacity: 0;
+ }
+ to {
+ transform: translateY(0);
+ opacity: 1;
+ }
+}
+
+// ===== 4. BOUTONS ACTIFS =====
+.stats-button, .filter-button, .export-button {
+ &:hover {
+ background-color: rgba(63, 81, 181, 0.08);
+ }
+}
+
+.example-accordion {
+ display: block;
+ max-width: 500px;
+}
+
+.example-accordion-item {
+ display: block;
+ border: solid 1px #ccc;
+}
+
+.example-accordion-item + .example-accordion-item {
+ border-top: none;
+}
+
+.example-accordion-item-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ width: 100%;
+ height : 100%;
+ background: none;
+ border: none;
+ padding: 10px;
+ text-align: center;
+ color : #16079e !important;
+ text-weight: bold;
+
+}
+
+.example-accordion-item-description {
+ font-size: 0.85em;
+ color: #999;
+}
+
+.example-accordion-item-body {
+ padding: 10px;
+
+}
+
+.example-accordion-item-header:hover {
+ cursor: pointer;
+ background-color: #eee;
+}
+
+.example-accordion-item:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+
+.example-accordion-item:last-child {
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
diff --git a/Frontend/src/app/components/gestion-ressources/gestion-ressources.component.ts b/Frontend/src/app/components/gestion-ressources/gestion-ressources.component.ts
index 5fca24dc..0b8a84ce 100644
--- a/Frontend/src/app/components/gestion-ressources/gestion-ressources.component.ts
+++ b/Frontend/src/app/components/gestion-ressources/gestion-ressources.component.ts
@@ -23,6 +23,7 @@ import { OntologyManagerDialogComponent } from '../ontology-manager-dialog/ontol
import { Router } from '@angular/router';
import { MatDialogRef } from '@angular/material/dialog';
+import {CdkAccordionModule} from '@angular/cdk/accordion';
@Component({
selector: 'app-gestion-ressources',
@@ -34,6 +35,7 @@ import { MatDialogRef } from '@angular/material/dialog';
MatDividerModule,
MatListModule,
MatDialogModule,
+ CdkAccordionModule,
EntityDetailsComponent, ListeEntitesComponent, SparqlComponent],
templateUrl: './gestion-ressources.component.html',
styleUrl: './gestion-ressources.component.scss',
@@ -73,6 +75,13 @@ export class GestionRessourcesComponent implements OnInit {
showPersonForm: boolean = false;
+ accordion_items = [
+ { title: 'Main Entity Types', values: ['Activity', 'Person', 'Record', 'Instantiation', 'Place'] },
+ { title: 'Used Types', values: [] },
+ { title: 'Main Terminologies', values: ['ActivityType', 'DocumentaryFormType', 'ContentFormType', 'Language', 'PlaceType', 'RoleType'] }
+ ];
+ expandedIndex = 0;
+
constructor(public dialog: MatDialog, private ontologyService: GestionRessourcesService,
private projetService: GestionProjetsService,
diff --git a/Frontend/src/app/components/gestion-sources/datasource.model.ts b/Frontend/src/app/components/gestion-sources/datasource.model.ts
index af6e4632..00e1e8f2 100644
--- a/Frontend/src/app/components/gestion-sources/datasource.model.ts
+++ b/Frontend/src/app/components/gestion-sources/datasource.model.ts
@@ -1,11 +1,11 @@
-export type SourceType = 'INTERNAL' | 'EXTERNAL';
+// export type SourceType = 'INTERNAL' | 'EXTERNAL';
-export interface DataSource {
- id: string; //ex: graph_importe_1
- type: SourceType;
- name: string;
- description?: string;
- url?: string; //useful for external sources
- lastImportAt?: string; //ISO date string
- editable: boolean; //internal true, external false
-}
+// export interface DataSource {
+// id: string; //ex: graph_importe_1
+// type: SourceType;
+// name: string;
+// description?: string;
+// url?: string; //useful for external sources
+// lastImportAt?: string; //ISO date string
+// editable: boolean; //internal true, external false
+// }
diff --git a/Frontend/src/app/components/gestion-sources/gestion-sources.component.html b/Frontend/src/app/components/gestion-sources/gestion-sources.component.html
index 2f33e251..f074ad4c 100644
--- a/Frontend/src/app/components/gestion-sources/gestion-sources.component.html
+++ b/Frontend/src/app/components/gestion-sources/gestion-sources.component.html
@@ -17,18 +17,18 @@ RDF Data Sources Managem
-
- Projets
-
+
Projects
+
- Ressources
+ Resources
diff --git a/Frontend/src/app/components/liste-entites/liste-entites.component.html b/Frontend/src/app/components/liste-entites/liste-entites.component.html
index 017503b2..df1535dc 100644
--- a/Frontend/src/app/components/liste-entites/liste-entites.component.html
+++ b/Frontend/src/app/components/liste-entites/liste-entites.component.html
@@ -9,7 +9,7 @@
- {{ allEntities.length }} résultats
+ {{ allEntities.length }} result 1">s
@@ -21,7 +21,7 @@
Type: {{ selectedType }}
-
+
@@ -48,7 +48,15 @@
- Effacer tous les filtres
+ Clear all filters
+
+
+
+
+
+ New Entity
+ +
@@ -62,13 +70,13 @@
+ aria-label="Search entities">
+ aria-label="Clear search">
@@ -102,7 +110,7 @@
-
@@ -148,8 +156,8 @@
-
-
+
|
@@ -196,13 +204,6 @@
{{ entity.date }}
-
- |
-
- {{ entity.source }}
-
- |
- Aucun résultat trouvé
- Essayez de modifier vos critères de recherche ou de supprimer les filtres.
+ No results found
+ Try adjusting your search criteria or clearing the filters.
- Effacer tous les filtres
+ Clear all filters
diff --git a/Frontend/src/app/components/liste-entites/liste-entites.component.ts b/Frontend/src/app/components/liste-entites/liste-entites.component.ts
index 64219d20..b8c51fcb 100644
--- a/Frontend/src/app/components/liste-entites/liste-entites.component.ts
+++ b/Frontend/src/app/components/liste-entites/liste-entites.component.ts
@@ -28,7 +28,7 @@ export class ListeEntitesComponent {
constructor(private dialog: MatDialog) {}
- openCreateRessourceDialog() {
+ openCreateEntityDialog_withType() {
if (!this.selectedType) return;
const [ontology, type] = this.selectedType.split(':');
@@ -42,6 +42,17 @@ export class ListeEntitesComponent {
});
}
+ openCreateEntityDialog_withoutType() {
+ // if (!this.selectedType) return;
+
+ // const [ontology, type] = this.selectedType.split(':');
+
+ this.dialog.open(CreateRessourceComponent, {
+ width: '600px',
+ data: null
+ });
+ }
+
clearTypeFilter() {
this.selectedType = null;
this.applyAllFilters();
diff --git a/Frontend/src/app/components/nav-bar/nav-bar.component.html b/Frontend/src/app/components/nav-bar/nav-bar.component.html
new file mode 100644
index 00000000..108f6fd4
--- /dev/null
+++ b/Frontend/src/app/components/nav-bar/nav-bar.component.html
@@ -0,0 +1 @@
+nav-bar works!
diff --git a/RDF_Back/projects/archive_khaouala/store/txn-status b/Frontend/src/app/components/nav-bar/nav-bar.component.scss
similarity index 100%
rename from RDF_Back/projects/archive_khaouala/store/txn-status
rename to Frontend/src/app/components/nav-bar/nav-bar.component.scss
diff --git a/Frontend/src/app/components/gestion-sources/gestion-sources.component.spec.ts b/Frontend/src/app/components/nav-bar/nav-bar.component.spec.ts
similarity index 50%
rename from Frontend/src/app/components/gestion-sources/gestion-sources.component.spec.ts
rename to Frontend/src/app/components/nav-bar/nav-bar.component.spec.ts
index 83f5bd8b..0f6b475e 100644
--- a/Frontend/src/app/components/gestion-sources/gestion-sources.component.spec.ts
+++ b/Frontend/src/app/components/nav-bar/nav-bar.component.spec.ts
@@ -1,18 +1,18 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { GestionSourcesComponent } from './gestion-sources.component';
+import { NavBarComponent } from './nav-bar.component';
-describe('GestionSourcesComponent', () => {
- let component: GestionSourcesComponent;
- let fixture: ComponentFixture;
+describe('NavBarComponent', () => {
+ let component: NavBarComponent;
+ let fixture: ComponentFixture;
beforeEach(async () => {
await TestBed.configureTestingModule({
- imports: [GestionSourcesComponent]
+ imports: [NavBarComponent]
})
.compileComponents();
- fixture = TestBed.createComponent(GestionSourcesComponent);
+ fixture = TestBed.createComponent(NavBarComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/Frontend/src/app/components/nav-bar/nav-bar.component.ts b/Frontend/src/app/components/nav-bar/nav-bar.component.ts
new file mode 100644
index 00000000..7d11afea
--- /dev/null
+++ b/Frontend/src/app/components/nav-bar/nav-bar.component.ts
@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-nav-bar',
+ imports: [],
+ templateUrl: './nav-bar.component.html',
+ styleUrl: './nav-bar.component.scss'
+})
+export class NavBarComponent {
+
+}
diff --git a/Frontend/src/app/components/rico-properties/rico-properties.component.html b/Frontend/src/app/components/rico-properties/rico-properties.component.html
new file mode 100644
index 00000000..c2b74bf2
--- /dev/null
+++ b/Frontend/src/app/components/rico-properties/rico-properties.component.html
@@ -0,0 +1,91 @@
+
\ No newline at end of file
diff --git a/Frontend/src/app/components/rico-properties/rico-properties.component.scss b/Frontend/src/app/components/rico-properties/rico-properties.component.scss
new file mode 100644
index 00000000..dea344f3
--- /dev/null
+++ b/Frontend/src/app/components/rico-properties/rico-properties.component.scss
@@ -0,0 +1,9 @@
+::ng-deep .iri-badge .mat-badge-content {
+ background-color: #3b82f6; /* blue */
+ color: white;
+}
+
+::ng-deep .literal-badge .mat-badge-content {
+ background-color: #10b981; /* green */
+ color: white;
+}
\ No newline at end of file
diff --git a/Frontend/src/app/components/rico-properties/rico-properties.component.ts b/Frontend/src/app/components/rico-properties/rico-properties.component.ts
new file mode 100644
index 00000000..e8689662
--- /dev/null
+++ b/Frontend/src/app/components/rico-properties/rico-properties.component.ts
@@ -0,0 +1,104 @@
+import { Component, Input,Inject, OnInit } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { MAT_DIALOG_DATA } from '@angular/material/dialog';
+import {MatCheckboxModule} from '@angular/material/checkbox';
+import {MatButtonModule} from '@angular/material/button';
+import {MatChipInputEvent, MatChipsModule} from '@angular/material/chips';
+import {MatIconModule} from '@angular/material/icon';
+import {MatBadgeModule} from '@angular/material/badge';
+
+import { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup, FormArray, Validators } from '@angular/forms';
+import { GestionRessourcesService } from '../../services/gestion-ressources.service';
+
+@Component({
+ selector: 'app-rico-properties',
+ imports: [
+ CommonModule,
+ FormsModule,
+ ReactiveFormsModule,
+ MatCheckboxModule,
+ MatButtonModule,
+ MatChipsModule,
+ MatIconModule,
+ MatBadgeModule
+ ],
+ templateUrl: './rico-properties.component.html',
+ styleUrl: './rico-properties.component.scss'
+})
+export class RicoPropertiesComponent implements OnInit {
+
+ constructor(@Inject(MAT_DIALOG_DATA) public data: any,private ontologyService: GestionRessourcesService) {
+ this.predicates = data.predicates;
+ this.association = data.association;
+ }
+
+ ngOnInit() {
+ console.log("All predicated : ", this.predicates);
+ this.filteredPredicates = this.predicates;
+ }
+
+ allPossibleRanges : any[] = [];
+
+ filters : string[] = [];
+
+ filterByKindValue : string = "";
+
+ predicates: any[] = [];
+
+ filteredPredicates: any[] = [];
+
+ association : any ;
+
+ removeKindValueFilter() {
+ const updated = this.filters.filter(
+ item => item !== 'iri' && item !== 'literal'
+ );
+ this.filters = updated;
+ this.filteredPredicates = this.predicates;
+
+ }
+
+ filterPropertiesByKindValue(kindValue : string) {
+ this.filterByKindValue = kindValue;
+ const otherKindValue = kindValue === 'literal' ? 'iri' : 'literal';
+ if (!this.filters.includes(kindValue) && this.filters.includes(otherKindValue)) {
+ const updated = this.filters.filter(item => item !== otherKindValue);
+ this.filters = updated;
+ this.filters.push(kindValue);
+ this.filteredPredicates = this.predicates.filter(predicate => predicate.valueKind === kindValue);
+ }
+ if(!this.filters.includes(kindValue) && !this.filters.includes(otherKindValue)) {
+ this.filters.push(kindValue);
+ this.filteredPredicates = this.predicates.filter(predicate => predicate.valueKind === kindValue);
+ }
+
+ }
+
+ onPredicateChange(event: any) {
+ if (!this.association) return;
+
+
+ this.association.valueKind = this.association.predicate?.valueKind || 'literal';
+
+
+ this.ontologyService.getAllEntitiesByType(this.association.predicate.range).subscribe({
+ next: (res) => {
+ this.allPossibleRanges = res;
+ console.log("All possible ranges for this predicate : ", res);
+ },
+ error: (err) => {
+ console.error("Error fetching possible ranges: ", err);
+ }
+ });
+
+ }
+ onCheckboxChange(prop: any) {
+ // if (prop.selected) {
+ this.association.predicate = prop;
+ console.log("Selected predicate: ", prop);
+ this.onPredicateChange(null);
+ // }
+ }
+
+
+}
diff --git a/Frontend/src/app/models/project.model.ts b/Frontend/src/app/models/project.model.ts
index 2c7888f8..0eb0815e 100644
--- a/Frontend/src/app/models/project.model.ts
+++ b/Frontend/src/app/models/project.model.ts
@@ -14,6 +14,8 @@ export interface ProjectDto {
created: string | null;
/** Date de dernière modification (format ISO) */
lastModified: string | null;
+
+ prefix : string;
}
/**
@@ -23,6 +25,7 @@ export interface OpenProjectRequest {
name: string;
persistent?: boolean;
description?: string;
+ prefix : string;
}
/**
diff --git a/Frontend/src/app/models/ressource.ts b/Frontend/src/app/models/ressource.ts
index b270db19..892619e3 100644
--- a/Frontend/src/app/models/ressource.ts
+++ b/Frontend/src/app/models/ressource.ts
@@ -23,118 +23,3 @@ export interface Association {
object : string;
}
-export const allEntities: Entity[] = [
- {
- id: '1',
- titre: 'Marie Curie',
- date: '1867-11-07',
- source: 'Manuel',
- statut: 'complet',
- type: 'Person',
- birthDate: '07/11/1867',
- deathDate: '04/07/1934',
- associatedWith: [2, 11]
- },
- {
- id: '2',
- titre: 'Pierre Curie',
- date: '1859-05-15',
- source: 'Manuel',
- statut: 'partiel',
- type: 'Person',
- birthDate: '15/05/1859',
- deathDate: '19/04/1906',
- associatedWith: [1]
- },
- {
- id: '3',
- titre: 'Découverte du Radium',
- date: '1898-12-26',
- source: 'Archives scientifiques',
- statut: 'complet',
- type: 'Event'
- },
- {
- id: '4',
- titre: 'Laboratoire Curie',
- date: '1914-07-31',
- source: 'Archives institutionnelles',
- statut: 'complet',
- type: 'Place'
- },
- {
- id: '5',
- titre: 'Notes de recherche 1898',
- date: '1898-01-01',
- source: 'Automatique',
- statut: 'partiel',
- type: 'Record'
- },
- {
- id: '6',
- titre: 'Prix Nobel de Physique',
- date: '1903-12-10',
- source: 'Archives Nobel',
- statut: 'complet',
- type: 'Event'
- },
- {
- id: '7',
- titre: 'Institut Curie',
- date: '1909-01-01',
- source: 'Archives institutionnelles',
- statut: 'complet',
- type: 'Agent'
- },
- {
- id: '8',
- titre: 'Manuscrit original - Radioactivité',
- date: '1902-05-15',
- source: 'Bibliothèque nationale',
- statut: 'complet',
- type: 'Instantiation'
- },
- {
- id: '9',
- titre: 'Correspondance scientifique',
- date: '1900-01-01',
- source: 'Automatique',
- statut: 'partiel',
- type: 'Record Resource'
- },
- {
- id: '10',
- titre: 'Photographie de laboratoire',
- date: '1905-03-20',
- source: 'Manuel',
- statut: 'complet',
- type: 'Instantiation'
- },
- {
- id: '11',
- titre: 'Irène Joliot-Curie',
- date: '1897-09-12',
- source: 'Manuel',
- statut: 'complet',
- type: 'Person',
- birthDate: '12/09/1897',
- deathDate: '17/03/1956',
- associatedWith: ['Marie Curie', 'Frédéric Joliot-Curie']
- },
- {
- id: '12',
- titre: 'Université de Paris',
- date: '1896-01-01',
- source: 'Archives universitaires',
- statut: 'complet',
- type: 'Place'
- },
- {
- id: '13',
- titre: 'Journal de recherche 1903',
- date: '1903-06-15',
- source: 'Automatique',
- statut: 'partiel',
- type: 'Record'
- }
- ];
\ No newline at end of file
diff --git a/Frontend/src/app/services/gestion-projet.service.ts b/Frontend/src/app/services/gestion-projet.service.ts
index 5a1078e0..d2019012 100644
--- a/Frontend/src/app/services/gestion-projet.service.ts
+++ b/Frontend/src/app/services/gestion-projet.service.ts
@@ -4,6 +4,7 @@ import { Observable, throwError, BehaviorSubject } from 'rxjs';
import { catchError, tap } from 'rxjs/operators';
import { ProjectDto, OpenProjectRequest } from '../models/project.model';
import { MatSnackBar } from '@angular/material/snack-bar';
+import { firstValueFrom } from 'rxjs';
@Injectable({
providedIn: 'root'
@@ -61,6 +62,18 @@ export class GestionProjetService {
);
}
+ createProject(request: OpenProjectRequest): Observable {
+ return this.http.post(`${this.API_BASE}/create`, request).pipe(
+ tap(project => {
+ this._activeProject$.next(project);
+ this.snackBar.open(`Project created`, 'Close', {
+ duration: 3000, panelClass: ['snackbar-success']
+ });
+ }),
+ catchError(err => this.handleError(err, 'Error while creating the project'))
+ );
+ }
+
deleteProject(projectName: string): Observable {
return this.http.delete(`${this.API_BASE}/${projectName}`, {
responseType: 'text'
@@ -87,7 +100,7 @@ export class GestionProjetService {
* Close the active project. The data remains on disk.
*/
- closeProject(): Observable {
+ closeProject(): Observable {
return this.http.post(`${this.API_BASE}/close`, {}).pipe(
tap(() => {
this._activeProject$.next(null);
@@ -124,5 +137,44 @@ export class GestionProjetService {
return throwError(() => new Error(errorMessage));
}
+ importBackUpProject(file: File): Observable {
+ const formData = new FormData();
+ formData.append('file', file);
+
+ return this.http.post(`${this.API_BASE}/import-backup`, formData,
+ // {
+ // reportProgress: true,
+ // observe: 'events'
+ // }
+ );
+ }
+
+ importTurtleSource(file: File): Observable {
+ const formData = new FormData();
+ formData.append('file', file);
+
+ return this.http.post(`${this.API_BASE}/import`, formData,
+ // {
+ // reportProgress: true,
+ // observe: 'events'
+ // }
+ );
+ }
+
+ async exportInternalDataSource(): Promise {
+ return firstValueFrom(
+ this.http.get(`${this.API_BASE}/export/internal`, {
+ responseType: 'blob',
+ })
+ );
+ }
+ async exportBackup(): Promise {
+ return firstValueFrom(
+ this.http.get(`${this.API_BASE}/export/backup`, {
+ responseType: 'blob',
+ })
+ );
+ }
+
}
\ No newline at end of file
diff --git a/Frontend/src/app/services/gestion-ressources.service.ts b/Frontend/src/app/services/gestion-ressources.service.ts
index 34c46f56..99483e13 100644
--- a/Frontend/src/app/services/gestion-ressources.service.ts
+++ b/Frontend/src/app/services/gestion-ressources.service.ts
@@ -11,6 +11,7 @@ export class GestionRessourcesService {
private apiUrl = 'http://localhost:8080/sparql';
private ontologyUrl = 'http://localhost:8080/ontology';
private rdfUrl = 'http://localhost:8080/rdf';
+ private ricoGraphIri = 'http://cnrs.lacito/app#/context/ontology/rico'; // ⚠️ à vérifier exactement contre RdfContexts.CTX_ONTO_RICO
constructor(
private http: HttpClient,
@@ -23,7 +24,12 @@ export class GestionRessourcesService {
getOntologyLabel(listeIris: string[]): any[] {
// ❌ Remove all types from this namespace
- listeIris = listeIris.filter(iri => !iri.startsWith('http://uspn.fr/app#') && !iri.startsWith("http://purl.org/vocommons/voaf#") && !iri.startsWith("http://www.w3.org/2004/02/skos/core#"));
+ listeIris = listeIris.filter(iri =>
+ !iri.startsWith('http://uspn.fr/app#')
+ && !iri.startsWith("http://purl.org/vocommons/voaf#")
+ && !iri.startsWith("http://www.w3.org/2004/02/skos/core#")
+ && !iri.startsWith('http://www.w3.org/2002/07/owl#')
+ );
const ontology_types: any[] = [];
const labels = this.ontologyLabelsService.getLabels();
@@ -130,14 +136,16 @@ export class GestionRessourcesService {
getAllRicoClasses(): Observable {
const objt = {
- "query": "PREFIX owl: PREFIX rdfs: SELECT ?type ?label WHERE { GRAPH { { ?type a owl:Class . } UNION { ?type a rdfs:Class . } FILTER(STRSTARTS(STR(?type), \"https://www.ica.org/standards/RiC/ontology#\")) OPTIONAL { ?type rdfs:label ?label . FILTER(lang(?label) = \"\" || langMatches(lang(?label), \"en\") || langMatches(lang(?label), \"fr\")) } } } ORDER BY ?type"
- };
+ query: `PREFIX owl: PREFIX rdfs: SELECT ?type ?label WHERE { GRAPH <${this.ricoGraphIri}> { { ?type a owl:Class . } UNION { ?type a rdfs:Class . } FILTER(STRSTARTS(STR(?type), "https://www.ica.org/standards/RiC/ontology#")) OPTIONAL { ?type rdfs:label ?label . FILTER(lang(?label) = "" || langMatches(lang(?label), "en") || langMatches(lang(?label), "fr")) } } } ORDER BY ?type`
+ };1
return this.http.post(`${this.apiUrl}/select`, objt);
}
+ // BIND(IRI(CONCAT("https://www.ica.org/standards/RiC/ontology#", "${type}")) AS ?selectedClass)
+
getPredicatesByTypeRico(type: string): Observable {
const objt = {
- query: `PREFIX rico: PREFIX rdf: PREFIX rdfs: PREFIX owl: SELECT DISTINCT ?p ?label ?domain ?range ?valueKind WHERE { GRAPH { BIND(rico:${type} AS ?selectedClass) ?selectedClass rdfs:subClassOf* ?domain . ?p rdfs:domain ?domain . FILTER(STRSTARTS(STR(?p), "https://www.ica.org/standards/RiC/ontology#")) OPTIONAL { ?p rdfs:label ?label . FILTER(lang(?label) = "" || langMatches(lang(?label), "en") || langMatches(lang(?label), "fr")) } OPTIONAL { ?p rdfs:range ?range . } BIND(IF(EXISTS { ?p a owl:ObjectProperty . }, "iri", IF(EXISTS { ?p a owl:DatatypeProperty . }, "literal", "unknown")) AS ?valueKind) } } ORDER BY ?p`
+ query: `PREFIX rico: PREFIX rdf: PREFIX rdfs: PREFIX owl: SELECT DISTINCT ?p ?label ?domain ?range ?valueKind WHERE { GRAPH <${this.ricoGraphIri}> { BIND(rico:${type} AS ?selectedClass) ?selectedClass rdfs:subClassOf* ?domain . ?p rdfs:domain ?domain . FILTER(STRSTARTS(STR(?p), "https://www.ica.org/standards/RiC/ontology#")) OPTIONAL { ?p rdfs:label ?label . FILTER(lang(?label) = "" || langMatches(lang(?label), "en") || langMatches(lang(?label), "fr")) } OPTIONAL { ?p rdfs:range ?range . } BIND(IF(EXISTS { ?p a owl:ObjectProperty . }, "iri", IF(EXISTS { ?p a owl:DatatypeProperty . }, "literal", "unknown")) AS ?valueKind) } } ORDER BY ?p`
};
return this.http.post(`${this.apiUrl}/select`, objt);
diff --git a/RDF_Back/projects/Test_Mehrez/store/contexts.dat b/RDF_Back/projects/Test_Mehrez/store/contexts.dat
deleted file mode 100644
index 50ab6f1a..00000000
Binary files a/RDF_Back/projects/Test_Mehrez/store/contexts.dat and /dev/null differ
diff --git a/RDF_Back/projects/Test_Mehrez/store/namespaces.dat b/RDF_Back/projects/Test_Mehrez/store/namespaces.dat
deleted file mode 100644
index b1ec9998..00000000
--- a/RDF_Back/projects/Test_Mehrez/store/namespaces.dat
+++ /dev/null
@@ -1 +0,0 @@
-nnf
\ No newline at end of file
diff --git a/RDF_Back/projects/Test_Mehrez/store/triples-posc.alloc b/RDF_Back/projects/Test_Mehrez/store/triples-posc.alloc
deleted file mode 100644
index 86b2a60a..00000000
Binary files a/RDF_Back/projects/Test_Mehrez/store/triples-posc.alloc and /dev/null differ
diff --git a/RDF_Back/projects/Test_Mehrez/store/triples-posc.dat b/RDF_Back/projects/Test_Mehrez/store/triples-posc.dat
deleted file mode 100644
index b4c167fc..00000000
Binary files a/RDF_Back/projects/Test_Mehrez/store/triples-posc.dat and /dev/null differ
diff --git a/RDF_Back/projects/Test_Mehrez/store/triples-spoc.alloc b/RDF_Back/projects/Test_Mehrez/store/triples-spoc.alloc
deleted file mode 100644
index 86b2a60a..00000000
Binary files a/RDF_Back/projects/Test_Mehrez/store/triples-spoc.alloc and /dev/null differ
diff --git a/RDF_Back/projects/Test_Mehrez/store/triples-spoc.dat b/RDF_Back/projects/Test_Mehrez/store/triples-spoc.dat
deleted file mode 100644
index c1ddc956..00000000
Binary files a/RDF_Back/projects/Test_Mehrez/store/triples-spoc.dat and /dev/null differ
diff --git a/RDF_Back/projects/Test_Mehrez/store/values.dat b/RDF_Back/projects/Test_Mehrez/store/values.dat
deleted file mode 100644
index 09e3f2d0..00000000
Binary files a/RDF_Back/projects/Test_Mehrez/store/values.dat and /dev/null differ
diff --git a/RDF_Back/projects/Test_Mehrez/store/values.hash b/RDF_Back/projects/Test_Mehrez/store/values.hash
deleted file mode 100644
index 5eb48c89..00000000
Binary files a/RDF_Back/projects/Test_Mehrez/store/values.hash and /dev/null differ
diff --git a/RDF_Back/projects/Test_Mehrez/store/values.id b/RDF_Back/projects/Test_Mehrez/store/values.id
deleted file mode 100644
index b60099b4..00000000
Binary files a/RDF_Back/projects/Test_Mehrez/store/values.id and /dev/null differ
diff --git a/RDF_Back/projects/archive/store/contexts.dat b/RDF_Back/projects/archive/store/contexts.dat
deleted file mode 100644
index 9b94c369..00000000
Binary files a/RDF_Back/projects/archive/store/contexts.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive/store/triples-posc.dat b/RDF_Back/projects/archive/store/triples-posc.dat
deleted file mode 100644
index 4265f621..00000000
Binary files a/RDF_Back/projects/archive/store/triples-posc.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive/store/triples-spoc.alloc b/RDF_Back/projects/archive/store/triples-spoc.alloc
deleted file mode 100644
index 9fa4e28f..00000000
Binary files a/RDF_Back/projects/archive/store/triples-spoc.alloc and /dev/null differ
diff --git a/RDF_Back/projects/archive/store/triples-spoc.dat b/RDF_Back/projects/archive/store/triples-spoc.dat
deleted file mode 100644
index ef7e9ddf..00000000
Binary files a/RDF_Back/projects/archive/store/triples-spoc.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive/store/values.dat b/RDF_Back/projects/archive/store/values.dat
deleted file mode 100644
index afbf55e8..00000000
Binary files a/RDF_Back/projects/archive/store/values.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive/store/values.hash b/RDF_Back/projects/archive/store/values.hash
deleted file mode 100644
index 76fc7ced..00000000
Binary files a/RDF_Back/projects/archive/store/values.hash and /dev/null differ
diff --git a/RDF_Back/projects/archive/store/values.id b/RDF_Back/projects/archive/store/values.id
deleted file mode 100644
index 40514f13..00000000
Binary files a/RDF_Back/projects/archive/store/values.id and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaouala/store/contexts.dat b/RDF_Back/projects/archive_khaouala/store/contexts.dat
deleted file mode 100644
index 48791cb7..00000000
Binary files a/RDF_Back/projects/archive_khaouala/store/contexts.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaouala/store/nativerdf.ver b/RDF_Back/projects/archive_khaouala/store/nativerdf.ver
deleted file mode 100644
index fb467b15..00000000
--- a/RDF_Back/projects/archive_khaouala/store/nativerdf.ver
+++ /dev/null
@@ -1 +0,0 @@
-5.2.2
\ No newline at end of file
diff --git a/RDF_Back/projects/archive_khaouala/store/triples-posc.alloc b/RDF_Back/projects/archive_khaouala/store/triples-posc.alloc
deleted file mode 100644
index d8d3ff45..00000000
Binary files a/RDF_Back/projects/archive_khaouala/store/triples-posc.alloc and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaouala/store/triples-posc.dat b/RDF_Back/projects/archive_khaouala/store/triples-posc.dat
deleted file mode 100644
index f88f530f..00000000
Binary files a/RDF_Back/projects/archive_khaouala/store/triples-posc.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaouala/store/triples-spoc.alloc b/RDF_Back/projects/archive_khaouala/store/triples-spoc.alloc
deleted file mode 100644
index 37721048..00000000
Binary files a/RDF_Back/projects/archive_khaouala/store/triples-spoc.alloc and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaouala/store/triples-spoc.dat b/RDF_Back/projects/archive_khaouala/store/triples-spoc.dat
deleted file mode 100644
index 65c26cac..00000000
Binary files a/RDF_Back/projects/archive_khaouala/store/triples-spoc.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaouala/store/triples.prop b/RDF_Back/projects/archive_khaouala/store/triples.prop
deleted file mode 100644
index fe446934..00000000
--- a/RDF_Back/projects/archive_khaouala/store/triples.prop
+++ /dev/null
@@ -1,4 +0,0 @@
-#triple indexes meta-data, DO NOT EDIT!
-#Thu Mar 19 11:31:37 CET 2026
-triple-indexes=spoc,posc
-version=10
diff --git a/RDF_Back/projects/archive_khaouala/store/values.dat b/RDF_Back/projects/archive_khaouala/store/values.dat
deleted file mode 100644
index 259c6864..00000000
Binary files a/RDF_Back/projects/archive_khaouala/store/values.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaouala/store/values.hash b/RDF_Back/projects/archive_khaouala/store/values.hash
deleted file mode 100644
index 518e12a1..00000000
Binary files a/RDF_Back/projects/archive_khaouala/store/values.hash and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaouala/store/values.id b/RDF_Back/projects/archive_khaouala/store/values.id
deleted file mode 100644
index 83093564..00000000
Binary files a/RDF_Back/projects/archive_khaouala/store/values.id and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaoula/store/contexts.dat b/RDF_Back/projects/archive_khaoula/store/contexts.dat
deleted file mode 100644
index 67c441ca..00000000
Binary files a/RDF_Back/projects/archive_khaoula/store/contexts.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaoula/store/lock/locked b/RDF_Back/projects/archive_khaoula/store/lock/locked
deleted file mode 100644
index e69de29b..00000000
diff --git a/RDF_Back/projects/archive_khaoula/store/lock/process b/RDF_Back/projects/archive_khaoula/store/lock/process
deleted file mode 100644
index 3ab386aa..00000000
--- a/RDF_Back/projects/archive_khaoula/store/lock/process
+++ /dev/null
@@ -1 +0,0 @@
-8308@LAPTOP-6K16SHPP
\ No newline at end of file
diff --git a/RDF_Back/projects/archive_khaoula/store/namespaces.dat b/RDF_Back/projects/archive_khaoula/store/namespaces.dat
deleted file mode 100644
index d8865401..00000000
Binary files a/RDF_Back/projects/archive_khaoula/store/namespaces.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaoula/store/nativerdf.ver b/RDF_Back/projects/archive_khaoula/store/nativerdf.ver
deleted file mode 100644
index fb467b15..00000000
--- a/RDF_Back/projects/archive_khaoula/store/nativerdf.ver
+++ /dev/null
@@ -1 +0,0 @@
-5.2.2
\ No newline at end of file
diff --git a/RDF_Back/projects/archive_khaoula/store/triples-posc.alloc b/RDF_Back/projects/archive_khaoula/store/triples-posc.alloc
deleted file mode 100644
index 22480a96..00000000
Binary files a/RDF_Back/projects/archive_khaoula/store/triples-posc.alloc and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaoula/store/triples-posc.dat b/RDF_Back/projects/archive_khaoula/store/triples-posc.dat
deleted file mode 100644
index 2a633a6a..00000000
Binary files a/RDF_Back/projects/archive_khaoula/store/triples-posc.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaoula/store/triples-spoc.dat b/RDF_Back/projects/archive_khaoula/store/triples-spoc.dat
deleted file mode 100644
index bad0fe2a..00000000
Binary files a/RDF_Back/projects/archive_khaoula/store/triples-spoc.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaoula/store/triples.prop b/RDF_Back/projects/archive_khaoula/store/triples.prop
deleted file mode 100644
index 8e10a362..00000000
--- a/RDF_Back/projects/archive_khaoula/store/triples.prop
+++ /dev/null
@@ -1,4 +0,0 @@
-#triple indexes meta-data, DO NOT EDIT!
-#Thu Mar 19 11:33:34 CET 2026
-triple-indexes=spoc,posc
-version=10
diff --git a/RDF_Back/projects/archive_khaoula/store/txn-status b/RDF_Back/projects/archive_khaoula/store/txn-status
deleted file mode 100644
index e69de29b..00000000
diff --git a/RDF_Back/projects/archive_khaoula/store/txncache.alloc b/RDF_Back/projects/archive_khaoula/store/txncache.alloc
deleted file mode 100644
index e69de29b..00000000
diff --git a/RDF_Back/projects/archive_khaoula/store/txncache.dat b/RDF_Back/projects/archive_khaoula/store/txncache.dat
deleted file mode 100644
index e69de29b..00000000
diff --git a/RDF_Back/projects/archive_khaoula/store/values.dat b/RDF_Back/projects/archive_khaoula/store/values.dat
deleted file mode 100644
index bdbf5cb8..00000000
Binary files a/RDF_Back/projects/archive_khaoula/store/values.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaoula/store/values.hash b/RDF_Back/projects/archive_khaoula/store/values.hash
deleted file mode 100644
index 991a7d92..00000000
Binary files a/RDF_Back/projects/archive_khaoula/store/values.hash and /dev/null differ
diff --git a/RDF_Back/projects/archive_khaoula/store/values.id b/RDF_Back/projects/archive_khaoula/store/values.id
deleted file mode 100644
index e2b060b6..00000000
Binary files a/RDF_Back/projects/archive_khaoula/store/values.id and /dev/null differ
diff --git a/RDF_Back/projects/archive_test/store/contexts.dat b/RDF_Back/projects/archive_test/store/contexts.dat
deleted file mode 100644
index 39aca6ec..00000000
Binary files a/RDF_Back/projects/archive_test/store/contexts.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive_test/store/namespaces.dat b/RDF_Back/projects/archive_test/store/namespaces.dat
deleted file mode 100644
index b1ec9998..00000000
--- a/RDF_Back/projects/archive_test/store/namespaces.dat
+++ /dev/null
@@ -1 +0,0 @@
-nnf
\ No newline at end of file
diff --git a/RDF_Back/projects/archive_test/store/nativerdf.ver b/RDF_Back/projects/archive_test/store/nativerdf.ver
deleted file mode 100644
index fb467b15..00000000
--- a/RDF_Back/projects/archive_test/store/nativerdf.ver
+++ /dev/null
@@ -1 +0,0 @@
-5.2.2
\ No newline at end of file
diff --git a/RDF_Back/projects/archive_test/store/triples-posc.alloc b/RDF_Back/projects/archive_test/store/triples-posc.alloc
deleted file mode 100644
index 86b2a60a..00000000
Binary files a/RDF_Back/projects/archive_test/store/triples-posc.alloc and /dev/null differ
diff --git a/RDF_Back/projects/archive_test/store/triples-posc.dat b/RDF_Back/projects/archive_test/store/triples-posc.dat
deleted file mode 100644
index 47826e09..00000000
Binary files a/RDF_Back/projects/archive_test/store/triples-posc.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive_test/store/triples-spoc.alloc b/RDF_Back/projects/archive_test/store/triples-spoc.alloc
deleted file mode 100644
index 86b2a60a..00000000
Binary files a/RDF_Back/projects/archive_test/store/triples-spoc.alloc and /dev/null differ
diff --git a/RDF_Back/projects/archive_test/store/triples-spoc.dat b/RDF_Back/projects/archive_test/store/triples-spoc.dat
deleted file mode 100644
index 47826e09..00000000
Binary files a/RDF_Back/projects/archive_test/store/triples-spoc.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive_test/store/triples.prop b/RDF_Back/projects/archive_test/store/triples.prop
deleted file mode 100644
index 7c342ddf..00000000
--- a/RDF_Back/projects/archive_test/store/triples.prop
+++ /dev/null
@@ -1,4 +0,0 @@
-#triple indexes meta-data, DO NOT EDIT!
-#Sat Mar 21 12:47:29 CET 2026
-triple-indexes=spoc,posc
-version=10
diff --git a/RDF_Back/projects/archive_test/store/txn-status b/RDF_Back/projects/archive_test/store/txn-status
deleted file mode 100644
index e69de29b..00000000
diff --git a/RDF_Back/projects/archive_test/store/txncache.alloc b/RDF_Back/projects/archive_test/store/txncache.alloc
deleted file mode 100644
index e69de29b..00000000
diff --git a/RDF_Back/projects/archive_test/store/txncache.dat b/RDF_Back/projects/archive_test/store/txncache.dat
deleted file mode 100644
index 4b88b8b3..00000000
Binary files a/RDF_Back/projects/archive_test/store/txncache.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive_test/store/values.dat b/RDF_Back/projects/archive_test/store/values.dat
deleted file mode 100644
index 8589f42f..00000000
Binary files a/RDF_Back/projects/archive_test/store/values.dat and /dev/null differ
diff --git a/RDF_Back/projects/archive_test/store/values.hash b/RDF_Back/projects/archive_test/store/values.hash
deleted file mode 100644
index 72710d24..00000000
Binary files a/RDF_Back/projects/archive_test/store/values.hash and /dev/null differ
diff --git a/RDF_Back/projects/archive_test/store/values.id b/RDF_Back/projects/archive_test/store/values.id
deleted file mode 100644
index e323bb44..00000000
Binary files a/RDF_Back/projects/archive_test/store/values.id and /dev/null differ
diff --git a/RDF_Back/projects/my-project/store/contexts.dat b/RDF_Back/projects/my-project/store/contexts.dat
deleted file mode 100644
index da921d66..00000000
Binary files a/RDF_Back/projects/my-project/store/contexts.dat and /dev/null differ
diff --git a/RDF_Back/projects/my-project/store/namespaces.dat b/RDF_Back/projects/my-project/store/namespaces.dat
deleted file mode 100644
index b2ae4dd7..00000000
Binary files a/RDF_Back/projects/my-project/store/namespaces.dat and /dev/null differ
diff --git a/RDF_Back/projects/my-project/store/nativerdf.ver b/RDF_Back/projects/my-project/store/nativerdf.ver
deleted file mode 100644
index fb467b15..00000000
--- a/RDF_Back/projects/my-project/store/nativerdf.ver
+++ /dev/null
@@ -1 +0,0 @@
-5.2.2
\ No newline at end of file
diff --git a/RDF_Back/projects/my-project/store/triples-posc.alloc b/RDF_Back/projects/my-project/store/triples-posc.alloc
deleted file mode 100644
index d8d3ff45..00000000
Binary files a/RDF_Back/projects/my-project/store/triples-posc.alloc and /dev/null differ
diff --git a/RDF_Back/projects/my-project/store/triples-posc.dat b/RDF_Back/projects/my-project/store/triples-posc.dat
deleted file mode 100644
index b0bfe076..00000000
Binary files a/RDF_Back/projects/my-project/store/triples-posc.dat and /dev/null differ
diff --git a/RDF_Back/projects/my-project/store/triples-spoc.alloc b/RDF_Back/projects/my-project/store/triples-spoc.alloc
deleted file mode 100644
index ac59bd8d..00000000
Binary files a/RDF_Back/projects/my-project/store/triples-spoc.alloc and /dev/null differ
diff --git a/RDF_Back/projects/my-project/store/triples-spoc.dat b/RDF_Back/projects/my-project/store/triples-spoc.dat
deleted file mode 100644
index d16f1e3d..00000000
Binary files a/RDF_Back/projects/my-project/store/triples-spoc.dat and /dev/null differ
diff --git a/RDF_Back/projects/my-project/store/triples.prop b/RDF_Back/projects/my-project/store/triples.prop
deleted file mode 100644
index 74e7651f..00000000
--- a/RDF_Back/projects/my-project/store/triples.prop
+++ /dev/null
@@ -1,4 +0,0 @@
-#triple indexes meta-data, DO NOT EDIT!
-#Sat Mar 14 15:54:26 CET 2026
-triple-indexes=spoc,posc
-version=10
diff --git a/RDF_Back/projects/my-project/store/txn-status b/RDF_Back/projects/my-project/store/txn-status
deleted file mode 100644
index e69de29b..00000000
diff --git a/RDF_Back/projects/my-project/store/values.dat b/RDF_Back/projects/my-project/store/values.dat
deleted file mode 100644
index 50593a5a..00000000
Binary files a/RDF_Back/projects/my-project/store/values.dat and /dev/null differ
diff --git a/RDF_Back/projects/my-project/store/values.hash b/RDF_Back/projects/my-project/store/values.hash
deleted file mode 100644
index bcd2d209..00000000
Binary files a/RDF_Back/projects/my-project/store/values.hash and /dev/null differ
diff --git a/RDF_Back/projects/my-project/store/values.id b/RDF_Back/projects/my-project/store/values.id
deleted file mode 100644
index 7a168ded..00000000
Binary files a/RDF_Back/projects/my-project/store/values.id and /dev/null differ
diff --git a/RDF_Back/projects/test_projet_01/store/contexts.dat b/RDF_Back/projects/test_projet_01/store/contexts.dat
deleted file mode 100644
index 55478c79..00000000
Binary files a/RDF_Back/projects/test_projet_01/store/contexts.dat and /dev/null differ
diff --git a/RDF_Back/projects/test_projet_01/store/namespaces.dat b/RDF_Back/projects/test_projet_01/store/namespaces.dat
deleted file mode 100644
index b1ec9998..00000000
--- a/RDF_Back/projects/test_projet_01/store/namespaces.dat
+++ /dev/null
@@ -1 +0,0 @@
-nnf
\ No newline at end of file
diff --git a/RDF_Back/projects/test_projet_01/store/nativerdf.ver b/RDF_Back/projects/test_projet_01/store/nativerdf.ver
deleted file mode 100644
index fb467b15..00000000
--- a/RDF_Back/projects/test_projet_01/store/nativerdf.ver
+++ /dev/null
@@ -1 +0,0 @@
-5.2.2
\ No newline at end of file
diff --git a/RDF_Back/projects/test_projet_01/store/triples-posc.alloc b/RDF_Back/projects/test_projet_01/store/triples-posc.alloc
deleted file mode 100644
index 86b2a60a..00000000
Binary files a/RDF_Back/projects/test_projet_01/store/triples-posc.alloc and /dev/null differ
diff --git a/RDF_Back/projects/test_projet_01/store/triples-posc.dat b/RDF_Back/projects/test_projet_01/store/triples-posc.dat
deleted file mode 100644
index e5127a82..00000000
Binary files a/RDF_Back/projects/test_projet_01/store/triples-posc.dat and /dev/null differ
diff --git a/RDF_Back/projects/test_projet_01/store/triples-spoc.alloc b/RDF_Back/projects/test_projet_01/store/triples-spoc.alloc
deleted file mode 100644
index 86b2a60a..00000000
Binary files a/RDF_Back/projects/test_projet_01/store/triples-spoc.alloc and /dev/null differ
diff --git a/RDF_Back/projects/test_projet_01/store/triples-spoc.dat b/RDF_Back/projects/test_projet_01/store/triples-spoc.dat
deleted file mode 100644
index f80d38b3..00000000
Binary files a/RDF_Back/projects/test_projet_01/store/triples-spoc.dat and /dev/null differ
diff --git a/RDF_Back/projects/test_projet_01/store/triples.prop b/RDF_Back/projects/test_projet_01/store/triples.prop
deleted file mode 100644
index 49c07768..00000000
--- a/RDF_Back/projects/test_projet_01/store/triples.prop
+++ /dev/null
@@ -1,4 +0,0 @@
-#triple indexes meta-data, DO NOT EDIT!
-#Sat Mar 21 14:02:31 CET 2026
-triple-indexes=spoc,posc
-version=10
diff --git a/RDF_Back/projects/test_projet_01/store/txn-status b/RDF_Back/projects/test_projet_01/store/txn-status
deleted file mode 100644
index e69de29b..00000000
diff --git a/RDF_Back/projects/test_projet_01/store/values.dat b/RDF_Back/projects/test_projet_01/store/values.dat
deleted file mode 100644
index b89769d5..00000000
Binary files a/RDF_Back/projects/test_projet_01/store/values.dat and /dev/null differ
diff --git a/RDF_Back/projects/test_projet_01/store/values.hash b/RDF_Back/projects/test_projet_01/store/values.hash
deleted file mode 100644
index dcbe1e25..00000000
Binary files a/RDF_Back/projects/test_projet_01/store/values.hash and /dev/null differ
diff --git a/RDF_Back/projects/test_projet_01/store/values.id b/RDF_Back/projects/test_projet_01/store/values.id
deleted file mode 100644
index 15d34529..00000000
Binary files a/RDF_Back/projects/test_projet_01/store/values.id and /dev/null differ
diff --git a/RDF_Back/src/main/java/com/uspn/rdf_back/controllers/ProjectController.java b/RDF_Back/src/main/java/com/uspn/rdf_back/controllers/ProjectController.java
deleted file mode 100644
index 9545d819..00000000
--- a/RDF_Back/src/main/java/com/uspn/rdf_back/controllers/ProjectController.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package com.uspn.rdf_back.controllers;
-
-import com.uspn.rdf_back.dtos.*;
-import com.uspn.rdf_back.services.ProjectService;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.*;
-import java.util.Map;
-
-@RestController
-@RequestMapping("/projects")
-public class ProjectController {
-
- private final ProjectService projectService;
-
- public ProjectController(ProjectService projectService) {
- this.projectService = projectService;
- }
-
- @PostMapping("/open")
- public Map open(@RequestBody CreateProjectRequest req) {
- ProjectDto dto = projectService.openProject(req.getName(), req.isPersistent(), req.getDescription());
- 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 |