Je suis nouveau sur yaml et j'ai une question sur le symbole de pipe (|) utilisé pour plusieurs lignes. YAML a-t-il une syntaxe comme celle ci-dessous?
test: | 6 +
Des deux fichiers YAML ci-dessous, le premier fonctionne et le second ne fonctionne pas. Je ne sais pas ce qui cause cela.
Premier fichier
Name :
-
testing:
val1
-
second:
val2
-
third:
val3
-
then
-
final: |
a
aa
aaa
aaaa : 'test:'
Deuxième fichier
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: Attendu une "fin de bloc" mais trouvé: début de mappage de bloc ".
Le symbole de tuyau à la fin d'une ligne en YAML signifie que tout texte en retrait qui suit doit être interprété comme une valeur scalaire multiligne. Voir la spécification YAML .
Plus précisément, le tube 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 sauts de ligne sont convertis 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'
Le 6+
partie est l'indicateur d'indentation (une spécification explicite du nombre d'espaces d'indentation à utiliser) avec "l'indicateur de hachage" +
qui contrôle comment les espaces supplémentaires à la fin du littéral scalaire doivent être gérés.
L'erreur que vous obtenez est délicate: c'est parce que l'indentation doit être relative à l'élément de niveau bloc actuel. Donc, dans ce cas, ce devrait être 4+
au lieu de 6+
car le dernier élément de niveau bloc est l'élément de tableau (spécifié par -
) et le littéral est en retrait de 4. De façon assez surprenante, le final: |
le mappage n'est pas considéré comme un élément de bloc même si sa valeur est multiligne. Cela a du sens si vous y réfléchissez - c'est toujours juste un mappage "clé: valeur" "à une ligne". Il se trouve que la valeur utilise simplement une syntaxe spéciale pour les valeurs scalaires multilignes. Confus, mais en quelque sorte cohérent ...