Analizador de diferencias semánticas de YAML
Pega un documento YAML para ver qué valores se interpretarían de forma distinta según el analizador siga las reglas de resolución de etiquetas de YAML 1.1 o YAML 1.2. No valida la sintaxis: comprueba la semántica.
El análisis se realiza localmente en tu navegador. El archivo nunca se carga al servidor.
Cómo usar esta herramienta
- Pega tu YAML o carga un archivo .yaml/.yml; los datos no salen de tu navegador.
- Selecciona «Analizar YAML».
- Revisa cada valor señalado: qué significa con YAML 1.1, qué significa con YAML 1.2 y por qué importa.
- Aplica la reescritura portable sugerida o copia el documento corregido completo para eliminar la ambigüedad.
Supuestos
- Compara literalmente los dos esquemas publicados (los tipos tag:yaml.org,2002 de YAML 1.1 y el Core Schema de YAML 1.2), no el comportamiento exacto de una biblioteca concreta. Los analizadores reales varían: por ejemplo, el SafeLoader habitual de PyYAML aplica resolución de estilo 1.1 aunque el documento se declare YAML 1.2.
- Solo comprueba escalares sin comillas (plain). Un valor entrecomillado, como "yes", no es ambiguo en ninguno de los esquemas y nunca se señala.
- Reconoce asignaciones `key: value`, incluidas las anidadas. Las colecciones de estilo flow (`{a: 1}`), los escalares de bloque (`|`, `>`) y los anclajes/alias quedan fuera del alcance; consulta Limitaciones.
Fuentes y datos de referencia
Metodología
Cada valor escalar plain del documento se resuelve por separado con las expresiones regulares de resolución de etiquetas de YAML 1.1 y las del Core Schema de YAML 1.2. Se señala si los esquemas discrepan en el tipo o el valor resultante. Las discrepancias booleano/nulo se marcan como probablemente problemáticas porque invierten silenciosamente la lógica de verdad/falsedad; los cambios numéricos o de marca de tiempo se marcan para revisión porque cambia el valor o el tipo, aunque es menos probable que inviertan una condición directamente.
Ejemplo resuelto
El clásico «problema de Noruega»
Datos de entrada: country: NO
Resultado: YAML 1.1 interpreta NO como el booleano false. YAML 1.2 lo interpreta como la cadena "NO". Se señala como probablemente problemático y se sugiere `country: "NO"`.
Número con cero inicial
Datos de entrada: retries: 0123
Resultado: YAML 1.1 interpreta 0123 como octal (83). YAML 1.2 lo interpreta como decimal (123): el mismo texto representa dos números distintos.
Orientación práctica
- Entrecomilla cualquier valor que pueda confundirse con un booleano, un nulo o un número si debe seguir siendo una cadena. Los casos más comunes son códigos de país (NO, ON), cadenas parecidas a versiones y las palabras yes/no/on/off.
- Si controlas el analizador, configura explícitamente el comportamiento Core Schema de YAML 1.2 en vez de depender del valor predeterminado histórico de una biblioteca.
Errores comunes
- Suponer que un archivo YAML que «parece correcto» se interpretará igual en todas partes: los casos ambiguos son precisamente los que parecen valores sencillos.
- Confiar únicamente en la directiva `%YAML 1.2`: algunos analizadores populares no la respetan por completo y mantienen la resolución de escalares de estilo 1.1.
Preguntas frecuentes
¿Por qué `enabled: yes` se convierte en true?
En la lista de palabras booleanas de YAML 1.1, "yes" (con cualquier combinación de mayúsculas y minúsculas) se resuelve como true. El Core Schema de YAML 1.2 solo reconoce true/false como booleanos, por lo que el mismo texto queda como la cadena "yes".
¿Qué es el problema de Noruega de YAML?
El código ISO del país Noruega, NO, también es una de las palabras que YAML 1.1 reconoce como booleano false. Por eso, `country: NO` sin comillas se convierte silenciosamente en `country: false` con un analizador YAML 1.1.
¿Entrecomillar un valor siempre lo hace seguro?
Sí. Un escalar entrecomillado ("yes", 'NO') se trata como una cadena explícita en todos los esquemas YAML. Esta herramienta nunca señala valores que ya están entrecomillados.
¿Por qué PyYAML puede convertir `yes` o `no` en booleanos?
El SafeLoader de PyYAML de uso habitual aplica resolución de booleanos de estilo YAML 1.1, donde `yes` plain es true y `no` es false. Así, `country: NO` puede cargarse como booleano, mientras que el Core Schema de YAML 1.2 conserva NO como cadena. Esta herramienta compara reglas de los esquemas publicados; no ejecuta PyYAML ni verifica la configuración de un cargador específico.
Última revisión:
Este es un comprobador de resolución de escalares, no un analizador YAML completo: no analiza colecciones de estilo flow, escalares de bloque, anclajes/alias ni claves de combinación (merge keys). El Analizador YAML entre entornos cubre más casos. También compara los dos esquemas publicados, no el comportamiento real de una biblioteca concreta, que en ocasiones difiere de la especificación (consulta Supuestos).
Las preferencias de tema y de herramientas, junto con las listas de herramientas guardadas y recientes, se almacenan solo en este navegador.