219 votes

À quoi sert le symbole du tuyau dans YAML ?

Je suis nouveau dans le langage YAML et j'ai une question sur le symbole du tuyau (|) utilisé pour les lignes multiples. YAML a-t-il une syntaxe comme celle ci-dessous ?

test : |6+

Sur les deux fichiers YAML ci-dessous, le premier fonctionne et le second non. Je ne sais pas quelle est la cause de ce problème.

Premier dossier

Name :
  -
   testing:
     val1
  -
   second:
     val2
  -
   third:
     val3
  -
   then
  - 
    final: |
     a
     aa
     aaa
     aaaa : 'test:'

Deuxième dossier

Name :
  -
   testing:
     val1
  -
   second:
     val2
  -
   third:
     val3
  -
   then
  - 
    final: |6+
      a
      aa
      aaa
      aaaa : 'test:'

Le deuxième fichier est celui du client.

J'utilise XMLBeans et j'obtiens cette erreur :

com.esotericsoftware.yamlbeans.parser.Parser$ParserException : Ligne 17, colonne 12 : on attendait un 'block end' mais on a trouvé : block mapping start". .

293voto

Iguananaut Points 2553

Le symbole de la pipe à la fin d'une ligne dans YAML signifie que tout texte indenté qui suit doit être interprété comme une valeur scalaire sur plusieurs lignes. Voir la spécification YAML .

Plus précisément, le pipe indique que (à l'exception de l'indentation) la valeur scalaire doit être interprétée littéralement de manière à préserver les nouvelles lignes. Inversement, le > indique que le scalaire "plié" sur plusieurs lignes suit, ce qui signifie que les nouvelles lignes sont converties en espaces. Par exemple :

>>> import yaml
>>> yaml.load("""
... |
...  This is a multi-line
...  literal style scalar.
... """)
'This is a multi-line\nliteral style scalar.\n'
>>> yaml.load("""
... >
...  This is a multi-line
...  folded scalar; new lines are folded into
...  spaces.
... """)
'This is a multi-line folded scalar; new lines are folded into spaces.\n'

En 6+ est l'indicateur d'indentation (une spécification explicite du nombre d'espaces d'indentation à utiliser) avec l'indicateur de "chomping". + qui contrôle la façon dont l'espace blanc supplémentaire à la fin du littéral scalaire doit être traité.

L'erreur que vous obtenez est délicate : C'est parce que l'indentation doit être relative à l'élément actuel du bloc. Donc, dans ce cas, elle devrait être 2+ au lieu de 6+ car le dernier élément de niveau bloc est le mapping final: et le littéral est en retrait de 2 par rapport à celui-ci. Mis à jour avec la correction de @bramvi.

30voto

freemanpolys Points 540

Le pipe est utilisé lorsque vous souhaitez que les nouvelles lignes soient conservées en tant que nouvelles lignes.

Pour plus d'informations : https://yaml-multiline.info/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X