2013-03-21 16 views
38

Sono nuovo di yaml e ho una domanda. Symbole pipe (|) utilizzato per linee multiple. ha yaml qualche sintassi come sotto?Qual è l'uso del simbolo del tubo in yaml

prova: | 6+

Ho un codice YAML come qui di seguito due, prima si sta lavorando e la seconda non lo è. Non so cosa stava succedendo lì.
primo file

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

secondo file

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

P.S: secondo file è cliente di. Sto usando xmlbeans e ho ottenuto "com.esotericsoftware.yamlbeans.parser.Parser $ ParserException: Riga 17, colonna 12: Previsto un 'fine blocco' ma trovato: inizio mappatura blocco".

A cura XMLBeans aggiunti vicino "Sto usando".

risposta

67

Il simbolo della pipa alla fine di una riga in YAML indica che qualsiasi testo rientrato che segue deve essere interpretato come un valore scalare multilinea. Vedi the YAML spec.

In particolare, la pipe indica che (eccetto per il rientro) il valore scalare deve essere interpretato letteralmente in modo tale da preservare le newline. Al contrario, il carattere > indica che lo scalare "piegato" su più righe segue, ovvero che le righe nuove vengono convertite in spazi. Per esempio:

>>> 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' 

La parte 6+ è l'indicatore di rientro (una specifica esplicita di quanti spazi di indentazione deve essere usato) con la "spia chomping" + che controlla gli spazi bianchi come extra alla fine del letterale scalari dovrebbe essere gestito

L'errore che si ottiene è difficile: è perché l'indentazione dovrebbe essere relativa all'attuale elemento a livello di blocco. Quindi in questo caso dovrebbe essere 4+ invece di 6+ perché l'ultimo elemento a livello di blocco è l'elemento dell'array (specificato da -) e il letterale è rientrato da 4. Sorprendentemente, la mappatura final: | non è considerata un elemento di blocco anche se il suo valore è multistrato. Ha senso, se ci pensate, è ancora solo una mappatura "chiave: valore". Il valore sembra essere utilizzare una sintassi speciale per valori scalari multilinea. Confusione, ma in qualche modo coerente ...

+0

Quando dici "quante linee di indentazione dovrebbero essere usate", intendi caratteri di indentazione (diciamo spazi)? O davvero linee? – ROunofF

+1

@ROunofF Risposta di quattro anni e tu sei il primo a segnalarlo. Dovrebbe dire "spazi di indentazione". Lo aggiusterò. – Iguananaut

+1

http://yaml-multiline.info/ ha qualche spiegazione molto buona con la demo. –

Problemi correlati