inseefr / magma Goto Github PK
View Code? Open in Web Editor NEWMetadata management API
License: MIT License
Metadata management API
License: MIT License
Ticket 1394-adapter-get-composant-id (trello maintenance RMèS) : adapt GET/composant/{id}
Ticket 1386-adapter-get-organisations-id (trello maintenance RMèS) : adapt GET/organisations/{id}
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.
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
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
A dataset can have zero, one or many distributions. The json response should behave accordingly.
Ticket 1389-Ajouter-valeur-propriété-dc:creator (trello maintenance RMèS) : add property dc:creator
pour tous les end-points avec un id
Les tests doivent appeler la méthode à tester (CodeListImpl.getCodesListWithoutCodes)
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
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.
sur l'exemple ci-dessus on devrait récupérer dsd0512 dans le json plutôt que dsd1000
Ticket 1395-adapter-get-structure-id (trello maintenance RMèS) : adapt GET/structure/{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"
}
]
}
]
La liste comporte des doublons de certaines séries (par exemple s1049).
Ticket 1414 -ajouter-get-dataset-id-distributions (trello maintenance RMèS) : add get/datasets/{id}/distributions
For “codesEquivalent”w ejust need an array with codes instead of codes and uris
Ajout de champs pour compléter la description des datasets
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
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
totot
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
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
Actuellement, sur Magma il n'y a a pas de modèles pour CodeList et Code. Il faudrait en créer pour pouvoir mieux manipuler ces objets
@flo7894 nous venons de déployer tous les devs réalisés pour Magma par @HugoBouttes . Mais pour l'instant les endpoints retournent rien, car nous manquons de données.
C'est à de les fournir ? notamment les datasets. (car pour les structures et composants, le module n'est pas encore en production)
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
On a besoin de faire une distinction entre la mise à jour des données et la mise à jour de la description du jeux de données.
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 :
Si ces triplets sont présents, on aura dans le json du concept la propriété suivante à la racine
{
...
"name": "ABCD"
}
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)
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
A faire pour tous les end-points concernés par un identifiant
En lien avec la carte #135
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:
A few lines in the readme at least would help
Ticket 1413-adapter-get-datasets-id (trello maintenance RMèS) : adapt get/datasets/{id}
Ticket 1418-adapter-get-organisation-id (trello maintenance RMèS) : adapt get/organisation/{id}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.