diff --git a/src/main/java/fr/inra/po2vocabmanager/MainApp.java b/src/main/java/fr/inra/po2vocabmanager/MainApp.java
index 70282848898503734b6e83c8770aa79cdf36f7b7..a9f0022e642cbd483990892719c64a6631f41458 100644
--- a/src/main/java/fr/inra/po2vocabmanager/MainApp.java
+++ b/src/main/java/fr/inra/po2vocabmanager/MainApp.java
@@ -1282,7 +1282,9 @@ public class MainApp extends Application implements Launcher  {
         // Au prealable :
         // - le jeu de donnees doit avoir ete publie
         // - le fichier de contrainte a du etre transmis (download)
-        
+
+        // Verification qu'un jeu de donnees est bien ouvert,
+        // et que ce jeu a bien ete publie.
         ArrayList<String> errorCantStartSValidation = new ArrayList<>();
         if(getDataControler().getCurrentData() == null) {
             errorCantStartSValidation.add("No dataset loaded");
@@ -1295,11 +1297,7 @@ public class MainApp extends Application implements Launcher  {
             }
         }
 
-
-
-
-        // Verification que le fichier de contraintes a bien ete transmis ?
-
+        // Message d'alerte en cas de probleme
         if (errorCantStartSValidation.size() > 0) {
             Alert alert = new Alert(AlertType.ERROR);
             alert.setTitle("Unable to start SHACL validation");
@@ -1368,12 +1366,12 @@ public class MainApp extends Application implements Launcher  {
 
                     long start = System.nanoTime();
                     String dataName = Tools.normalize(getDataControler().getCurrentData().getProjectFile().getNameProperty().getValue());
+
+                    String ontologyName = "";
+                    if(ontologyControler != null && ontologyControler.getCurrentOntology() != null)
+                        ontologyName = Tools.normalize(getOntologyControler().getCurrentOntology().getName().get());
+
                     Report r = RDF4JTools.startShaclValidation(dataName);
-                    //try{
-                    //    Thread.sleep(3000);
-                    //} catch (InterruptedException e){
-                    //    e.printStackTrace();
-                    //}
                     long finish = System.nanoTime();
                     long timeElapsed = (long)((finish - start)*0.000001);
 
@@ -1429,7 +1427,7 @@ public class MainApp extends Application implements Launcher  {
                     });
                                 
                     Tools.delProgress(ProgressPO2.ANALYSE);
-                } catch (RDFParseException e) {
+                } catch (Exception e) {
                     Tools.delProgress(ProgressPO2.ANALYSE);
                     e.printStackTrace();
                     Platform.runLater(() -> {
diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java
index 6a4704d82ba3fda32250ba688bf6af7d2c5dd538..e7deb82ecdea8c6faf94bec608065a74144a704c 100644
--- a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java
+++ b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java
@@ -568,27 +568,25 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
                         });
                     });
 
-                    MenuItem uploadSCHACLConstraints = new MenuItem("Upload SCHACL");
-                    uploadSCHACLConstraints.disableProperty().bind(Bindings.not(mainApp.getEditProperty()));
-                    uploadSCHACLConstraints.setGraphic(new ImageView(UITools.getImage("resources/images/file-export-16.png")));
-                    uploadSCHACLConstraints.setOnAction(event -> {
+                    MenuItem uploadSHACLConstraints = new MenuItem("Upload SHACL");
+                    uploadSHACLConstraints.disableProperty().bind(Bindings.not(mainApp.getEditProperty()));
+                    uploadSHACLConstraints.setGraphic(new ImageView(UITools.getImage("resources/images/file-export-16.png")));
+                    uploadSHACLConstraints.setOnAction(event -> {
                         ProjectFile projectFile = (ProjectFile) item.getFile();
                         Platform.runLater(() -> {
                             FileChooser fileChooser = new FileChooser();
-                            fileChooser.setTitle("Choose SCHACL Constraints File");
-                            fileChooser.setInitialFileName(projectFile.getNameProperty().get()+"_SCHACL_Constraints.xlsx");
-                            //fileChooser.setInitialFileName("shaclConstraints.xlsx");
+                            fileChooser.setTitle("Choose SHACL Constraints File");
                             fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Turtle file (*.ttl)", "*.ttl"));
-                            File schaclConstraintsFile = fileChooser.showOpenDialog(MainApp.primaryStage);
-                            if (schaclConstraintsFile != null) {
+                            File shaclConstraintsFile = fileChooser.showOpenDialog(MainApp.primaryStage);
+                            if (shaclConstraintsFile != null) {
                                 new Thread(() -> {
                                     Platform.runLater(() -> {
                                         try {
                                             String ID = Tools.normalize(projectFile.getNameProperty().get());
-                                            InputStream stream = new FileInputStream(schaclConstraintsFile);
+                                            InputStream stream = new FileInputStream(shaclConstraintsFile);
 
                                             long start = System.nanoTime();
-                                            RDF4JTools.updateShaclGraph(ID, stream);
+                                            RDF4JTools.updateDataShaclGraph(ID, stream, "Data");
                                             long finish = System.nanoTime();
                                             long timeElapsed = (long)((finish - start)*0.000001);
 
@@ -616,9 +614,9 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
                         });
                     });
 
-                    MenuItem downloadSCHACLConstraints = new MenuItem("Download SHACL");
-                    downloadSCHACLConstraints.setGraphic(new ImageView(UITools.getImage("resources/images/file-export-16.png")));
-                    downloadSCHACLConstraints.setOnAction(event -> {
+                    MenuItem downloadSHACLConstraints = new MenuItem("Download SHACL");
+                    downloadSHACLConstraints.setGraphic(new ImageView(UITools.getImage("resources/images/file-export-16.png")));
+                    downloadSHACLConstraints.setOnAction(event -> {
                         ProjectFile projectFile = (ProjectFile) item.getFile();
                         Platform.runLater(() -> {
                             String repositoryID = Tools.normalize(projectFile.getNameProperty().get());
@@ -626,20 +624,20 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
                             fileChooser.setTitle("Choose name for SHACL Constraints File");
                             fileChooser.setInitialFileName(repositoryID + "_SHACL_Constraints.ttl");
                             fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Turtle file (*.ttl)", "*.ttl"));
-                            File schaclConstraintsFile = fileChooser.showSaveDialog(MainApp.primaryStage);
-                            if (schaclConstraintsFile != null) {
+                            File shaclConstraintsFile = fileChooser.showSaveDialog(MainApp.primaryStage);
+                            if (shaclConstraintsFile != null) {
                                 new Thread(() -> {
                                     Platform.runLater(() -> {
                                         try {
-                                            OutputStream stream = new FileOutputStream(schaclConstraintsFile);
+                                            OutputStream stream = new FileOutputStream(shaclConstraintsFile);
 
-                                            RDF4JTools.downloadShaclGraph(repositoryID, stream);
+                                            RDF4JTools.downloadShaclGraph(repositoryID, stream,"Data");
 
                                             Alert okImport = new Alert(Alert.AlertType.INFORMATION);
                                             okImport.setGraphic(new ImageView(UITools.getImage("resources/images/valid.png")));
                                             okImport.setHeaderText(null);
                                             okImport.setTitle("Downloading SHACL file");
-                                            okImport.setContentText("Fichier téléchargé...");
+                                            okImport.setContentText("File downloaded...");
                                             okImport.initModality(Modality.APPLICATION_MODAL);
                                             okImport.initOwner(MainApp.primaryStage);
                                             okImport.showAndWait();
@@ -656,8 +654,8 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
                     menu.getItems().add(addProcess);
                     menu.getItems().add(exportProject);
                     menu.getItems().add(importProject);
-                    menu.getItems().add(uploadSCHACLConstraints);
-                    menu.getItems().add(downloadSCHACLConstraints);
+                    menu.getItems().add(uploadSHACLConstraints);
+                    menu.getItems().add(downloadSHACLConstraints);
                     break;
                 case PROCESS:
                     Menu newIti = new Menu("New Itinerary");
diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/VocabTreeCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/VocabTreeCell.java
index a96c0514c3c245e1a75ea502b990d7c45742d330..5f1512c21888b6abaeb9a420ae90bd040c921186 100644
--- a/src/main/java/fr/inra/po2vocabmanager/utils/VocabTreeCell.java
+++ b/src/main/java/fr/inra/po2vocabmanager/utils/VocabTreeCell.java
@@ -19,20 +19,26 @@
 package fr.inra.po2vocabmanager.utils;
 
 import fr.inra.po2vocabmanager.MainApp;
+import fr.inrae.po2engine.externalTools.RDF4JTools;
+import fr.inrae.po2engine.model.Ontology;
 import fr.inrae.po2engine.model.SkosScheme;
 import fr.inrae.po2engine.model.VocabConcept;
+import fr.inrae.po2engine.utils.Tools;
 import javafx.application.Platform;
 import javafx.beans.binding.Bindings;
 import javafx.event.EventHandler;
 import javafx.scene.control.*;
 import javafx.scene.control.cell.TextFieldTreeCell;
+import javafx.scene.image.ImageView;
 import javafx.scene.input.ClipboardContent;
 import javafx.scene.input.Dragboard;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.input.TransferMode;
 import javafx.scene.layout.VBox;
+import javafx.stage.FileChooser;
 import javafx.stage.Modality;
 
+import java.io.*;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
@@ -178,6 +184,88 @@ public class VocabTreeCell extends TextFieldTreeCell<VocabConcept> {
         if (empty || item == null) {
             setText(null);
             setGraphic(null);
+
+            ContextMenu menu = new ContextMenu();
+            
+            MenuItem uploadSHACLConstraints = new MenuItem("Upload SHACL");
+            uploadSHACLConstraints.disableProperty().bind(Bindings.not(mainApp.getEditProperty()));
+            uploadSHACLConstraints.setGraphic(new ImageView(UITools.getImage("resources/images/file-export-16.png")));
+            uploadSHACLConstraints.setOnAction(event -> {
+                Ontology onto = MainApp.getOntologyControler().getCurrentOntology();
+                Platform.runLater(() -> {
+                    FileChooser fileChooser = new FileChooser();
+                    fileChooser.setTitle("Choose SHACL Constraints File");
+                    fileChooser.setInitialFileName("constraints.ttl");
+                    fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Turtle file (*.ttl)", "*.ttl"));
+                    File shaclConstraintsFile = fileChooser.showOpenDialog(MainApp.primaryStage);
+                    if (shaclConstraintsFile != null) {
+                        new Thread(() -> {
+                            Platform.runLater(() -> {
+                                try {
+                                    String ID = Tools.normalize(onto.getName().get());
+                                    InputStream stream = new FileInputStream(shaclConstraintsFile);
+
+                                    RDF4JTools.updateOntologyShaclGraph(ID, stream, "Onto");
+
+                                    Alert okImport = new Alert(Alert.AlertType.INFORMATION);
+                                    okImport.setGraphic(new ImageView(UITools.getImage("resources/images/valid.png")));
+                                    okImport.setHeaderText(null);
+                                    okImport.setTitle("Uploading SHACL file");
+                                    okImport.setContentText("File transmitted...");
+                                    okImport.initModality(Modality.APPLICATION_MODAL);
+                                    okImport.initOwner(MainApp.primaryStage);
+                                    okImport.showAndWait();
+
+                                } catch (IOException ex) {
+                                    MainApp.logger.error(ex.getMessage());
+                                }
+                            });
+                        }).start();
+                    };
+                });
+            });
+            
+            MenuItem downloadSHACLConstraints = new MenuItem("Download SHACL");
+            downloadSHACLConstraints.setGraphic(new ImageView(UITools.getImage("resources/images/file-export-16.png")));
+            downloadSHACLConstraints.setOnAction(event -> {
+                Ontology onto = MainApp.getOntologyControler().getCurrentOntology();
+                Platform.runLater(() -> {
+                    String ID = Tools.normalize(onto.getName().get());
+                    FileChooser fileChooser = new FileChooser();
+                    fileChooser.setTitle("Choose name for SHACL destination constraints file");
+                    fileChooser.setInitialFileName(ID + "_SHACL_Constraints.ttl");
+                    fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Turtle file (*.ttl)", "*.ttl"));
+                    File shaclConstraintsFile = fileChooser.showSaveDialog(MainApp.primaryStage);
+                    if (shaclConstraintsFile != null) {
+                        new Thread(() -> {
+                            Platform.runLater(() -> {
+                                try {
+                                    OutputStream stream = new FileOutputStream(shaclConstraintsFile);
+
+                                    RDF4JTools.downloadShaclGraph(ID, stream, "Onto");
+
+                                    Alert okImport = new Alert(Alert.AlertType.INFORMATION);
+                                    okImport.setGraphic(new ImageView(UITools.getImage("resources/images/valid.png")));
+                                    okImport.setHeaderText(null);
+                                    okImport.setTitle("Downloading SHACL file");
+                                    okImport.setContentText("File downloaded...");
+                                    okImport.initModality(Modality.APPLICATION_MODAL);
+                                    okImport.initOwner(MainApp.primaryStage);
+                                    okImport.showAndWait();
+
+                                } catch (IOException ex) {
+                                    MainApp.logger.error(ex.getMessage());
+                                }
+                            });
+                        }).start();
+                    };
+                });
+            });
+
+            menu.getItems().add(uploadSHACLConstraints);
+            menu.getItems().add(downloadSHACLConstraints);
+
+            this.setContextMenu(menu);
         } else {
             setText(item.toString());
             setEditable(false);
diff --git a/src/main/java/fr/inra/po2vocabmanager/view/RootLayoutController.java b/src/main/java/fr/inra/po2vocabmanager/view/RootLayoutController.java
index 2613c50dcddbc14a54bd64f381a89a8b0a1242ab..a732581e80ae54b7f4b13c0325bb99d9b9f6c8f1 100644
--- a/src/main/java/fr/inra/po2vocabmanager/view/RootLayoutController.java
+++ b/src/main/java/fr/inra/po2vocabmanager/view/RootLayoutController.java
@@ -65,7 +65,7 @@ public class RootLayoutController {
     @FXML
     MenuItem itemPublish;
     @FXML
-    MenuItem itemSCHACLValidation;
+    MenuItem itemSHACLValidation;
     @FXML
     MenuItem itemSem;
     @FXML
@@ -101,8 +101,8 @@ public class RootLayoutController {
         itemOpen.setDisable(true);
         itemPublish.setDisable(true);
         itemPublish.setVisible(true);
-        itemSCHACLValidation.setDisable(true);
-        itemSCHACLValidation.setVisible(true);
+        itemSHACLValidation.setDisable(true);
+        itemSHACLValidation.setVisible(true);
         itemImportExport.setVisible(true);
         itemExportOnto.setDisable(true);
         itemImportOnto.setDisable(true);
@@ -135,7 +135,7 @@ public class RootLayoutController {
         itemPublish.textProperty().bind(Bindings.when(mainApp.onOntologyViewProperty()).then("Semantize & Publish ontology").otherwise("Semantize & Publish data"));
         itemPublish.disableProperty().bind(mainApp.getEditProperty().not());
 
-        itemSCHACLValidation.disableProperty().bind(mainApp.onDataViewProperty().not());
+        itemSHACLValidation.disableProperty().bind(mainApp.onDataViewProperty().not());
 
 //        itemImportExport.visibleProperty().bind(mainApp.onOntologyViewProperty());
         itemExportOnto.disableProperty().bind(mainApp.onOntologyViewProperty().not());
diff --git a/src/main/resources/fr/inra/po2vocabmanager/view/RootLayout.fxml b/src/main/resources/fr/inra/po2vocabmanager/view/RootLayout.fxml
index 73754c1296a5a7e4527cc45660fa407c6d86ea53..75dcf39400dd85534a61c60917d1375d993580b3 100644
--- a/src/main/resources/fr/inra/po2vocabmanager/view/RootLayout.fxml
+++ b/src/main/resources/fr/inra/po2vocabmanager/view/RootLayout.fxml
@@ -58,7 +58,7 @@
                   <MenuItem fx:id="itemReadMode" mnemonicParsing="false" onAction="#enterWriteMode" text="Read Mode" />
                   <MenuItem fx:id="addConceptScheme" mnemonicParsing="false" onAction="#newConceptScheme" text="New Concept Scheme" />
                   <MenuItem fx:id="itemPublish" mnemonicParsing="false" onAction="#publish" text="Semantize &amp; Publish" visible="false" />
-                  <MenuItem fx:id="itemSCHACLValidation" mnemonicParsing="false" onAction="#startSHACLValidation" text="Start SHACL Validation" />
+                  <MenuItem fx:id="itemSHACLValidation" mnemonicParsing="false" onAction="#startSHACLValidation" text="Start SHACL Validation" />
                   <Menu fx:id="itemImportExport" mnemonicParsing="false" text="Import/Export" visible="false">
                     <items>
                       <MenuItem fx:id="itemImportOnto" mnemonicParsing="false" onAction="#importOnto" text="Import" />
diff --git a/src/main/resources/resources/changelog.txt b/src/main/resources/resources/changelog.txt
index 59179ecf706111b01c814f0f46052c4fdc72083d..5b84b9c24a8b81b20d6013bbbe1e6841e2a3f23a 100644
--- a/src/main/resources/resources/changelog.txt
+++ b/src/main/resources/resources/changelog.txt
@@ -1,3 +1,6 @@
+ ------------------ NEXT ---------------------
+    * Enhancement (PO2-Tools/po2manager#86) : Ajout de la gestion des contraintes shacl sur les ontologies
+
  ------------------ V1.8.6.5 ---------------------
     * Bug Fix (PO2-Tools/po2manager#109) : L'arbre des concepts n'est pas toujours à jours après des copies / déplacements de concepts
     * Bug Fix (PO2-Tools/po2-engine#65) : Erreur de type sur certains tableaux lors de l'import d'un projet