Sérialisation

Le standard OCDS fournit un modèle de données structuré permettant de saisir de l'information en profondeur concernant toutes les étapes d'un processus de commande publique.

La version canonique actuelle de ce modèle de données est fournie par un schéma JSON Schema qui décrit des noms de champs, leur définition et les structures de données. La conformité des données avec le standard OCDS est évaluée vis-à-vis de ce schéma.

Cependant, dans de nombreux cas d'usage, les producteurs et les usagers de données souhaiteront travailler avec des données sérialisées dans d'autres formats. Pour cette raison, la version actuelle du standard OCDS accepte un certain nombre de sérialisations secondaires basées sur le schéma canonique. Il ne s'agit pas, à l'heure actuelle, de composantes officielles du standard, mais ces sérialisations sont conçues pour permettre à ceux qui le mettent en œuvre de fournir des données accessibles à des usagers différents.

JSON

JSON signifie Javascript Object Notation, et désigne un format largement utilisé pour l'échange de données sur le Web. Le langage JSON Schema fournit des outils de validation pour travailler avec des données en JSON.

Les sérialisations JSON valides des données OCDS ont besoin de suivre la spécification I-JSON (Internet JSON) de la RFC7493 qui impose l'encodage UTF-8 et introduit un certain nombre de contraintes et de recommandations pour traiter les nombres, les objets et les dates.

Générer du JSON

La plupart des langages de programmation proposent des outils pour exporter des données en JSON.

Une série d'outils sont disponibles pour travailler avec le JSON Schema, notamment des outils de validation et de génération automatique de formulaires.

Utiliser du JSON

La plupart des langages de programmation proposent des outils pour lire du JSON.

A number of JSON native databases are available for working directly with large collections of JSON texts, and command line tools such as jq support advanced query and data retrieval with JSON files.

Il y a également une palette d'outils généralistes qui peuvent convertir du JSON en structures CSV plates, notamment :

  • JSON -> CSV - online tool for converting small documents.

  • Open Refine - desktop tool that can handle large documents, and supports advanced data manipulation.

CSV

Le JSON est fondé sur une structure en arborescence, avec des éléments de données emboîtés les uns dans les autres. Cependant, beaucoup de gens ont plus l'habitude de travailler avec des données tabulaires, faites de lignes et de colonnes. Il n'y a pas de manière facile de représenter des données structurées dans une seule table. Cependant, nous proposons aux producteurs de données deux modèles à utiliser.

  • Une table simplifiée unique - pour les cas où il n'y a pas de relations un-à-beaucoup dans les données (par exemple, chaque appel d'offre correspond à un seul attributaire et un seul marché, et chaque marché ne porte que sur un seul bien ou service).

  • Multi-table - lorsque des structures plus complexes sont nécessaires, mais qu'il est souhaitable de travailler avec des données dans un tableur

In each case, fields are identified in CSV headers by their JSON Pointer. For example:

JSON

{
    "releases": [
        {
            "ocid": "ocds-a2ef3d01-1594121",
            "tag": "tender",
            "tender": {
                "id": "ocds-a2ef3d01-1594121/1",
                "items": [
                    {
                        "id": "1",
                        "description": "Standards development"
                    }
                ]
            }
        }
    ]
}

CSV

ocid

tag

tender/id

tender/items/id

tender/items/description

ocds-a2ef3d01-1594121

tender

ocds-a2ef3d01-1594121/1

1

Standards development

Beta open source tooling exists for generating flat CSV OCDS templates, and converting in both directions between JSON spreadsheets following these templates. The OCDS Data Review Tool incorporates this tooling and will offer to convert files uploaded to it.

Une table unique simplifiée

Il est possible de représenter une instance complète dans une seule ligne d'un fichier CSV en utilisant les pointeurs JSON de chaque champ comme noms de colonnes.

Généralement, cette approche n'est pertinente que s'agissant de données ne comportant pas de relations un-à-plusieurs (par exemple, chaque appel d'offres ne porte que sur un bien ou service, n'a qu'un attributaire et ne se traduit que par un seul contrat signé).

Théoriquement, il est cependant possible de représenter une instance complète dans une seule ligne de fichier CSV en utilisant les pointeurs JSON complets de chaque champ, comme noms de colonne. Pour des listes, cela implique de rajouter l'index de la liste au chemin, de sorte que tender/item/0/id et tender/item/1/id constituent des colonnes distinctes, représentant chacun des livrables.

Par exemple, pour représenter une instance portant sur un appel d'offres avec deux livrables, le fichier CSV inclurait :

ocid

tag

tender/id

tender/items/0/id

tender/items/0/description

tender/items/1/id

tender/items/1/description

ocds-a2ef3d01-1594121

tender

ocds-a2ef3d01-1594121/1

1

Standards development

2

Documentation authoring

L'équivalent en JSON serait :

{
    "releases": [
        {
            "ocid": "ocds-a2ef3d01-1594121",
            "tag": "tender",
            "tender": {
                "id": "ocds-a2ef3d01-1594121/1",
                "items": [
                    {
                        "id": "1",
                        "description": "Standards development"
                    },
                    {
                        "id": "2",
                        "description": "Documentation authoring"
                    }
                ]
            }
        }
    ]
}

Bien que cela permette à des données complexes d'être présentées dans des fichiers CSV plats, les usagers devront reconstruire la structure afin de pouvoir analyser les données.

À la place, pour représenter un ensemble complexe de données, on peut utiliser la sérialisation multi-tables

Encodage CSV

Remarque : les fichiers OCDS CSV doivent être encodés en UTF-8 ou Windows-1252.

Multi-table

La sérialisation multi-table isole les objets avec des relations un-à-plusieurs (par exemple des listes) dans leurs propres tables.

Plusieurs tables peuvent être regroupées sous forme d'onglets d'une feuille de calcul Excel ou d'une collection de fichiers CSV.

Un exemple de modèle multi-table est disponible dans le dépôt de données d'exemples.

For further information on multi-table serializations please see the flatten tool documentation.

Empaqueter des fichiers avec leurs méta-données

Quelle que soit la sérialisation utilisée pour les données Open Contracting, un même fichier peut contenir plusieurs instances et plusieurs archives.

Les schémas de paquets de données des instances et des archives décrivent les méta-données clés qui doivent être fournies pour tout fichier contenant des données Open Contracting. On y trouve notamment la publishedDate, le publisher, l'uri à laquelle on peut accéder au fichier, et la licence sous laquelle est placé le fichier.