Le schede sono consentite in YAML, ma solo se la rientranza non è applicabile.
Secondo YAML 1.2 Section 5.5:
YAML riconosce due spazio bianco personaggi: spazio e tab.
I seguenti esempi useranno ·
per indicare gli spazi e →
per indicare schede. Tutti gli esempi possono essere convalidati utilizzando lo YAML Reference Parser ufficiale.
YAML ha uno stile di blocco e uno stile di flusso. In stile blocco, il rientro determina la struttura di un documento. Il seguente documento usa lo stile di blocco.
root:
··key: value
Validate
In stile flusso, i caratteri speciali indicano la struttura del documento. Il seguente documento equivalente utilizza lo stile del flusso.
{
→ root: {
→ → key: value
→ }
}
Validate
si può anche mescolare il rientro in grande stile di flusso.
{
→ root: {
··→ key: value
····}
}
Validate
Se stai mescolando blocco e flusso stile, tutta la parte stile flusso devono rispettare il rientro stile blocco.
root:
··{
····key: value
··}
Validate
Ma è ancora possibile mescolare il vostro rientro all'interno della parte stile flusso.
root:
··{
··→ key: value
··}
Validate
Se si dispone di un unico documento di valore, si può circondare il valore con tutti i tipi di spazi bianchi.
→ ··value··→
Validate
Il punto è, ogni documento JSON che viene analizzato come YAML metterà il documento in stile flusso (a causa della {
o [
carattere iniziale) che supporta le schede, a meno che non si tratta di un singolo valore del documento JSON, nel qual caso YAML consente ancora il riempimento con spazi bianchi.
Se un parser YAML genera a causa di schede in un documento JSON, non è un parser valido.
Detto questo, l'esempio non funziona perché un valore di mappatura di stile blocco deve essere sempre rientrato se non si trova sulla stessa riga del nome di mapping.
root: {
··key: value
}
è not valid, tuttavia
root:
··{
····key: value
··}
è valid e
root: { key: value }
è anche valid.
Credo che non sia corretto sui caratteri di tabulazione e ho notato che alcuni parser online fanno lo stesso errore. La [spec] (http://yaml-online-parser.appspot.com/) _does_ consente i caratteri della tabulazione: "Rientro esterno e contenuto scalare, YAML utilizza i caratteri dello spazio bianco per la separazione tra i token all'interno di una linea. può tranquillamente includere caratteri di tabulazione. " –
Inoltre, la [specifica] (http://www.yaml.org/spec/1.2/spec.html#id2778481) consente le tabulazioni nelle posizioni dei prefissi di riga per le linee di flusso: "Per gli stili scalari di flusso include inoltre tutto lo spazio bianco iniziale , che può contenere caratteri di tabulazione. " Ciò renderebbe qualsiasi JSON compatibile con un parser YAML corretto, tranne nel caso in cui le specifiche JSON lo lasciano all'implementatore (come indicato dal commento su RFC4627). –
@BrandonBonds è interessante. Nel migliore dei casi, sembrerebbe che la specifica YAML sia incoerente con se stessa. Non sono sicuro di come riconciliare dichiarazioni come "In generale, il rientro è definito come zero o più caratteri di spazio all'inizio di una linea" e "Per mantenere la portabilità, i caratteri di tabulazione non devono essere utilizzati in rientranza", con la verbosità hai fatto riferimento, nonostante appartenessero alla stessa specifica. – jmar777