From 609199dadcea9cfbcdee79c5eaac33f386426199 Mon Sep 17 00:00:00 2001 From: Pierlou Date: Tue, 27 Aug 2024 16:19:35 +0200 Subject: [PATCH] feat: initial commit --- .github/workflows/check_integrity.yml | 19 +++++++ .github/workflows/integrity_check.py | 10 ++++ CHANGELOG.md | 7 +++ LICENSE.md | 77 +++++++++++++++++++++++++++ README.md | 38 ++++++++++++- exemple-valide.json | 9 ++++ requirements.txt | 2 + schema.json | 36 +++++++++++++ 8 files changed, 197 insertions(+), 1 deletion(-) create mode 100755 .github/workflows/check_integrity.yml create mode 100755 .github/workflows/integrity_check.py create mode 100755 CHANGELOG.md create mode 100755 LICENSE.md create mode 100755 exemple-valide.json create mode 100755 requirements.txt create mode 100755 schema.json diff --git a/.github/workflows/check_integrity.yml b/.github/workflows/check_integrity.yml new file mode 100755 index 0000000..910a644 --- /dev/null +++ b/.github/workflows/check_integrity.yml @@ -0,0 +1,19 @@ +name: Vérification de la cohérence des versions dans tous les champs du schéma + +on: + push: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - run: python .github/workflows/check_integrity.py \ No newline at end of file diff --git a/.github/workflows/integrity_check.py b/.github/workflows/integrity_check.py new file mode 100755 index 0000000..2c39895 --- /dev/null +++ b/.github/workflows/integrity_check.py @@ -0,0 +1,10 @@ +import json +from jsonschema import validators, validate + +with open("schema..json", "r") as f: + schema_data = json.load(f) +validators.validator_for(schema_data).check_schema(schema_data) + +with open("exemple-valide.json", "r") as f: + data = json.load(f) +validate(instance=data, schema=schema_data) diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100755 index 0000000..7b4af0b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changements + +Ce fichier répertorie les changements entre différentes versions du schéma. + +## Version 0.1.0 - 2024-01-01 + +Publication initiale. \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md new file mode 100755 index 0000000..6c6d91d --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,77 @@ +# LICENCE OUVERTE 2.0 / OPEN LICENCE 2.0 + +## « Réutilisation » de l'« Information » sous cette licence + +Le « Concédant » concède au « Réutilisateur » un droit non exclusif et gratuit de libre « Réutilisation » de l'« Information » objet de la présente licence, à des fins commerciales ou non, dans le monde entier et pour une durée illimitée, dans les conditions exprimées ci-dessous. + +**Le « Réutilisateur » est libre de réutiliser l'« Information » :** + +- de la reproduire, la copier, +- de l‘adapter, la modifier, l‘extraire et la transformer, pour créer des « Informations dérivées », des produits ou des services, +- de la communiquer, la diffuser, la redistribuer, la publier et la transmettre, +- de l'exploiter à titre commercial, par exemple en la combinant avec d'autres informations, ou en l'incluant dans son propre produit ou application. + +**Sous réserve de :** + +- mentionner la paternité de l'« Information » : sa source (au moins le nom du « Concédant ») et la date de dernière mise à jour de l'« Information » réutilisée. + +Le « Réutilisateur » peut notamment s'acquitter de cette condition en renvoyant, par un lien hypertexte, vers la source de «l'Information» et assurant une mention effective de sa paternité. +Par exemple : *« Ministère de xxx - Données originales téléchargées sur http://www.data.gouv.fr/fr/datasets/xxx/, mise à jour du 14 février 2017 »*. + +Cette mention de paternité ne confère aucun caractère officiel à la « Réutilisation » de l'« Information », et ne doit pas suggérer une quelconque reconnaissance ou caution par le « Concédant », ou par toute autre entité publique, du « Réutilisateur » ou de sa « Réutilisation ». + +## « Données à caractère personnel » + +L‘ « Information » mise à disposition peut contenir des « Données à caractère personnel » pouvant faire l'objet d'une « Réutilisation ». Si tel est le cas, le « Concédant » informe le « Réutilisateur » de leur présence. L' « Information » peut être librement réutilisée, dans le cadre des droits accordés par la présente licence, à condition de respecter le cadre légal relatif à la protection des données à caractère personnel. + +## « Droits de propriété intellectuelle » + +Il est garanti au « Réutilisateur » que les éventuels « Droits de propriété intellectuelle » détenus par des tiers ou par le « Concédant » sur l'« Information » ne font pas obstacle aux droits accordés par la présente licence. + +Lorsque le « Concédant » détient des « Droits de propriété intellectuelle » cessibles sur l'« Information », il les cède au « Réutilisateur » de façon non exclusive, à titre gracieux, pour le monde entier, pour toute la durée des « Droits de propriété intellectuelle », et le « Réutilisateur » peut faire tout usage de l'« Information » conformément aux libertés et aux conditions définies par la présente licence. + +## Responsabilité + +L' « Information » est mise à disposition telle que produite ou reçue par le « Concédant », sans autre garantie expresse ou tacite que celles prévues par la présente licence. L'absence de défauts ou d'erreurs éventuellement contenues dans l'« Information », comme la fourniture continue de l'« Information » n'est pas garantie par le « Concédant ». Il ne peut être tenu pour responsable de toute perte, préjudice ou dommage de quelque sorte causé à des tiers du fait de la « Réutilisation ». + +Le « Réutilisateur » est seul responsable de la « Réutilisation » de l'« Information ». + +La « Réutilisation » ne doit pas induire en erreur des tiers quant au contenu de l'« Information », sa source et sa date de mise à jour. + +## Droit applicable + +La présente licence est régie par le droit français. + +## Compatibilité de la présente licence + +La présente licence a été conçue pour être compatible avec toute licence libre qui exige au moins la mention de paternité et notamment avec la version antérieure de la présente licence ainsi qu'avec les licences « Open Government Licence » (OGL) du Royaume-Uni, « Creative Commons Attribution » (CC-BY) de Creative Commons et « Open Data Commons Attribution » (ODC-BY) de l'Open Knowledge Foundation. + +## Définitions + +Sont considérés, au sens de la présente licence comme : + +- Le **« Concédant »** : toute personne concédant un droit de « Réutilisation » sur l'« Information » dans les libertés et les conditions prévues par la présente licence +- L'**« Information »** : + - toute information publique figurant dans des documents communiqués ou publiés par une administration mentionnée au premier alinéa de l'article L.300-2 du CRPA ; + - toute information mise à disposition par toute personne selon les termes et conditions de la présente licence. +- La **« Réutilisation »** : l'utilisation de l'« Information » à d'autres fins que celles pour lesquelles elle a été produite ou reçue. +- Le **« Réutilisateur »** : toute personne qui réutilise les « Informations » conformément aux conditions de la présente licence. +- Des **« Données à caractère personnel »** : toute information se rapportant à une personne physique identifiée ou identifiable, pouvant être identifiée directement ou indirectement. Leur « Réutilisation » est subordonnée au respect du cadre juridique en vigueur. +- Une **« Information dérivée »** : toute nouvelle donnée ou information créées directement à partir de l'« Information » ou à partir d'une combinaison de l'« Information » et d'autres données ou informations non soumises à cette licence. +- Les **« Droits de propriété intellectuelle »** : tous droits identifiés comme tels par le Code de la propriété intellectuelle (notamment le droit d'auteur, droits voisins au droit d'auteur, droit sui generis des producteurs de bases de données…). + +## À propos de cette licence + +La présente licence a vocation à être utilisée par les administrations pour la réutilisation de leurs informations publiques. Elle peut également être utilisée par toute personne souhaitant mettre à disposition de l'« Information » dans les conditions définies par la présente licence + +La France est dotée d'un cadre juridique global visant à une diffusion spontanée par les administrations de leurs informations publiques afin d'en permettre la plus large réutilisation. + +Le droit de la « Réutilisation » de l'« Information » des administrations est régi par le code des relations entre le public et l'administration (CRPA). + +Cette licence facilite la réutilisation libre et gratuite des informations publiques et figure parmi les licences qui peuvent être utilisées par l'administration en vertu du décret pris en application de l'article L.323-2 du CRPA. + +Etalab est la mission chargée, sous l'autorité du Premier ministre, d'ouvrir le plus grand nombre de données publiques des administrations de l'État et de ses établissements publics. Elle a réalisé la Licence Ouverte pour faciliter la réutilisation libre et gratuite de ces informations publiques, telles que définies par l'article L321-1 du CRPA. + +Cette licence est la version 2.0 de la Licence Ouverte. + +Etalab se réserve la faculté de proposer de nouvelles versions de la Licence Ouverte. Cependant, les « Réutilisateurs » pourront continuer à réutiliser les informations qu'ils ont obtenues sous cette licence s'ils le souhaitent. \ No newline at end of file diff --git a/README.md b/README.md index 9f28211..75511ab 100644 --- a/README.md +++ b/README.md @@ -1 +1,37 @@ -# jsonschema-template \ No newline at end of file +# Template de départ pour Json Schema + +Ce dépôt contient les fichiers nécessaires pour démarrer la création d'un dépôt pour un schéma [Json Schema](https://json-schema.org/). + +## Utiliser ce template + +- Si vous créez votre dépôt sur GitHub, il vous suffit d'appuyer sur le bouton vert "Use this template". Consultez [la documentation](https://help.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-repository-from-a-template) pour plus d'infos ; +- Si votre projet sera hébergé ailleurs (par exemple Gitlab), vous pouvez cloner ce répertoire ou télécharger les fichiers correspondants. Utilisez le bouton "Clone or download". + +## Fichiers disponibles + +Ce dépôt contient un ensemble de fichiers utiles pour un dépôt d'un schéma [Json Schema](https://json-schema.org/). + +- [`CHANGELOG.md`](CHANGELOG.md) contient la liste des changements entre les différentes versions de votre schéma ; +- [`exemple-valide.json`](exemple-valide.json) est un fichier json d'exemple conforme par rapport au schéma décrit dans `schema.json` ; +- [`LICENSE.md`](LICENSE.md) est le fichier de licence du dépôt. Nous recommandons d'utiliser la [Licence Ouverte](https://www.etalab.gouv.fr/licence-ouverte-open-licence), cette licence est recommandée par l'administration française pour le partage de données et de documents ; +- [`README.md`](README.md) est le fichier que vous lisez actuellement. À terme, il devra présenter votre schéma ; +- [`requirements.txt`](requirements.txt) liste les dépendances Python nécessaires pour effectuer des tests en intégration continue sur votre dépôt ; +- [`schema.json`](schema.json) est le schéma au format Json Schema. + +### Intégration continue + +Ce dépôt est configuré pour utiliser de l'intégration continue, si vous utilisez GitHub. À chaque commit, une suite de tests sera lancée via [GitHub Actions](https://github.com/features/actions) afin de vérifier : + +- que votre schéma est valide à la spécification Json Schema ; +- que vos fichiers d'exemples sont conformes au schéma. + +Si vous n'utilisez pas GitHub, vous pouvez lancer ces tests sur votre machine ou sur un autre service d'intégration continue comme Gitlab CI, Jenkins, Circle CI, Travis etc. Consultez la configuration utilisée dans [`.github/workflows/test.yml`](.github/workflows/test.yml). + + +## Documentation + +Pour vous aider dans la construction de votre dépôt, nous vous recommandons de vous référer à : + +- [Le guide à destination des producteurs de schéma](https://guides.data.gouv.fr/guides-open-data/guide-qualite/maitriser-les-schemas-de-donnees) +- [La documentation de schema.data.gouv.fr](https://schema.data.gouv.fr) +- [La spécification Json Schema](https://json-schema.org/) \ No newline at end of file diff --git a/exemple-valide.json b/exemple-valide.json new file mode 100755 index 0000000..683c3e4 --- /dev/null +++ b/exemple-valide.json @@ -0,0 +1,9 @@ +{ + "productId": 1, + "productName": "An ice sculpture", + "price": 12.5, + "tags": [ + "cold", + "ice" + ] +} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100755 index 0000000..5a7592e --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +json +jsonschema \ No newline at end of file diff --git a/schema.json b/schema.json new file mode 100755 index 0000000..ae907fe --- /dev/null +++ b/schema.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://example.com/product.schema.json", + "title": "Product", + "description": "A product from Acme's catalog", + "type": "object", + "properties": { + "productId": { + "description": "The unique identifier for a product", + "type": "integer" + }, + "productName": { + "description": "Name of the product", + "type": "string" + }, + "price": { + "description": "The price of the product", + "type": "number", + "exclusiveMinimum": 0 + }, + "tags": { + "description": "Tags for the product", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "uniqueItems": true + } + }, + "required": [ + "productId", + "productName", + "price" + ] +} \ No newline at end of file