Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Erreurs lors du moissonnage de catalogues DCAT (hors Dido) #9

Open
streino opened this issue Dec 7, 2022 · 1 comment
Open

Erreurs lors du moissonnage de catalogues DCAT (hors Dido) #9

streino opened this issue Dec 7, 2022 · 1 comment
Assignees
Labels
bug Something isn't working
Milestone

Comments

@streino
Copy link
Contributor

streino commented Dec 7, 2022

J'ai des erreurs sur les moissonnages DCAT testés hors Dido.

Data.gouv

2022-12-07 13:32:18,731 DEBUG [ckanext.dcat.harvesters.rdf] In DCATRDFHarvester gather_stage
2022-12-07 13:32:18,734 DEBUG [ckanext.dcat.harvesters.base] Getting file https://www.data.gouv.fr/fr/organizations/ministere-de-la-transition-ecologique/catalog.xml
...
2022-12-07 13:32:26,738 DEBUG [ckanext.dcat.harvesters.rdf] In DCATRDFHarvester import_stage
2022-12-07 13:32:26,830 ERROR [ckanext.ecospheres.dcat.harvester] Erreur lors du traitement du champ territory: expected string or bytes-like object
2022-12-07 13:32:26,858 DEBUG [ckanext.harvest.model] Create validation Error: {'Titre': 'Valeur manquante'}
...
2022-12-07 13:32:37,203 DEBUG [ckanext.harvest.logic.action.update] Notifications: All:False On error:False Errors:96

Géocatalogue

2022-12-07 13:37:44,685 DEBUG [ckanext.dcat.harvesters.rdf] In DCATRDFHarvester gather_stage
2022-12-07 13:37:44,688 DEBUG [ckanext.dcat.harvesters.base] Getting file http://www.geocatalogue.fr/www/dcat/665c9410d957711375d014ec350091ff/catalog_1.rdf
...
2022-12-07 13:37:52,646 DEBUG [ckanext.dcat.harvesters.rdf] In DCATRDFHarvester import_stage
2022-12-07 13:37:52,705 ERROR [ckanext.ecospheres.dcat.harvester] Erreur lors du traitement du champ territory: expected string or bytes-like object
2022-12-07 13:37:52,726 DEBUG [ckanext.harvest.model] Create validation Error: {'Titre': 'Valeur manquante', 'Mots-clés': 'Le mot-clé "territoire à risques importants d\'inondation" ne peut contenir que des lettres minuscules, des chiffres ou les symboles : -_.'}
...
2022-12-07 13:38:02,506 DEBUG [ckanext.harvest.logic.action.update] Notifications: All:False On error:False Errors:99

Il semble qu'il y a au moins 3 erreurs différentes :

  • Échec lorsque le champ territory est manquant.
  • Problème de gestion de title.
  • Problème de gestion de free_tags avec des caractères spéciaux.
@streino streino added the bug Something isn't working label Dec 7, 2022
@alhyss
Copy link
Contributor

alhyss commented Dec 9, 2022

Concernant territory.

  1. Je ne vois pas de mapping/calcul à partir des métadonnées pour ce champ. Ça aurait été dans cette partie de la fonction parse_dataset), mais il n'y a rien. C'est un manque. Lorsque la propriété dct:spatial est présente et qu'on y trouve un ou plusieurs URI du code géographique de l'INSEE ou du vocabulaire européen des territoires administratifs (ou un label permettant de reconnaître un de ces URI), il est possible d'en déduire les territoires correspondants en allant interroger les tables de synonymes des vocabulaires. Elle n'a pas encore été réécrite pour interroger des données en base et pas en JSON, mais c'est la méthode VocabularyJSONReader.get_ecospheres_territory qui s'en charge. À titre de référence, le traitement serait assez proche de ce que j'ai écrit pour les métadonnées INSPIRE.
  2. Aujourd'hui (et comme cela devra effectivement toujours être le cas lorsque le ou les territoires n'ont pas pu être déduits des métadonnées), c'est la méthode DCATfrRDFHarvester.before_create qui donne une valeur à la propriété, en récupérant les territoires associés à l'organisation. Et elle plante sur l'exécution de la fonction re.match avec une erreur TypeError: expected string or bytes-like object si, dans l'extrait de code suivant, territories_codes est nul, ce qui arrivera s'il n'y avait pas de territoire associé à l'organisation.
                    territories_codes=self._get_territory(org)
                    res=re.match(r'{(.*)}',territories_codes)
    Il est acceptable pour une organisation de ne pas avoir de territoire. Même s'il est possible que cela change à l'avenir, c'est aujourd'hui le cas pour les organisations à compétence nationale. Il faut consolider le code pour s'assurer qu'il n'y a pas d'erreur dans ce cas.
  3. Accessoirement :
    • Je n'ai pas bien compris pourquoi cette opération avait lieu quand la propriété spatial n'est pas définie et pas quand la propriété territory n'est pas définie.
                 spatial=dataset_dict.get("spatial",None) 
                 if not spatial:
    • Il serait sans doute préférable d'utiliser un validateur pour ça, plutôt que d'implémenter exactement le même mécanisme dans tous les moissonneurs ? Je le ferai lorsque je reprendrai le mapping INSPIRE.
    • Je ne comprends pas pourquoi on se retrouve à utiliser re.match et str.split sur la liste des territoires alors que c'est un dump JSON qui a seulement besoin d'être désérialisé...

@alhyss alhyss added this to the v1.0 milestone Dec 12, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants