Serialización

El Estándar de Datos de Contrataciones Abiertas proporciona un modelo de datos estructurados para capturar información en profundidad sobre todas las etapas del proceso de contratación.

La versión canónica actual de este modelo de datos es proporcionada por un Esquema JSON que describe nombres de campos, definiciones de campos y estructuras para los datos. El cumplimiento de los datos con el Estándar de Datos de Contrataciones Abiertas se evaluará en función de este esquema.

Sin embargo, hay muchos casos de uso en los que los publicadores y usuarios desearán trabajar con datos serializados en otros formatos. Por esta razón, la versión actual de OCDS soporta una serie de serializaciones secundarias que se basan en el esquema canónico. Estos no son actualmente componentes oficiales del estándar, pero están diseñados para apoyar a los implementadores en la provisión de datos accesibles a una gama de usuarios diferentes.

JSON

JSON significa Javascript Object Notation, y es un formato ampliamente utilizado para el intercambio de datos en la web. El lenguaje de esquema JSON proporciona herramientas de validación para trabajar con datos JSON.

Las serializaciones JSON válidas de los datos OCDS DEBEN seguir la especificación I-JSON (Internet JSON) de RFC7493 que requiere Codificación UTF-8 e introduce una serie de restricciones y recomendaciones para el manejo de números, objetos y fechas.

Generando un archivo JSON

La mayoría de los lenguajes de programación proporcionan herramientas para los datos de salida en un formato JSON.

Una gama de herramientas están disponibles para trabajar con JSON-Schema, incluyendo herramientas de validación y generación de formularios .

Consumir JSON

La mayoría de los lenguajes de programación proporcionan herramientas para leer JSON.

Existen varias bases de datos nativas JSON disponibles para trabajar directamente con grandes colecciones de documentos JSON y herramientas de línea de comandos como jq admiten consultas avanzadas y recuperación de datos con archivos JSON.

También hay una gama de herramientas genéricas que pueden convertir JSON en estructuras CSV planas, incluyendo:

  • JSON -> CSV - herramienta en línea para convertir documentos pequeños.

  • Open Refine - herramienta de escritorio que puede manejar documentos grandes y soporta manipulación avanzada de datos.

CSV

JSON se basa en una estructura de árbol, con elementos de datos anidados entre sí. Sin embargo, muchas personas están familiarizadas con datos tabulares, compuestos de columnas y filas. No existe una manera fácil de representar datos estructurados en una sola tabla. Sin embargo, proponemos dos modelos para que los publicadores adopten.

  • Tabla sencilla simplificada - para casos en los que no hay relaciones uno a muchos en los datos (por ejemplo, cada licitación tiene sólo una adjudicación y un contrato y cada uno tiene sólo una partida).

  • Multi-tabla - donde se requieren estructuras más avanzadas, pero donde es deseable poder trabajar con datos en diseños de hojas de cálculo

En cada caso, los campos son identificados por el JSON pointer a su equivalente JSON. Por ejemplo:

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

Existen herramientas en beta de código abierto para generar plantillas CSV planas y convertir en ambas direcciones entre hojas de cálculo JSON siguiendo estas plantillas. El validador OCDS incorpora esta herramienta y ofrecerá convertir archivos subidos a ella.

Tabla sencilla simplificada

Es posible representar una versión completa de entregas en una única fila plana de CSV utilizando punteros JSON completos para cada campo como encabezados.

Este enfoque generalmente sólo es apropiado para datos sin relaciones uno-a-muchos (por ejemplo, sólo un artículo por licitación y un premio y un contrato para cada proceso de licitación).

Sin embargo, es teóricamente posible representar una versión completa de entregas en una única fila plana de CSV usando punteros JSON completos para cada campo como encabezados. Para matrices, esto implica añadir el índice de la matriz a la ruta, como tender/item/0/id y tender/item/1/id como columnas separadas para representar cada uno de las artículos.

Por ejemplo, para representar una entrega de licitación con dos elementos, el archivo CSV incluiría:

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

El equivalente JSON de esto sería:

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

Aunque esto permite que los datos complejos se expresen en CSV plano, los usuarios necesitarán reconstruir la estructura para analizar los datos.

En su lugar, los datos con una relación de uno a muchos se pueden representar mediante una serialización de varias tablas.

Nota: Los archivos CSV de OCDS DEBEN ser codificados en UTF-8

Multi-tabla

La serialización de multi-tabla separa los objetos con relaciones de muchas a una (es decir, matrices) en sus propias tablas.

Tablas múltiples se pueden empaquetar juntas como las pestañas de una hoja de cálculo de Excel, o en una colección de archivos CSV.

Se puede encontrar un ejemplo de plantilla de multi-tabla en el repositorio de datos de muestra.

Para obtener más información sobre las serializaciones multi-tabla, consulte la documentación de la herramienta de aplanamiento.

Empaquetado de archivos con metadatos

Cualquiera que sea la serialización utilizada para Datos de Contrataciones Abiertas, un solo archivo puede contener una o más entregas y registros.

Los esquemas de paquetes de datos de entrega y registro describen los metadatos clave que deben proporcionarse para cualquier archivo que proporcione Datos de Contrataciones Abiertas. Esto incluye la publishedDate, publisher, uri para acceder al archivo y los detalles de licencia para el archivo.