Giter Site home page Giter Site logo

magma's People

Contributors

adrienbrunpro avatar alicela avatar bulotf avatar evargalo avatar fbibonne avatar franckco avatar gtansndil avatar hugosndil avatar jeromembourgeois avatar michaelc67 avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

magma's Issues

Modifier le nombre d'observations d'un dataset

Ajouter sur magma une méthode /dataset/{id}/numberOfObservations pour permettre aux applications clientes de modifier le nombre d'observations d'un jeu de données.
Une modification de la description du jeu de données entraine la modification de la date de mise à jour du catalogRecord associé au jeu de données

La mise à jour des triplets RDF peut être réalisée avec la requête suivante

PREFIX dcat: <http://www.w3.org/ns/dcat#>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX insee: <http://rdf.insee.fr/def/base#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

WITH <http://rdf.insee.fr/graphes/catalogue>
DELETE {
    ?catalogRecord dcterms:modified ?date .
    ?dataset insee:numObservations ?numObs .
}    
INSERT {
    ?catalogRecord dcterms:modified "2023-12-15T13:18:00.000"^^xsd:dateTime .
    ?dataset insee:numObservations "10"^^xsd:integer .
} 
WHERE {
    ?catalogRecord foaf:primaryTopic ?dataset .
    ?dataset dcterms:identifier ?id .
    ?dataset rdf:type dcat:Dataset .
    FILTER(?id = 'jd0600')
    ?catalogRecord dcterms:modified ?date .
    OPTIONAL{?dataset insee:numObservations ?numObs .}
}

Le graphe dans le WITH est à mettre en paramètre applicatif de manière à pouvoir utiliser d'autres graphes si besoin.
La date de modification du CatalogRecord (2023-12-15T13:18:00.000 dans l'exemple) devrait être le moment où la méthode api est appelée par le client.
Le nombre d'observations (10 dans l'exemple) et l'identifiant du jeu de données (j0600 dans l'exemple) sont des paramètres de la méthode que le client appelant doit fournir.

Le nombre d'observation peut être laissé vide, auquel cas il faut enlever ?dataset insee:numObservations "10"^^xsd:integer . de la requête pour supprimer le triplet existant de la base.
Le nombre d'observation doit être un entier.

L'identifiant ne peut pas être vide.

Ajouter le lignage dans get/dataset/{id}

L'objectif est de faire des liens entre les datasets qui sont construits les uns à partir des autres, et éventuellement de stocker une description de la transformation effectuée

dataset-avec-lignage.txt

Normalement on a un lien du jeu de données résultat de la transformation vers le jeu de données sources avec le predicat prov:wasDerivedFrom. Et on veut enregistrer plus d'informations sur la transformation on aura un blank node lié au jeu de données résultat avec prov:qualifiedDerivation

Dans le json, on aurait donc un objet

'wasDerivedFrom' : {
   "datasets" : [ les identifiants des datasets ],
   "description" : "la description de la transformation"
}

On peut éventuellement avoir plusieurs jeux de données sources. il faudrait alimenter l'array avec prov:wasDerivedFrom
La présence d'un blank node n'est pas obligatoire, dans ce cas on mettrait "description": [ ] dans la sortie

add property dc:creator

Ticket 1389-Ajouter-valeur-propriété-dc:creator (trello maintenance RMèS) : add property dc:creator

Adapter get/dataset/{id} au changement sur ProcessStep

  • InseeFr/Bauhaus#577
  • #150 : erreur 500
    Actuellement on gère en base avec une string multillingue :
    <uriDataSet> insee:processStep "inseeApi"@en, "inseeApi"@fr .

On va basculer sur une liste de code, on aura donc en base :
<uriDataSet> insee:processStep <http://bauhaus/codes/etapeProcessus/IA>

<http://bauhaus/codes/etapeProcessus/IA> a skos:Concept, <http://bauhaus/codes/concept/EtapeProcessus> ;
skos:notation "IA" ;
skos:prefLabel "inseeApi"@fr , "inseeApi"@en ;
skos:inScheme <http://bauhaus/codes/etapesProcessus> ;
.

du coup il faudra garder la même sortie en json à partir de ces nouveaux enregistrements

etapes-processus.zip

Corriger la récupération des structures sur get/dataset/{id}

Avec les données en recette, l récupération des structures retourne systématiquement dsd1000 dans le json. Cela me semble venir de getDataSetById_catalogueStructures.ftlh

SELECT DISTINCT  ?dsd ?structureId

FROM <${DATASETS_GRAPH}>
FROM <${STRUCTURES_GRAPH}>

WHERE {

		?uri a dcat:Dataset ;
		dcterms:identifier "${ID}" ;

		OPTIONAL {?structure dcterms:identifier ?structureId .
		?structure skos:notation ?dsd .}

}

la requête retourne plein d'echo quand on l'exécute alors qu'elle ne devrait en retourner qu'un. A priori il manque ?uri insee:structure ?structure dans l'optional pour avoir le résultat voulu.

jd0701.zip

sur l'exemple ci-dessus on devrait récupérer dsd0512 dans le json plutôt que dsd1000

Corriger les champs "creator" et "spatialTemporal" sur get/dataset/{id}

Dans la sortie json on a actuellement :

 "spatialTemporal": {
    "spatialTemporal": "2020"
  }

Il faudrait remplacer par

 "spatialTemporal": "2020"

Pour le champ creator on a :

"creator": [
    "Insee"
  ]

Il faudrait remplacer par (ce qui est fait pour publisher, mais en gardant l'array parce qu'on a potentiellement plusieurs creator)

"creator": [
 {
    "id": "Insee",
    "label": [
      {
        "lang": "fr",
        "content": "Institut national de la statistique et des études économiques"
      },
      {
        "lang": "en",
        "content": "National Institute of Statistics and Economic Studies"
      }
    ]
  }
]

Ajouter get/structure/{id}/sliceKeys

On a besoin d'une méthode supplémentaire pour récupérer les éventuelles structures de "slice" associées à une structure de cube.
La méthode prend en paramètre l'identifiant d'une structure et retourne en réponse un array dont chaqye élément représente une structure de slice

Un exemple de données et de réponse json sont en pj

slice.zip

La requête ci-dessous permet de récupérer les informations voulues

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX qb: <http://purl.org/linked-data/cube#>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

SELECT ?sliceKey ?label_fr ?label_en ?typeSliceKey (GROUP_CONCAT(?componentId; separator=", ") AS ?componentIds)
FROM <http://rdf.insee.fr/graphes/structures>
FROM <http://rdf.insee.fr/graphes/composants>
FROM <http://rdf.insee.fr/graphes/codes>
WHERE {
	?structure dcterms:identifier "dsd0995" ;
    	qb:sliceKey ?sliceKey .
    
    ?sliceKey rdf:type qb:SliceKey ;
    	qb:componentProperty/dcterms:identifier ?componentId .
    
    OPTIONAL{?sliceKey rdfs:label ?label_fr .
    FILTER(lang(?label_fr) = "fr")}
    
    OPTIONAL{?sliceKey rdfs:label ?label_en .        
    FILTER(lang(?label_en) = "en")}

    OPTIONAL{?sliceKey dcterms:type/skos:notation ?typeSliceKey}   
    
} GROUP BY ?sliceKey ?label_fr ?label_en ?typeSliceKey

'dsd0995', 'fr' et 'en' seront des paramètres

Adapt get/concept/{id}

  • ajouter un e à "Publié", l’atttibut statutValidation qualifie l’état d’une ressource en général (concept, nomenclature, série, indicateur…)
  • mettre en majuscule le j de "dateMiseAjour"

technique : refactor de Datasets

  • enum pour ValidationState
  • découpage de DataSetModelSwagger (en fonction des considérations métier) : objet actuellement trop gros
  • revisite des tests

Adapter GET/listeCode/{id}

Il semble y avoir un problème sur la méthode.
L'ensemble des codes de la listes devrait être listés comme un array avec une propriété "codes", pour chaque code en cas de présence d'un prédicat skos:exactMatch (ou skos:closeMatch) du code vers un code alternatif, on devrait avoir un array sur le code avec la propriété "codesEquivalents"

En pj un exemple de fichier trig d'une code liste, et le fichier json qu'on attendrait en retour
JSON-recette-liste-2023-09-22.txt
TRIG-recette-liste-2023-09-22.txt

OPTIONAL sur les séries et les opérations

sur l’api magma, les requêtes sur les séries ou les opérations ne retournent de résultat que lorsqu’il y a un timbre associé => optional sur l’attribut timbre à ajouter dans la requête

Mettre à jour get/datasets suite à l'introduction des catalogRecord

Les éléments peuvent être récupérés avec la requête suivante

PREFIX dcat: \<http://www.w3.org/ns/dcat#>
PREFIX dcterms: \<http://purl.org/dc/terms/>
PREFIX foaf: \<http://xmlns.com/foaf/0.1/>
PREFIX insee: \<http://rdf.insee.fr/def/base#>
PREFIX rdf: \<http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT ?id ?uri ?titreLg1 ?titreLg2 ?dateMiseAJour ?statutValidation ?dateCreation
FROM \<http://rdf.insee.fr/graphes/catalogue>
WHERE { 
    ?uriCatalogRecord rdf:type dcat:CatalogRecord .
    ?uriCatalogRecord foaf:primaryTopic ?uri .
    ?uri rdf:type dcat:Dataset .
    ?uri dcterms:identifier ?id .
    ?uri dcterms:title ?titreLg1 .
    	FILTER (LANG(?titreLg1) = 'fr')
    ?uri dcterms:title ?titreLg2 .
    	FILTER (LANG(?titreLg2) = 'en')
    ?uriCatalogRecord dcterms:modified ?dateMiseAJour .
    ?uriCatalogRecord dcterms:created ?dateCreation .
    ?uri insee:validationState ?statutValidation .
} 

le graphe dans le from est à mettre en paramètre applicatif de manière à pouvoir utiliser d'autres graphes si besoin.

j'ai enlevé les optional de la requête précédente car ?dateMiseAJour, ?dateCreation, ?statutValidation correspondent à des triplets qui seront posés automatiquement, l'utilisateur n'a pas la main dessus depuis le front.
s'il y a des occurrences où ils sont absents en base c'est une incohérence dans les données.

un catalogue pouvant référencer d'autres ressources que des datasets, il faut vérifier que ?uriCatalogRecord est une instance de la classe CatalogRecord et ?uri une instance de la classe Dataset

ajouter une propriété "name" get/concept/{id}

Il s'agit d'un champ optionnel sur les concepts pour gérer les règles de nommage pour les projets de diffusion.

Au niveau rdf on aura :

  • <uriConcept> adms:identifier <uriADMSIdentifiant> dans le graphe des définitions de concept
  • et dans un graphe dédié aux identifications alernatives (http://rdf.insee.fr/graphes/adms)
    • <uriADMSIdentifiant> a adms:Identifier
    • <uriADMSIdentifiant> skos:notation "ABCD"

Si ces triplets sont présents, on aura dans le json du concept la propriété suivante à la racine
{
...
"name": "ABCD"
}

mettre le timbre (dc:creator) en optional dans les services swagger sur les séries

Pour les services magma sur les séries /operations/series et /operations/series/{id}} mettre un optional pour le propriétaire, afin de retourner avec ces services y compris les séries qui n'ont pas encore de propriétaire renseigné dans RMéS,

( a termes toutes les séries devront avoir un propriétaire du fait que cette métadonnée est maintenant obligatoire pour les nouvelles séries et que l'on va compléter, coté métier, cette métadonnée sur les séries existantes)

Modifier les champs obligatoires pour getDatasetByID

Actuellement le swagger retourne une erreur 500 si l'un des triplets suivants est absent :
<uriDataset> dct:temporal ?o
<uriDataset> insee:spatialTemporal ?o
<uriDataset> insee:subtitle ?o
<uriDataset> dcat:landingPage ?o
<uriDataset> dcat:temporalResolution ?o

Il faudrait les passer en optionnel

Request: add some documentation

I haven't found a docs folder or a wiki in this project.

Could you add a bit of documentation to explain what this project is about? for instance:

  • What is the purpose of the API?
  • Which API/systems does it interact with?

A few lines in the readme at least would help

Clean project

  • clean pom :
    • Remove unused dependecies
    • Update old dependencies
    • Variabalise versions
    • Remove duplicate dependencies
  • clean files, directories
  • Activate tests
  • Fix Sonar issues critical and blockers

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.