2015-10-07 7 views
13

Ich habe folgendes YAML-Fragment:Wie können Doppelpunkte und andere Sonderzeichen in einer YAML-Zeichenfolge entfernt werden?

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

Swagger editor interpretiert den Doppelpunkt (:) als Sonderzeichen, trotz der Anführungszeichen.

Gemäß der angenommenen Antwort auf this question sollte der Doppelpunkt nicht als Sonderzeichen behandelt werden.

Ist dies ein Fehler von Swagger oder ist eine Escape-Sequenz erforderlich, um den Doppelpunkt in literalen Texten in Anführungszeichen zu verwenden?

Ich habe versucht, dies mit der YAML specification herauszufinden, gab aber auf.

Wie muss ich diese Spezifikation lesen, um die Frage zu beantworten?

Gibt es einen Unterschied zwischen einfachen Anführungszeichen (') und doppelten Anführungszeichen (") in YAML?

Beeinflusst die Konstruktion des Rohres (|) oder die größere Konstruktion (>) nur die Behandlung von Zeilenumbrüchen oder die Behandlung von Sonderzeichen?

+1

Wenn Sie dieses Fragment in [Online YAML Parser] einfügen (http://yaml-online-parser.appspot.com/), werden Sie feststellen, dass nicht nur Doppelpunkte im 'description'-Wert, sondern auch im Zitat erhalten bleiben kennzeichnet sich selbst. Tatsächlich haben Zitate eine besondere Bedeutung für * flow * -Skalare, nicht für * block * -Skalare, die mit '|' und '>'. – Tsyvarev

+0

Für diese Art von Fragen hilft der Online-Editor eine Menge: http: //editor.swagger.io/ –

+0

Ich habe verschiedene YAML-Tools erlebt, die sich sehr uneinheitlich verhalten, also würde ich mich nicht auf das Verhalten einiger Tools verlassen, um zu sagen, ob etwas nicht stimmt oder nicht. Das ist der Grund, warum ich explizit nach der Spezifikation gefragt habe. – Gustave

Antwort

8

Ich würde dies einen Bug in Swagger betrachten, aber ich habe Probleme in anderen Editoren gesehen, z. wenn YAML hervorgehoben wird.

Wenn ein String-Skalar durch single quotes'....' umgibt die nur innerhalb dieser Zeichenfolge zu entkommen, die getan werden kann, ist ein Doppel Apostroph Einfügen ein einziges Angebot, um anzuzeigen:

'It''s a good question' 

Wenn double quotes, "....", geht um einen skalare Zeichenfolge Sie verwenden Backslash (\) für die Flucht, und Sie müssen zumindest den umgekehrten Schrägstrich und die Anführungszeichen zu entkommen. Außerdem können Sie anderen Sonderzeichen wie dem Zeilenvorschub (\n) entkommen und ein Zeilenende durch Vorrücken mit einem umgekehrten Schrägstrich verlassen.

Die YAML-Spezifikation sagt, es gibt no way to escape characters inside literal scalars (beginnend mit |), aber dies ist nicht wie z. PyYAML verhält sich (und ich merke auch nicht mein ramel.yaml). Mit diesen können Sie Backslash verwenden, um z. zusätzliche Zeilenumbrüche

Für den gefalteten Stil (>) gibt es keinen expliziten Verweis auf escape oder nicht.

Alle String-Skalare außer für Normal Skalare (jene ohne Anführungszeichen oder >/|) : von Raum problemlos gefolgt enthalten kann, und wenn ein Editor, dass anders interpretiert, das ist verständlich (als Voll YAML Parsing ist teuer), aber falsch.

+0

Danke für Ihre Antwort! Trotzdem kann ich die relevanten Teile der Spezifikation nicht finden. Der von Ihnen angegebene Link führt mich zu "3.2.1.3. Knotenvergleich". Wie ist das mit Fluchtmechanismen verbunden? – Gustave

+0

@Gustave Entschuldigung, in einen falschen Link eingefügt. Ich habe es aktualisiert. Es ist in dem Satz direkt vor Beispiel 8.8 – Anthon

+1

Für was es wert ist, ist die verknüpfte Spezifikation für YAML 1.2, die brechende Änderungen von YAML 1.1 enthält. PyYAML verwendet die Spezifikation 1.1. Ref: http://pyyaml.org/wiki/PyYAML –

7

Ich hatte genau das gleiche Problem, und festgestellt, dass die Verwendung des HTML-Escape-Code funktioniert :, was ist, worauf ich zurückgegriffen habe.

Verwandte Themen