diff --git a/README.md b/README.md index a570f0f0e343652d75463f150735199dd850818d..7593ac8c05d211f95a19e7ed817b33439217de4a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,47 @@ -# ontology-to-synfony-vocabulary +# Ontology-to-synfony-vocabulary -```ps1 -ts-node index.ts -``` \ No newline at end of file +## Ce projet est un script permettant de sémantiser, au sens ontologique, une application Synfony + +### Description + +Ce projet, utilisé en conjonction d'une application Synfony, permet de créer un fichier de configuration pour API platform en mettant en relation les resources servies par l'API Synfony avec des resources décrites dans un ou plusieurs fichier(s) owl/rdf. + +Le programme est codé en typescript, et peut donc être `build` avec `npm run build`, et même être compilé dans une version exécutable avec l'utilitaire nexe et la commande `npm run make` ou `npm run make-linux`. Dans les deux cas, le programe est un CLI avec une aide. Un dockerfile est également présent pour contruire une image. + +Les paramètres attendus sont: + - **ontologyPath**: Chemin vers un fichier ou dossier contenant des ressources sémantiques + - **synfonyEntitiesPath**: Chemin vers un fichier contenant la liste des entités Synfony pleinement qualifié + - **outputPath**: Chemin vers le fichier de configuration .yaml pour APIplatform + + +```mermaid +sequenceDiagram + participant Fichier_OWL_RDF as Fichier OWL/RDF ou Dossier + participant Entites_PHP as Fichier Entités PHP Symfony + participant ETL_Program as Ontology-to-synfony-vocabulary + participant Fichier_Config as Fichier Configuration .yaml + + Fichier_OWL_RDF->>ETL_Program: Envoie des données OWL/RDF + Entites_PHP->>ETL_Program: Envoie des noms d'entités + ETL_Program->>Fichier_Config: Génère le fichier .yaml + Note right of ETL_Program: Traitement des données + Note right of Fichier_Config: Utilisé pour API Platform +``` +### Instructions + +L'utilisation final de ce projet est d'être utilisé en tant que job d'un processus de CI/CD du projet Synfony. Les prérequis sont: + - Un dépot, ou autre source, contenant des ressources sémantiques, dans un format supporté par la libraire `rdf-parse` + - Un projet Synfony, avec une commande pour généré la liste des entités avec l'autorité complète + - Un job gitlab / action github dans le projet Synfony qui récupère le contenu de ce dépôt et effectue le programme + +#### Pour les dévelopeurs + +Il est possible d'utiliser une librairie comme ts-node (installé globalement) pour rapidement déboger. La commande pour lancer le programme est alors: + +`ts-node ./index.ts --help` + +### Contenus + + - Le code principal se trouve dans le fichier index.ts et le dossier src/. + - Une série de tests se trouve dans le dosser /tests. + - Un exemple de code PHP pour la commande de liste des entités pleinement qualifié, ainsi qu'un exemple de job .gitlab minimal, est dans le dossier ./example. diff --git a/example/.gitlab-ci.sample.yaml b/example/.gitlab-ci.sample.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2944c89c106f2a1ec0738ee816a88ea7970fe6ed --- /dev/null +++ b/example/.gitlab-ci.sample.yaml @@ -0,0 +1,19 @@ +# Livraison du fichier de configuration de l'ontologie. +.deliver_onto_script: + - cd $PHP_DIR + - bin/console app:list-entities > ../list_entities_sf #export des entités sf + - cd .. + - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash # Install nvm + - export NVM_DIR="$HOME/.nvm" + - \. "$NVM_DIR/nvm.sh" # This loads nvm + - \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion + - nvm install 18.17.1 #@todo : utiliser une version majeure. Celle-ci est celle de ontology-to-synfony-vocabulary. + - echo "node version" + - node --version + - git clone https://gitlab.irstea.fr/pole-is/ontology-to-synfony-vocabulary + - cd ontology-to-synfony-vocabulary + - npm install # Installer les dépendances si nécessaire + - npm run build + - cd .. + - git clone https://gitlab.irstea.fr/pole-is/deepomics-ontology + - node ontology-to-synfony-vocabulary/dist/index.js deepomics-ontology/ontologies list_entities_sf rdf_resources.yaml \ No newline at end of file diff --git a/example/ListEntitiesCommand.php b/example/ListEntitiesCommand.php new file mode 100644 index 0000000000000000000000000000000000000000..68b13a377e8c1079d244c6b6e76f5509217b7b1a --- /dev/null +++ b/example/ListEntitiesCommand.php @@ -0,0 +1,48 @@ +<?php declare(strict_types=1); +/* + * Copyright (C) 2017-2021 IRSTEA + * All rights reserved. + */ + +// src/Command/ListEntitiesCommand.php + +namespace App\Command; + +use Doctrine\Persistence\ManagerRegistry; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class ListEntitiesCommand extends Command +{ + protected static $defaultName = 'app:list-entities'; + private $doctrine; + + public function __construct(ManagerRegistry $doctrine) + { + $this->doctrine = $doctrine; + parent::__construct(); + } + + protected function configure() + { + $this + ->setDescription('Lists all entities in the system with their full authority.') + ->setHelp('This command lists all entities in the system with their full authority.'); + } + + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + protected function execute(InputInterface $input, OutputInterface $output) + { + $entityManager = $this->doctrine->getManager(); + $metadata = $entityManager->getMetadataFactory()->getAllMetadata(); + + foreach ($metadata as $classMetadata) { + $output->writeln($classMetadata->getName()); + } + + return 0; + } +}