Resumen

  • JSON Type Definition comprueba una instancia contra un contrato estructural deliberadamente limitado; aceptar la forma no autentica la afirmación.
  • Sus ocho formas excluyentes, la apertura local de campos desconocidos y los dos punteros de error reducen decisiones implícitas entre implementaciones.
  • Identidad, permiso, reglas de negocio, antigüedad, persistencia y resultado empiezan después del veredicto del esquema.

Dos mensajes pueden ser idénticos byte por byte y merecer decisiones opuestas. Uno llegó del operador autorizado dentro de su ventana temporal; el otro es una repetición capturada por un tercero. Un esquema estructural aceptará ambos. Esa no es una falla del esquema: es la señal de que se le está pidiendo decidir una realidad que nunca observó.

JSON Type Definition, definido por RFC 8927, persigue una promesa más estrecha. Describe formas JSON comunes, facilita generar tipos para lenguajes de programación y normaliza cómo señalar el lugar de un error. Su potencia se restringe de manera intencional para que receptores distintos tengan menos oportunidades de inventar semánticas incompatibles.

Ocho formas y una frontera clara

JTD dispone de ocho formas mutuamente excluyentes: vacía, referencia, tipo, enumeración, elementos, propiedades, valores y discriminador. La forma vacía no limita la instancia. Una referencia reutiliza una definición de la raíz. Las formas de elementos y valores aplican un subesquema a una lista o a un mapa. Propiedades describe un registro; discriminador elige una variante mediante una etiqueta de texto.

No se pueden mezclar formas y dejar que la biblioteca resuelva la prioridad. Las definiciones solo aparecen en la raíz. Una rama del discriminador no puede redefinir la etiqueta ni declararse nula por su cuenta. Son renuncias pequeñas que eliminan grandes divergencias.

El documento es Experimental y procede del Independent Stream. No tiene consenso IETF ni condición de Internet Standard. Su propio criterio de éxito exige varias implementaciones independientes usando JTD para intercambiar información. La publicación abre un experimento; no certifica su despliegue.

El esquema vacío también aprueba

La forma vacía acepta cualquier instancia y jamás devuelve errores. Por eso “validación correcta” no tiene fuerza probatoria si falta la identidad exacta del esquema. El recibo útil incluye hash del mensaje, hash y versión del esquema, implementación del validador, modo y extensiones.

metadata admite documentación o pistas para generadores y herramientas locales. Un tercero no tiene obligación de entenderla. Solo un acuerdo externo puede convertir una extensión de metadata en semántica compartida de validación. El nombre de una anotación no le concede autoridad.

Este límite encaja con las capas de realidad de Heng Lu. El contrato describe lo que una máquina puede reconocer. No crea la identidad del actor ni el estado al que se refiere el mensaje.

Cada objeto decide si se abre

En properties, los miembros obligatorios y opcionales son conjuntos separados. Los desconocidos se rechazan por defecto. additionalProperties:true los admite únicamente en el nivel donde aparece; no se hereda hacia objetos internos.

Así, un sobre exterior puede tolerar nuevos datos de enrutamiento mientras la orden anidada continúa cerrada. Convertir esta política en una bandera global abre superficies que el autor del esquema mantuvo separadas. La telemetría debe indicar en qué objeto apareció el campo y qué regla tomó la decisión.

La compatibilidad hacia adelante no es un valor absoluto. Aceptar lo desconocido puede preservar evolución; también puede ocultar que un consumidor viejo ignoró una instrucción crítica. La entidad que asume el riesgo decide localmente qué niveles pueden abrirse.

Un puntero ubica, pero no manda

Los errores estándar contienen instancePath, hacia el valor rechazado, y schemaPath, hacia la regla que lo rechazó. Ambos usan JSON Pointer. La pareja permite reproducir el encuentro entre dato y contrato.

El orden del conjunto de errores no está especificado. La primera posición no expresa causa, gravedad ni prioridad. Tampoco un puntero autoriza corregir el dato. Indicar /beneficiary con exactitud no prueba quién es el beneficiario legítimo.

Un sistema de remediación debe añadir su propia política explícita y auditable, en lugar de disfrazarla como una consecuencia del formato.

Rango, tiempo y etiqueta siguen siendo testimonios

JTD reconoce enteros con y sin signo de 8, 16 y 32 bits, flotantes, booleanos, cadenas y timestamps. Un timestamp se contrasta con RFC 3339 bajo el perfil ajustado por Atom. La sintaxis puede ser perfecta aunque el reloj mienta o el hecho nunca ocurra.

La ausencia de int64 y uint64 es deliberada. Muchos ecosistemas JSON no conservan exactamente todo ese rango. I-JSON fija una zona interoperable menor. Incluir los nombres de 64 bits habría sugerido una garantía que receptores comunes no podían cumplir.

El discriminador también prueba menos de lo que parece. Una etiqueta selecciona la rama y obliga a incluir los campos de esa variante. No demuestra que el evento nombrado sucedió. Autenticación, autorización, aceptación, escritura duradera y lectura posterior son recibos diferentes.

El evaluador necesita límites

Las referencias pueden formar ciclos. RFC 8927 recomienda detectarlos y abortarlos cuando los esquemas vienen del usuario, porque un evaluador ingenuo puede quedar atrapado y ofrecer una vía de denegación de servicio. RFC 8259 permite límites de tamaño, profundidad y precisión.

La operación debe presupuestar bytes, profundidad, expansiones, errores y tiempo. También debe decidir si un esquema es un artefacto confiable, una entrada de cliente o una dependencia remota. JSON bien formado no equivale a trabajo seguro.

Fuentes

  1. RFC 8927 — JSON Type Definition
  2. RFC 8259 — Formato de intercambio JSON
  3. RFC 7493 — Formato I-JSON
  4. RFC 6901 — JSON Pointer
  5. RFC 3339 — Fecha y hora en Internet
  6. RFC 4287 — Formato de sindicación Atom
  7. RFC 8610 — Concise Data Definition Language
  8. Heng Lu — Running-Code Primacy
  9. Heng Lu — Minimum Initial Specification, Localized Future Decision, and Voluntary Adoption
  10. Heng Lu — On Reality Layers, Symbolic Power, and Why Clarity Feels So Hostile