Analisador de diferenças semânticas de YAML
Cole um documento YAML para ver quais valores seriam interpretados de forma diferente conforme o analisador siga as regras de resolução de tags de YAML 1.1 ou YAML 1.2. Não valida a sintaxe: verifica a semântica.
O processamento é feito localmente no seu navegador. Seu arquivo nunca é enviado.
Como usar esta ferramenta ferramenta
- Cole seu YAML ou carregue um arquivo .yaml/.yml; os dados não saem do navegador.
- Selecione ‘Analisar YAML’.
- Confira cada valor sinalizado: o que significa em YAML 1.1, o que significa em YAML 1.2 e por que isso importa.
- Use a reescrita portátil sugerida ou copie o documento corrigido para eliminar a ambiguidade.
Premissas
- Compara literalmente os dois esquemas publicados (os tipos tag:yaml.org,2002 de YAML 1.1 e o Core Schema de YAML 1.2), não o comportamento exato de uma biblioteca específica. Analisadores reais variam: por exemplo, o SafeLoader comum do PyYAML aplica resolução no estilo 1.1 mesmo quando o documento declara YAML 1.2.
- Verifica somente escalares sem aspas (plain). Um valor entre aspas, como ‘yes’, é inequívoco em todos os esquemas e nunca é sinalizado.
- Reconhece mapeamentos `key: value`, inclusive aninhados. Coleções no estilo flow (`{a: 1}`), escalares de bloco (`|`, `>`) e âncoras/aliases estão fora do escopo; consulte Limitações.
Fontes e dados de referência
Metodologia
Cada valor escalar plain do documento é resolvido separadamente pelas expressões regulares de resolução de tags de YAML 1.1 e do Core Schema de YAML 1.2. Se os esquemas discordarem no tipo ou valor resultante, o valor é sinalizado. Divergências booleano/nulo são marcadas como provavelmente problemáticas porque invertem silenciosamente a lógica de verdadeiro/falso; mudanças numéricas ou de timestamp são marcadas para revisão porque alteram valor ou tipo, mas têm menor probabilidade de inverter diretamente uma condição.
Exemplo resolvido
O clássico problema da Noruega
Dados de entrada: country: NO
Resultado: YAML 1.1 interpreta NO como o booleano false. YAML 1.2 interpreta como a string ‘NO’. É sinalizado como provavelmente problemático e sugere-se `country: "NO"`.
Número com zero à esquerda
Dados de entrada: retries: 0123
Resultado: YAML 1.1 interpreta 0123 como octal (83). YAML 1.2 interpreta como decimal (123): o mesmo texto representa dois números diferentes.
Orientações práticas
- Coloque entre aspas qualquer valor que possa ser confundido com booleano, nulo ou número, mas deva continuar sendo uma string. Casos comuns: códigos de país (NO, ON), strings parecidas com versões e yes/no/on/off.
- Se você controla o analisador, configure explicitamente o comportamento Core Schema de YAML 1.2 em vez de depender do padrão histórico de uma biblioteca.
Erros comuns
- Presumir que um arquivo YAML que ‘parece correto’ será interpretado da mesma maneira em todos os lugares: os casos ambíguos são justamente os que parecem valores simples.
- Confiar apenas na diretiva `%YAML 1.2`: alguns analisadores populares não a respeitam integralmente e mantêm a resolução de escalares no estilo 1.1.
Perguntas frequentes
Por que `enabled: yes` vira true?
Na lista de palavras booleanas de YAML 1.1, ‘yes’ (em qualquer combinação de maiúsculas e minúsculas) é resolvido como true. O Core Schema de YAML 1.2 reconhece somente true/false como booleanos; portanto, o mesmo texto permanece a string ‘yes’.
O que é o problema da Noruega no YAML?
O código ISO do país Noruega, NO, também é reconhecido por YAML 1.1 como a palavra booleana false. Por isso, `country: NO` sem aspas se transforma silenciosamente em `country: false` com um analisador YAML 1.1.
Colocar um valor entre aspas sempre o torna seguro?
Sim. Um escalar entre aspas (‘yes’, ‘NO’) é tratado como string explícita em todos os esquemas YAML. Esta ferramenta nunca sinaliza valores que já estejam entre aspas.
Por que o PyYAML pode transformar `yes` ou `no` em booleanos?
O SafeLoader do PyYAML, de uso comum, aplica a resolução de booleanos no estilo YAML 1.1, em que `yes` plain é true e `no` é false. Assim, `country: NO` pode ser carregado como booleano, enquanto o Core Schema de YAML 1.2 mantém NO como string. Esta ferramenta compara as regras dos esquemas publicados; não executa PyYAML nem verifica a configuração de um loader específico.
Última revisão:
Este é um verificador de resolução de escalares, não um analisador YAML completo: não analisa coleções flow, escalares de bloco, âncoras/aliases nem merge keys. A verificação prévia de YAML entre ambientes cobre mais casos. Também compara os dois esquemas publicados, não o comportamento real de uma biblioteca específica, que às vezes difere da especificação (consulte Pressupostos).
As preferências de tema e de ferramentas, além das listas de itens salvos e usados recentemente, são armazenadas somente neste navegador.