2015-10-07 9 views
13

Ho il seguente frammento YAML:Come sfuggire ai due punti e ad altri caratteri speciali in una stringa YAML?

description: | 
    "API for bean consuming applications. 
    Examples: painted pony, lima bean" 

Swagger editor interpreta i due punti (:) come un carattere speciale, nonostante le virgolette.

In base alla risposta accettata allo this question, i due punti non devono essere considerati come caratteri speciali.

Si tratta di un errore di Swagger o di una sequenza di escape necessaria per utilizzare i due punti in letterali di testo quotati?

Ho cercato di scoprirlo usando lo YAML specification ma ho rinunciato.

Come devo leggere quella specifica per rispondere alla domanda?

C'è una differenza tra virgolette singole (') e virgolette (") in YAML?

La tubazione (|) o la struttura di dimensioni maggiori di (>) influisce solo sulla gestione dell'interruzione di linea o sulla gestione di caratteri speciali?

+1

Se si incolla questo frammento in [Parser YAML online] (http://yaml-online-parser.appspot.com/), si scoprirà che non vengono conservati solo i due punti nel valore 'description', ma anche il preventivo si segna. In realtà le virgolette hanno un significato speciale per gli scalari * flow *, non per gli scalari * block * che sono indicati con '|' e '>'. – Tsyvarev

+0

Per questo tipo di domande l'editor online aiuta molto: http: //editor.swagger.io/ –

+0

Ho sperimentato diversi strumenti YAML che si comportano in modo molto inconsistente, quindi non mi baserei su alcuni strumenti per dire se qualcosa non va o no. Questo è il motivo per cui ho chiesto esplicitamente le specifiche. – Gustave

risposta

8

Considererei un errore in swagger, ma ho riscontrato problemi in altri editor, ad es. quando si evidenzia YAML.

Quando uno scalare stringa è circondato da single quotes'....' l'unica fuga all'interno di quella stringa che può essere fatto è l'inserimento di una doppia virgoletta per indicare una sola offerta:

'It''s a good question' 

Quando double quotes, "....", andare in giro un stringa scalare si utilizza la barra rovesciata (\) per l'escape e si deve sfuggire almeno la barra rovesciata e le doppie virgolette. Inoltre puoi sfuggire ad altri caratteri speciali come il linefeed (\n) e sfuggire a un fine riga precedendolo con una barra rovesciata.

Le specifiche YAML indicano che c'è no way to escape characters inside literal scalars (a partire da |), ma questo non è il modo, ad es. PyYAML si comporta (e mi rendo conto che neanche il mio ruamel.yaml). Con questi puoi usare il backslash per inserire per es. newlines extra.

Per lo stile piegato (>) non esiste un riferimento esplicito all'escaping o meno.

Tutti gli scalari stringa tranne scalari semplici (quelli senza le virgolette o >/|) può contenere : seguito da uno spazio senza problemi, e se un editore interpreta che in modo diverso, questo è comprensibile (come la piena YAML analisi è costoso), ma errato.

+0

Grazie per la tua risposta! Ancora non sono in grado di trovare le parti rilevanti delle specifiche. Il collegamento che hai fornito mi porta a "3.2.1.3. Confronto dei nodi". Com'è collegato ai meccanismi di fuga? – Gustave

+0

@Gustave Spiacente, incollato in un link sbagliato. L'ho aggiornato. È nella frase subito prima dell'esempio 8.8 – Anthon

+1

Per quello che vale, la specifica collegata è per YAML 1.2 che contiene i cambiamenti di rottura da YAML 1.1. PyYAML usa la specifica 1.1. Rif: http://pyyaml.org/wiki/PyYAML –

7

Ho avuto lo stesso identico problema e ho scoperto che l'utilizzo del codice di escape HTML funziona con :, che è quello a cui ho fatto ricorso.