YAML - Primitivos de sintaxe

Neste capítulo, você aprenderá sobre os seguintes aspectos das primitivas de sintaxe em YAML -

  • Parâmetros de produção
  • Espaços de Indentação
  • Espaços de Separação
  • Prefixo de linha ignorado
  • Dobragem de linha

Vamos entender cada aspecto em detalhes.

Parâmetros de Produção

Os parâmetros de produção incluem um conjunto de parâmetros e a faixa de valores permitidos que são usados ​​em uma produção específica. A seguinte lista de parâmetros de produção são usados ​​em YAML -

Recuo

É denotado por personagem n ou mO fluxo de caracteres depende do nível de indentação dos blocos incluídos nele. Muitas produções parametrizaram esses recursos.

Contexto

É denotado por c. YAML oferece suporte a dois grupos de contextos:block styles e flow styles.

Estilo

É denotado por s. O conteúdo escalar pode ser apresentado em um dos cinco estilos:plain, double quoted and single quoted flow, literal and folded block.

Mastigando

É denotado por t. Os escalares de bloco oferecem muitos mecanismos que ajudam a aparar o bloco:strip, clip e keep. Chomping ajuda na formatação de novas strings de linha. É usada a representação do estilo de bloco. O processo de mastigação acontece com a ajuda de indicadores. Os indicadores controlam qual saída deve ser produzida com novas linhas de string. As novas linhas são removidas com(-) operador e novas linhas são adicionados com (+) operador.

Um exemplo de processo de trituração é mostrado abaixo -

strip: |-
   text↓
clip: |
   text↓
keep: |+
   text↓

A saída depois de analisar o exemplo YAML especificado é a seguinte -

Espaços de Indentação

No fluxo de caracteres YAML, o recuo é definido como um caractere de quebra de linha de zero ou mais caracteres. O ponto mais importante a ser mantido em mente é que a indentação não deve conter caracteres de tabulação. Os caracteres em indentação nunca devem ser considerados como parte das informações de conteúdo do nó. Observe o seguinte código para melhor compreensão -

%YAML 1.1
---
!!map {
   ? !!str "Not indented"
   : !!map {
      ? !!str "By one space"
      : !!str "By four\n spaces\n",
      ? !!str "Flow style"
      : !!seq [
         !!str "By two",
         !!str "Still by two",
         !!str "Again by two",
      ]
   }
}

A saída que você pode ver após o recuo é a seguinte -

{
   "Not indented": {
      "By one space": "By four\n spaces\n", 
      "Flow style": [
         "By two", 
         "Still by two", 
         "Again by two"
      ]
   }
}

Espaços de Separação

YAML usa caracteres de espaço para separação entre tokens. A observação mais importante é que a separação em YAML não deve conter caracteres de tabulação.

O seguinte único código mostra o uso de espaços de separação -

{ · first: · Sammy, · last: · Sosa · }
A sintaxe mostrada acima fornece a seguinte saída:
{
   "\u00b7 last": "\u00b7 Sosa \u00b7", 
   "\u00b7 first": "\u00b7 Sammy"
}

Prefixo de linha ignorado

O prefixo vazio sempre inclui recuo, dependendo do tipo escalar, que também inclui um espaço em branco à esquerda. Os escalares simples não devem conter caracteres de tabulação. Por outro lado, os escalares citados podem conter caracteres de tabulação. Os escalares de bloco dependem completamente da indentação.

O exemplo a seguir mostra o funcionamento do prefixo de linha ignorado de uma maneira sistemática -

%YAML 1.1
---
!!map {
   ? !!str "plain"
   : !!str "text lines",
   ? !!str "quoted"
   : !!str "text lines",
   ? !!str "block"
   : !!str "text·®lines\n"
}

A saída alcançada para os fluxos de bloco é a seguinte -

{
   "plain": "text lines", 
   "quoted": "text lines", 
   "block": "text\u00b7\u00aelines\n"
}

Line Folding

A dobragem de linha permite quebrar linhas longas para facilitar a leitura. Mais linhas curtas significam melhor legibilidade. A dobra de linha é obtida observando-se a semântica original da linha longa. O exemplo a seguir demonstra a dobra de linha -

%YAML 1.1
--- !!str
"specific\L\
trimmed\n\n\n\
as space"

Você pode ver a saída da dobra de linha no formato JSON da seguinte maneira -

"specific\u2028trimmed\n\n\nas space"