Compartilhe esta página

Aprenda X em Y Minutos

Onde X=yaml

YAML é uma linguagem de serialização de dados projetado para ser diretamente gravável e legível por seres humanos.

É um estrito subconjunto de JSON, com a adição de sintaticamente novas linhas e recuo significativos, como Python. Ao contrário de Python, no entanto, YAML não permite caracteres de tabulação literais em tudo.

# Commentários em YAML são como este.

###################
# TIPOS ESCALARES #
###################

# Nosso objeto raiz (que continua por todo o documento) será um mapa,
# o que equivale a um dicionário, hash ou objeto em outras linguagens.
chave: valor
outra_chave: Outro valor vai aqui.
u_valor_numerico: 100
notacao_cientifica: 1e+12
boleano: true
valor_nulo: null
chave com espaco: valor
# Observe que strings não precisam de aspas. Porém, elas podem ter.
porem: "Uma string, entre aspas."
"Chaves podem estar entre aspas tambem.":  útil se você quiser colocar um ':' na sua chave."

# Seqüências de várias linhas podem ser escritos como um 'bloco literal' (utilizando |),
# ou em um 'bloco compacto' (utilizando '>').
bloco_literal: |
    Todo esse bloco de texto será o valor da chave 'bloco_literal',
    preservando a quebra de com linhas.

    O literal continua até de-dented, e a primeira identação é 
    removida.

        Quaisquer linhas que são 'mais identadas' mantém o resto de suas identações - 
        estas linhas serão identadas com 4 espaços.
estilo_compacto: >
    Todo esse bloco de texto será o valor de 'estilo_compacto', mas esta
    vez, todas as novas linhas serão substituídas com espaço simples.

    Linhas em branco, como acima, são convertidas em um carater de nova linha.

        Linhas 'mais-indentadas' mantém suas novas linhas também -
        este texto irá aparecer em duas linhas.

####################
# TIPOS DE COLEÇÃO #
####################

# Texto aninhado é conseguido através de identação.
um_mapa_aninhado:
    chave: valor
    outra_chave: Outro valor
    outro_mapa_aninhado:
        ola: ola

# Mapas não tem que ter chaves com string.
0.25: uma chave com valor flutuante

# As chaves podem ser também objetos multi linhas, utilizando ? para indicar o começo de uma chave.
? |
    Esta é uma chave
    que tem várias linhas
: e este é o seu valor

# também permite tipos de coleção de chaves, mas muitas linguagens de programação
# vão reclamar.

# Sequências (equivalente a listas ou arrays) semelhante à isso:
uma_sequencia:
    - Item 1
    - Item 2
    - 0.5 # sequencias podem conter tipos diferentes.
    - Item 4
    - chave: valor
      outra_chave: outro_valor
    -
        - Esta é uma sequencia
        - dentro de outra sequencia

# Como YAML é um super conjunto de JSON, você também pode escrever mapas JSON de estilo e
# sequencias:
mapa_json: {"chave": "valor"}
json_seq: [3, 2, 1, "decolar"]

##########################
# RECURSOS EXTRA DO YAML #
##########################

# YAML também tem um recurso útil chamado "âncoras", que permitem que você facilmente duplique
# conteúdo em seu documento. Ambas estas chaves terão o mesmo valor:
conteudo_ancora: & nome_ancora Essa string irá aparecer como o valor de duas chaves.
outra_ancora: * nome_ancora

# YAML também tem tags, que você pode usar para declarar explicitamente os tipos.
string_explicita: !! str 0,5
# Alguns analisadores implementam tags específicas de linguagem, como este para Python de
# Tipo de número complexo.
numero_complexo_em_python: !! python / complex 1 + 2j

####################
# YAML TIPOS EXTRA #
####################

# Strings e números não são os únicos que escalares YAML pode entender.
# Data e 'data e hora' literais no formato ISO também são analisados.
datetime: 2001-12-15T02: 59: 43.1Z
datetime_com_espacos 2001/12/14: 21: 59: 43.10 -5
Data: 2002/12/14

# A tag !!binary indica que a string é na verdade um base64-encoded (condificado)
# representação de um blob binário.
gif_file: !!binary |
    R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
    OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
    +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
    AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=

# YAML também tem um tipo de conjunto, o que se parece com isso:
set:
    ? item1
    ? item2
    ? item3

# Como Python, são apenas conjuntos de mapas com valors nulos; o acima é equivalente a:
set2:
    item1: nulo
    item2: nulo
    item3: nulo

Sugestões ou correções? Abra uma issue no repositório do Github, ou faça um Pull Request você mesmo!

Originalmente contribuído por Adam Brenecki e atualizado por 0 colaborador(es).