Para que serve o YAML?
Outro formato de dados de texto é YAML ( Yet Another Markup Language ; mais tarde, YAML Ain't Markup Language ). Ele é usado para serializar objetos para transmissão pela rede (assim como XML e JSON são usados dessa forma). Por ser legível por humanos, também é usado para escrever arquivos de configuração, por exemplo, para Docker, Kubernetes, Ansible, etc. Quando o YAML precisa ser salvo em um arquivo (por exemplo, um arquivo de configuração), usamos um dos dois extensões: .yaml ou .yml.
Sintaxe da linguagem
Em XML, os colchetes angulares ( <> ) são usados para designar tags. Em JSON, usamos colchetes ( {} ). YAML usa novas linhas e recuo.
Os dados são armazenados como pares chave-valor, onde a chave é uma string e o valor pode ser vários tipos de dados (string, número, verdadeiro/falso, array, etc.). As chaves são escritas sem aspas.
Vamos dar uma olhada em como as informações são armazenadas em YAML:
Tipo | Java | YAML |
---|---|---|
inteiro |
|
número 5
|
número fracionário |
|
número: 4,3
|
variável booleana |
|
válido: falso
válido: não válido: desativado * Valores booleanos válidos: verdadeiro/falso, sim/não, ativado/desativado. |
Corda |
|
cidade: Nova York
cidade: 'Nova York' cidade: "Nova York" * Todas as três opções são equivalentes. |
String com caracteres especiais |
|
linha: "aaa\nbbb"
|
Comentar no código |
|
# Comente
|
Objeto |
* A classe do objeto é fornecida para que você possa ver a estrutura do objeto. |
pessoa:
nome: "Dennis" idade: 32 * Preste atenção ao recuo antes dos atributos. Deve ser o mesmo para todos os atributos. |
Lista de valores simples |
|
idades: [1, 3,5,9,78, -5]
idades: - 1 - 3 - 5 - 9 - 78 - -5 * Ambas as opções são equivalentes. |
lista de objetos |
|
pessoas:
- nome: "Ian" idade: 21 - nome: "Marina" idade: 25 - nome: "Owen" idade: 73 |
Como em Java, um elemento de uma lista pode ser uma lista, ou seja, objetos podem ser aninhados uns dentro dos outros. O hífen que indica o próximo elemento da lista pode ser deslocado horizontalmente em relação à chave pai ou localizado diretamente abaixo dela. O principal é que todos os elementos tenham o mesmo formato. Isso ajudará a evitar confusão e uma hierarquia de aninhamento ambígua.
idades:
- 1 - 3 - 5 - 9 - 78 - -5 |
idades:
- 1 - 3 - 5 - 9 - 78 - -5 |
Existem mais duas nuances ao trabalhar com valores de texto:
-
Texto multilinha. Podemos salvar o texto assim:
multilineText: "linha 1\nlinha 2\n....linha n"Mas seria muito desagradável tentar ler isso. Portanto, há o | (pipe) símbolo, que você pode usar para escrever o texto de forma diferente:
multilinhaTexto: |
linha 1
linha 2
....
linha nVocê concorda que a segunda opção é mais conveniente, certo?
-
Longas filas. Se você deseja manter o texto em uma linha, mas também deseja que ele caiba na área de trabalho visível do IDE, pode usar o símbolo > (maior que).
singlelineText: >
início
...
continua mesma linha
...
fimTodo o texto será tratado como uma linha.
Se você precisar gravar várias estruturas de dados YAML em um arquivo, será necessário separá-las com --- (três hífens). Na prática, raramente há necessidade disso, mas é melhor estar ciente dessa possibilidade.
Exemplo de um documento YAML
Vamos criar alguma estrutura de dados Java (uma classe) e um objeto correspondente e tentar representar o objeto como YAML.
class Family {
private Date weddingDate;
private Person wife;
private Person husband;
private List<Person> children;
// Getters and setters are omitted
}
class Person {
private final String name;
private final boolean isWoman;
private int age;
public Person(String name, int age, boolean isWoman) {
this.name = name;
this.age = age;
this.isWoman = isWoman;
}
// Getters and setters are omitted
}
public static void main(String[] args) {
Person wife = new Person("Ann", 37, true);
Person husband = new Person("Alex", 40, false);
var children = List.of(
new Person("Iris", 12, true),
new Person("Olivia", 5, true)
);
Date weddingDate = new Date(/* some long */);
Family family = new Family();
family.setWeddingDate(weddingDate);
family.setWife(wife);
family.setHusband(husband);
family.setChildren(children);
}
Representação válida em YAML:
data do casamento: 2000-12-03
esposa:
nome: Ann
idade: 37
isWoman: sim
marido:
nome: Alex
idade: 40
isWoman: sem
filhos:
- nome: Iris
age: 12
isWoman: verdadeiro
- nome: Olivia
idade: 5
éMulher: verdadeiro
---
GO TO FULL VERSION