Especificación Normativa de Nodos DataMesh Bolivia (ODKF v0.2)
Versión: 0.2 — Especificación Oficial Unificada
Fecha: 2026-09-07
Estado: Estándar Normativo
OKF (Open Knowledge Format) es un estándar abierto, agnóstico y amigable tanto para humanos como para agentes de Inteligencia Artificial para representar conocimiento: metadatos, contexto narrativo e interoperabilidad semántica alrededor de datos y sistemas.
ODKF (Open Data Knowledge Format) es la extensión oficial de OKF para el ecosistema DataMesh. Enlaza narrativas contextuales con esquemas sintácticos duros (DataPackages, W3C DCAT, OpenAPI, Spring Boot docs y CWL CommandLineTool), garantizando interoperabilidad semántica, linaje auditable y consultas analíticas federadas.
1. Motivación y Principios
Los sistemas tradicionales de catálogos de datos sufren de dos extremos:
1. Silos cerrados o pesados: Exigen registros centralizados, bases de datos complejas y tooling propietario.
2. Ambigüedad y alucinaciones: Documentación informal en wikis que los modelos de lenguaje (LLM) no pueden convertir en consultas de software confiables.
OKF/ODKF resuelve esto bajo la premisa: "Si puedes usar cat y git, puedes operar ODKF".
Principios Rectores:
- Legible sin herramientas: Archivos Markdown UTF-8 limpios con frontmatter YAML estándar.
- Interoperabilidad Semántica (Contexto): Anclaje ontológico explícito mediante vocabularios W3C (SKOS, Wikidata, Schema.org).
- Interoperabilidad Sintáctica (Contratos Duros): Definición explícita de esquemas de datos (Frictionless DataPackage, DCAT), servicios invocables (OpenAPI, Spring Boot
/v3/api-docs) y tareas batch ejecutables (CWL CommandLineTool). - Gobernanza y Privacidad por Diseño: Los repositorios públicos solo almacenan metadatos y esquemas. Los microdatos pesados residen externamente y las consultas no autenticadas se restringen a estadísticas agregadas.
- Trazabilidad Criptográfica (Integridad): Verificación de procedencia mediante huellas SHA-256 y versionado Git.
2. Terminología
- Knowledge Bundle: Unidad de distribución. Directorio autocontenido de documentos de conocimiento y datos.
- Concept Document: Documento atómico
.mdque describe un activo de datos, servicio, métrica o política. - Concept ID: Ruta relativa del documento dentro del bundle sin extensión
.md(ej.indicadores/pobreza). - Semantic Anchor (
skos): URI canónica hacia una ontología externa para eliminar ambigüedad. - Syntactic Contract (
contracts): Declaración técnica de ejecución para datos estáticos (datapackage,dcat), APIs (openapi,springdoc) o tareas computacionales (cwl,cli_tool). - Lineage (
lineage): Registro de procedencia computacional: fuentes (source), transformaciones (transformations) y hash de integridad SHA-256.
3. Estructura de un Bundle ODKF
mi_bundle/
├── index.md # Opcional. Índice del directorio para revelación progresiva.
├── log.md # Opcional. Registro cronológico de cambios (ISO 8601).
├── datasets/ # Directorio temático
│ ├── censo_poblacion.md # Concepto de datos
│ └── calidad_aire.md
├── services/
│ └── etl_diario.md # Concepto de servicio / tarea batch
└── concepts/
└── ref_departamentos.md # Glosario / tesauro semántico
Archivos Reservados
index.md: Lista y describe los conceptos del directorio para descubrimiento jerárquico.log.md: Bitácora histórica de modificaciones en orden descendente.
4. Especificación del Documento de Concepto (Frontmatter + Body)
Cada documento .md (excepto index.md y log.md) se divide en:
1. YAML Frontmatter: Delimitado por ---.
2. Markdown Body: Narrativa explicativa para humanos y agentes.
4.1 Campos del Frontmatter YAML
---
# --- Metadatos Generales (OKF Base) ---
type: dataset # REQUERIDO. Tipo de concepto (dataset, catalog, service, indicator, playbook)
title: Censo Nacional de Población # RECOMENDADO. Nombre legible
description: Microdatos anonimizados # RECOMENDADO. Resumen en una sola línea
resource: https://datos.gob.bo/censo # OPCIONAL. URI del recurso original
tags: [demografia, censo, hogares] # OPCIONAL. Etiquetas de búsqueda
timestamp: 2026-05-01T00:00:00Z # OPCIONAL. Última modificación ISO 8601
# --- Interoperabilidad Semántica (ODKF v0.2) ---
skos: # REQUERIDO en ODKF. Anclajes ontológicos universales
- http://www.wikidata.org/entity/Q39825 # Censo
- https://schema.org/GovernmentData
dimensions: # OPCIONAL. Dimensiones para análisis OLAP
- departamento
- municipio
- año
# --- Interoperabilidad Sintáctica / Contratos de Ejecución (ODKF v0.2) ---
contracts: # REQUERIDO para activos de datos y servicios
- type: datapackage # Datos estáticos (Frictionless / Table Schema)
path: datapackage.json
- type: openapi # Servicios web REST / Spring Boot docs
path: https://api.censo.gob.bo/v3/api-docs
- type: cwl # Tareas batch / scripts ejecutables
path: tasks/etl_limpieza.cwl.json
# --- Linaje y Trazabilidad Criptográfica (ODKF v0.2) ---
lineage:
source:
- url: https://fuente.ine.gob.bo/censo_raw.csv
transformations:
- tool: scripts/clean_data.py
type: script
hash: sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
version: 1.2.0
updated_at: 2026-05-01T12:00:00Z
---
# Metodología y Calidad de Datos
Narrativa contextual detallada. Explica supuestos estadísticos, advertencias de uso,
definiciones operativas de variables y procedimientos de anonimización.
## Consultas de Ejemplo
```sql
SELECT departamento, COUNT(*) as total_hogares
FROM censo_poblacion_hogares
GROUP BY departamento;
---
## 5. Tipos de Contratos Sintácticos Soportados
El bloque `contracts` desacopla la narrativa del formato físico:
| Tipo (`type`) | Estándares Compatibles | Propósito | Adaptador SDK |
| :--- | :--- | :--- | :--- |
| `datapackage` | Frictionless DataPackage, CSV dialect | Tablas físicas, columnas tipadas, restricciones y `x-policy`. | `DataPackageContractAdapter` |
| `dcat` | W3C DCAT v2/v3, DCAT-AP | Catálogos gubernamentales y distribuciones multipartición. | `DcatContractAdapter` |
| `openapi` | OpenAPI v3, Swagger, Springdoc (`/v3/api-docs`) | Endpoints REST, parámetros de consulta y schemas de respuesta. | `OpenApiContractAdapter` |
| `cwl` / `cli_tool` | Common Workflow Language, `CommandLineTool` | Tareas batch ejecutables, mapeo de argumentos CLI y salidas generadas. | `CwlCliContractAdapter` |
---
## 6. Política de Gobernanza Zero-Microdata
Para evitar la filtración involuntaria de datos sensibles, los recursos tabulares en `datapackage` o `dcat` pueden declarar `x-policy`:
- `allow_all`: Acceso público irrestricto (datos agregados o de referencia).
- `zero_microdata`: Restringe consultas a funciones estadísticas agregadas (`COUNT`, `AVG`, `SUM`, `MIN`, `MAX`, `GROUP BY`). Bloquea `SELECT *` para identidades públicas no autenticadas.
- `deny`: Oculto para accesos públicos; solo disponible para roles de administración interna.
---
## 7. Conformidad y Verificación
Un bundle es conforme a **OKF/ODKF v0.2** si:
1. Todo archivo `.md` (salvo `index.md` y `log.md`) tiene frontmatter YAML parseable.
2. Contiene el campo obligatorio `type`.
3. Para datasets ODKF, incluye al menos una URI semántica en `skos` y al menos un contrato en `contracts`.
4. Los hashes declarados en `lineage.transformations[].hash` coinciden con el cálculo SHA-256 de los artefactos.
---
## 8. Fachada de Consumo de 1 Línea (SDK)
```python
import datamesh
# 1. Leer cualquier bundle o documento ODKF
bundle = datamesh.read("https://github.com/institucion/datos-censo")
# 2. Verificar integridad criptográfica
is_valid = datamesh.verify("https://github.com/institucion/datos-censo")
# 3. Publicar estáticamente hacia Quarto o GitHub
datamesh.publish("https://github.com/institucion/datos-censo", to="./mi_sitio_quarto")
# 4. Consulta federada multi-nodo en DuckDB
df = datamesh.query("SELECT departamento, COUNT(*) FROM censo_hogares GROUP BY 1")
# 5. Resolver contrato sintáctico
contract = datamesh.resolve_contract("openapi", "http://api.gob.bo/v3/api-docs")