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

Issue 271 - reprise de la documentation #273

Merged
merged 9 commits into from
Feb 3, 2022
22 changes: 22 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,30 @@ It relies on the following configuration file [eclipse/formatter-config.xml](ecl

To configure eclipse to use this code formatter, see "Preferences window, go to Java -> Code Style -> Formatter -> Import".

## Continuous Integration (CI)

Note that CI is configured throw [GitHub Actions](https://github.com/IGNF/validator/actions/workflows/main.yml).
mborne marked this conversation as resolved.
Show resolved Hide resolved

It relies on [.github/workflows/main.yml](.github/workflows/main.yml) which :

* Install OpenJDK 11 and maven
* Install ogr2ogr
* Run tests throw [.ci/build-openjdk11.sh](.ci/build-openjdk11.sh)

You may run `bash .ci/build-openjdk11.sh` to ensure that source code is formatted, build code and run tests.

## Create releases
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, i like that section


* Ensure that you are on the good branch and that all code is committed and push (`git status`)
mborne marked this conversation as resolved.
Show resolved Hide resolved
* Run `mvn release:prepare` and follow instructions to automatically create tags and update version in pom.xml files
* Build JAR and packages for the new tag

```bash
git checkout v4.2.5
make package
```

* Create release from github tag with the following binary files : `validator-cli/target/validator-cli.jar`, `ign-validator_{VERSION}_all.deb` and `ign-validator-{VERSION}-1.noarch.rpm`



106 changes: 27 additions & 79 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,102 +24,50 @@ Le paramétrage s'effectue à l'aide de [fichiers JSON décrivant des arborescen

## Principe de fonctionnement

Le schéma suivant illustre le [Principe de fonctionnement du validateur de document](doc/principe.md) :
Le schéma suivant illustre le [principe de fonctionnement du validateur de document](doc/principe.md) :
mborne marked this conversation as resolved.
Show resolved Hide resolved

![Working principle](doc/img/principe.jpg)
mborne marked this conversation as resolved.
Show resolved Hide resolved

## Principales fonctionnalités

| Groupe | Fonctionnalité |
|---------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Modèle de données | Modélisation d'arborescence de fichiers : Fichiers attendus (optionnel ou oubligatoire) avec mise en correspondance chemin et modèle de table) |
| Modèle de données | Modélisation de la structure d'une table (spatiale ou non) par définit de la liste de la liste des attributs |
| Modèle de données | Modélisation d'un attribut de table par définition du type, de valeurs autorisées, d'une expression régulière, etc.) |
| Validation d'un dossier | Contrôle de la présence de dossier et de fichiers dans une arborescence suivant des expressions régulières |
| Validation d'une table | Lecture des formats CSV, Shapefile, MapInfo, GML (possibilité d'étendre aux formats supportés par ogr2ogr de GDAL) |
| Validation d'une table | Validation de l'encodage des chaînes de caractères (problème encodage UTF-8, LATIN1, etc.), détection des caractères non affichable et simplification pour un meilleur support par les différentes charsets et polices de caractères |
| Validation d'un attribut géométrique | Validation du type géométrique avec conversion automatique entre géométrie simple et multiple quand la données le permet |
| Validation d'une fiche de métadonnées | Validation des fiches de métadonnées suivants les principales contraintes INSPIRE |
| Rapport d'erreur | Production d'un rapport d'erreur au format JSON avec des erreurs porteuses d'un code d'erreur, d'un message et d'un niveau de gravité (bloquant pour l'intégration des données en base?) |
| Plugin CNIG | Extension permettant de traiter des aspects spécifiques aux standards CNIG PLU, POS, CC, PSMV, SCOT et SUP (consigne de saisie des métadonnées, IDURBA, TYPEREF, etc.) |
| Plugin DGPR | Extension permettant de traiter des aspects spécifiques à la validation du standard COVADIS "Directive innondation v2.0" (en particulier, la topologie des différentes couches) |
| Normalisation des données | Production de données données conformes au modèle de validation pour intégration en base de données (format CSV) |
| Normalisation des données | Conversion des fiches de métadonnées XML dans un modèle pivot JSON |
* Validation d'une arborescence de fichiers en fonction d'un modèle de document.
* Validation des tables en fonction d'un modèle de table.
* Validation des fiches de métadonnées.
* Production d'un rapport d'erreur au format JSON.
* Production de données normalisées (pour agrégation et diffusion).
* Validation métier à l'aide de [plugins](doc/plugins.md) (CNIG pour GpU, DGPR pour TRI,...) pour les contrôles qui sont pas formalisés dans le modèle de validation.

## Documentation technique

* [Exemples de modèles de document (french)](validator-core/src/test/resources/config-json/README.md)
* [Modélisation des données (french)](validator-core/src/main/resources/schema/README.md)
* [Liste des codes d'erreurs (json)](validator-core/src/main/resources/error-code.json)
* [Projection supportées (json)](validator-core/src/main/resources/projection.json)
* [Metadata modelization (english)](doc/metadata.md)
* [Characters validation (english)](doc/characters/index.md)
* [plugin-cnig - validation des champs IDURBA](doc/plugin-cnig/idurba.md)
* [plugin-cnig - Validation des mots clés en fonction des CSMD CNIG](doc/plugin-cnig/keywords.md)
## Utilisation

## Cas d'utilisation
Le validateur se présente sous la forme d'un exécutable java (`validator-cli.jar`) utilisable en ligne de commande. Il n'offre pas d'interface graphique car il a vocation à être utilisé pour la mise en oeuvre de services web tel le [Géoportail de l'Urbanisme](https://www.geoportail-urbanisme.gouv.fr) offrant ces interfaces.
mborne marked this conversation as resolved.
Show resolved Hide resolved

Ce programme a été développé dans le cadre du [géoportail de l'urbanisme](https://www.geoportail-urbanisme.gouv.fr) pour la validation des [standards CNIG](https://www.geoportail-urbanisme.gouv.fr/standard/).
Les techniciens peuvent se référer à la documentation [utilisation du validateur en ligne de commande](doc/cli.md).

## Dépendances
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ça ne devrait pas faire partie du readme, c'est décrit dans doc/cli.md avec en plus les détails pour ogr2ogr dans un fichier à part (peut-être pas nécessaire ou alors à remplacer par un fichier qui englobe toutes les dépendances doc/prerequisites.md)


Les exécutables systèmes ci-après sont requis pour l'exécution du programme :

* java >= 11
* [ogr2ogr >= v2.3.0](doc/dependencies/ogr2ogr.md) : Utilisé pour lire et convertir les données en entrée dans un format pivot avant validation (CSV)
* [geotools](doc/dependencies/geotools.md)

## Compilation

Vous pouvez télécharger `validator-cli.jar` correspondant à la [dernière release](https://github.com/IGNF/validator/releases) où construire ce `.jar` avec la procédure suivante :

```bash
mvn package
# Voir validator-cli/target/validator-cli.jar
```

## Principales commandes

### Affichage de la liste des commandes disponibles

```bash
java -jar validator-cli/target/validator-cli.jar --help
```

### document_validator - validation d'un document (dossier)

Exécuter la commande suivante pour récupérer les paramètres disponibles :
Les dépendances java telle [GeoTools](doc/dependencies/geotools.md) sont décrites dans les fichiers [pom.xml](pom.xml) et intégrées dans l'exécutable JAVA.

```bash
java -jar validator-cli.jar document_validator --help
```

Voir [https://github.com/IGNF/validator-example](https://github.com/IGNF/validator-example) pour des exemples d'utilisation.

Remarques :

* Le chemin d'accès à `ogr2ogr` peut être spécifié :
* A l'aide d'une propriété : `java -Dogr2ogr_path=/path/to/ogr2ogr -jar validator-cli.jar ...`
* A l'aide d'une variable d'environnement : `OGR2OGR_PATH=/path/to/ogr2ogr java -jar validator-cli.jar`
* `java -jar validator-cli.jar --plugins=gpu ...` est utilisé dans le cadre du Géoportail de l'Urbanisme


### metadata_to_json - conversion de métadonnées XML dans un modèle pivot simplifié JSON

**ATTENTION : Le modèle pivot JSON n'est pas standardisé et est suspectible d'évoluer**

```bash
java -jar validator-cli/target/validator-cli.jar metadata_to_json \
-i validator-core/src/test/resources/metadata/01.xml \
-o validator-core/src/test/resources/metadata/01-expected.json
```

Exemple : [01.xml](validator-core/src/test/resources/metadata/01.xml) -> [01.json](validator-core/src/test/resources/metadata/01-expected.json)
## Documentation technique

Les principaux documents sont les suivants :

## Extensibilité
* [Modélisation des données](validator-core/src/main/resources/schema/README.md)
* [Exemples de modèles de document](validator-core/src/test/resources/config-json/README.md)
* [Utilisation du validateur en ligne de commande](doc/cli.md) pour une utilisation directe.
* [Principe de fonctionnement du validateur de document](doc/principe.md)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

retirer de document

* [Principe de fonctionnement des plugins](doc/plugins.md)
* [Liste des codes d'erreurs (JSON)](validator-core/src/main/resources/error-code.json)
* [Projection supportées (JSON)](validator-core/src/main/resources/projection.json)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Projections*


Le validateur permet l'ajout qui plugin qui vont exécuter des tâches à différentes étapes de la validation :
Les documents ci-après traitent des problématiques particulières :

* Avant la mise en correspondance des fichiers et du modèle (ex : modification d'extension)
* Avant la validation (ex : détection de l'encodage des fichiers à partir des métadonnées)
* Après la validation (ex : receuil de métadonnées sur les données validées, contrôles supplémentaires, etc.)
* [Metadata (english)](doc/metadata.md)
* [Characters validation (english)](doc/characters.md)
* [plugin-cnig - validation des champs IDURBA](doc/plugin-cnig/idurba.md)
* [plugin-cnig - Validation des mots clés en fonction des CSMD CNIG](doc/plugin-cnig/keywords.md)

39 changes: 39 additions & 0 deletions doc/cli.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@

# Utilisation du validateur en ligne de commande

## Pré-requis
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

soit tout mettre dans un fichier prerequisites, soit ramener les explications ogr2ogr ici.


* Exécutable java de OpenJDK 11 (`java --version` doit fonctionner et mentionner une version java 11 ou supérieure)
* Exécutable [ogr2ogr de GDAL](dependencies/ogr2ogr.md) (`ogr2ogr --version` doit fonctionner et mentionner une version supportée)

## Installation du validateur

Pour chaque version, les livrables sont attachés à une [release sur github.com](https://github.com/IGNF/validator/releases).

Vous pouvez télécharger le fichier `validator-cli.jar` pour la dernière release et tester à l'aide de la commande `java validator-cli.jar version` qui affichera la version du validateur.

## Paramétrage

Les paramètres sont gérés sous forme de variables d'environnement :

| Nom | Description | Valeur par défaut |
| -------------- | ---------------------------------------- | ----------------- |
| `OGR2OGR_PATH` | Chemin vers l'exécutable ogr2ogr de GDAL | "ogr2ogr" |
| `HTTP_PROXY` | ex : http://proxy:3128 | |
| `HTTPS_PROXY` | ex : http://proxy:3128 | |
| `NO_PROXY` | localhost,demo.localhost | |


## Principales commandes

| Commande | Description |
| ----------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| `--help` | Affiche la liste des commandes disponibles |
| `version` | Affiche la version de l'exécutable validator-cli.jar (ex : `4.2.5`, `4.2.6-SNAPSHOT`,...) |
| [document_validator](cli/document_validator.md) | Valide un document en fonction d'un modèle de document |
| `projection_list` | Exporte la liste des projections supportées au format JSON. |
| `error_config` | Exporte la liste des modèles d'erreur au format JSON. |
| `read_url` | Lecture du contenu d'une URL (pour debug des problèmes de proxy et de certificat) |
mborne marked this conversation as resolved.
Show resolved Hide resolved
| [metadata_to_json](cli/metadata_to_json.md) | Conversion d'un fiche de métadonnées XML (ISO19115) dans un modèle simplifié au format JSON. |
mborne marked this conversation as resolved.
Show resolved Hide resolved
| `cnig_extract_idgest` | Extraction de la valeur de IDGEST à partir d'un fichier SERVITUDE (moissonnage des SUP sur GpU) |
mborne marked this conversation as resolved.
Show resolved Hide resolved

46 changes: 46 additions & 0 deletions doc/cli/document_validator.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@

## document_validator - validation d'un document

## Affichage de l'aide de la commande

Exécuter la commande suivante pour récupérer la liste des paramètres disponibles :

```bash
java -jar validator-cli.jar document_validator --help
```

## Exemple d'utilisation avec les données PCRS

Pour valider le fichier "GeoVendee_LeTallud-StGemme.gml" dans le dossier "document-test" en fonction du modèle [CNIG_PCRS_v2.0](https://ignf.github.io/validator/validator-core/src/test/resources/config-json/CNIG_PCRS_v2.0/document.json), on appellera par exemple la commande suivante :

```bash
java -jar validator-cli.jar document_validator \
--report-format jsonl \
--model https://ignf.github.io/validator/validator-core/src/test/resources/config-json/CNIG_PCRS_v2.0/document.json \
--input document-test \
--output validation \
--srs EPSG:3947 \
--normalize
```

Les fichiers produits seront les suivants :

| Fichier | Description |
| ----------------------------------------------- | --------------------------------------------------------------------------------------- |
| `./validation/` | Le répertoire de résultat de la validation |
| `./validation/validation.jsonl` | Le rapport de validation |
| `./validation/document-info.json` | Les informations sur le documents validés (comptages, emprises,...) |
| `./validation/document_database.db` | La base de données temporaire de validation (pour contrôle d'unicité, de référence,...) |
| `./validation/document-test/DATA/{NomType}.csv` | Les données normalisées pour une éventuelle livraison à un entrepot de diffusion |
| `./validator-debug.log` | Les logs du validateur java |


## Remarques

La conversion des fichiers au format CSV est réalisées sous forme de fichier "companions" avec des extensions dédiées (`.vrows` et `.vtabs`) dans le dossier à valider :

* Pour un fichier `./document-test/TRONCON_ROUTE.shp`, on notera la présence d'un fichier CSV `./document-test/TRONCON_ROUTE.vrows` contenant le résultat de la conversion du Shapefile en CSV.
* Pour un fichier GML `./document-test/GeoVendee_LeTallud-StGemme.gml` contenant plusieurs collections, on notera la présence d'un dossier `./document-test/GeoVendee_LeTallud-StGemme.vtabs` contenant le résultat de la conversion du GML en CSV.

Ces conversions sont réalisées à l'aide de [ogr2ogr de GDAL](../dependencies/ogr2ogr.md). L'utilisation d'extension dédiées facilite principalement une nouvelle exécution du validateur sur un dossier.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Attention au lien si le doc ogr2ogr à part disparait ou est déplacé

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Vu, mais je pense qu'on sera potentiellement amené à détailler les commandes appelées


21 changes: 21 additions & 0 deletions doc/cli/metadata_to_json.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@

# metadata_to_json

## Description

Conversion de métadonnées XML dans un modèle pivot simplifié au format JSON.

## Exemple d'utilisation

Pour convertir [01.xml](../../validator-core/src/test/resources/metadata/01.xml) en [01-expected.json](../../validator-core/src/test/resources/metadata/01-expected.json) :

```bash
java -jar validator-cli.jar metadata_to_json \
-i validator-core/src/test/resources/metadata/01.xml \
-o validator-core/src/test/resources/metadata/01-expected.json
```

## Remarques

* Le modèle pivot est une simplification du modèle ISO 19915 se concentrant sur les éléments utilisés dans les profiles INSPIRE et CNIG.
* **ATTENTION : Ce modèle pivot JSON n'est pas standardisé et est susceptible d'évoluer**
16 changes: 13 additions & 3 deletions doc/dependencies/geotools.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# geotools
# GeoTools
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comme pour ogr2ogr, peut-être n'est il pas utile d'en faire un fichier à part et on peut le mettre dans un gros fichier de prérequis.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Vu, mais si ça te va, je conserve en l'état pour l'instant.


## Relation to java version
## Description

See [Geotools - Java Install](http://docs.geotools.org/latest/userguide/build/install/jdk.html#) to get information about java version support.
[GeoTools](https://geotools.org/) is mainly used to manipulate projection.

## Projection

Expand All @@ -11,3 +11,13 @@ Coordinate order behavior differs between usage of `gt-epsg-hsql` or `gt-epsg-wk
There is no way to manage standard lat,lon for EPSG:4326 with `gt-epsg-wkt`.

So, `gt-epsg-hsql` is used as `java -Dorg.geotools.referencing.forceXY=true` may allow non standard lon,lat order.

## Relation to java version

As the validator requires Java 11, GeoTools 21.x and above is supported.

See [Geotools - Java Install](http://docs.geotools.org/latest/userguide/build/install/jdk.html#) for more details.




20 changes: 18 additions & 2 deletions doc/dependencies/ogr2ogr.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# ogr2ogr
# ogr2ogr from GDAL

## Description

`ogr2ogr` from `gdal-bin` is used to convert input data to UTF-8 encoded CSV with WKT geometries.
[ogr2ogr](https://gdal.org/programs/ogr2ogr.html) from [GDAL](https://gdal.org/index.html) is used to convert input data to UTF-8 encoded CSV with WKT geometries.

Version **2.3.0** or more is required as it allows uniform charset handling for input data.

Expand All @@ -14,3 +14,19 @@ Version **2.3.0** or more is required as it allows uniform charset handling for

* Between GDAL 1.x and 2.x, GDAL introduce a regression in WKT precision management while converting to CSV (OGR_WKT_PRECISION is a global precision, not a number of decimals). Meanwhile, coordinate accuracy is better with GDAL 2.x.
* Between GDAL 2.2 and 2.3, GDAL introduce a regression while converting LATIN1 TAB to CSV. Since GDAL 2.3.0, output CSV is UTF-8 encoded according to charset declaration in TAB files.

## Setup

* Official documentation : [gdal.org - Download / Binaries](https://gdal.org/download.html#binaries)
* Windows : [OSGeo4W](https://www.osgeo.org/projects/osgeo4w/)
* Debian/Ubuntu :

```bash
# for newer versions :
# sudo apt-add-repository ppa:ubuntugis/ppa
sudo apt-get update
sudo apt-get install gdal-bin
ogr2ogr --version
```


Binary file removed doc/img/class-diagram.dia
Binary file not shown.
Binary file removed doc/img/class-diagram.jpeg
Binary file not shown.
Loading