2015-10-07 53 views
13

私は、次のYAMLフラグメントがありますYAML文字列のコロンやその他の特殊文字をエスケープするには?

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

Swagger editorは引用符にもかかわらず、特殊文字としてコロン(:)を解釈します。

this questionの回答によれば、コロンは特殊文字として扱うべきではありません。

これはSwaggerのバグですか、引用符付きのテキストリテラルでコロンを使用するために必要なエスケープシーケンスですか?

私はこれをYAML specificationを使って見つけようとしましたが、あきらめました。

質問に答えるにはどうすればこの仕様を読まなければなりませんか?

YAMLでは一重引用符(')と二重引用符(")の間に違いがありますか?

パイプ(|)またはより大きい(>)構成は、改行処理または特殊文字の処理にのみ影響しますか?

+1

このフラグメントを[Online YAML Parser](http://yaml-online-parser.appspot.com/)に貼り付けると、 'description'値にコロンだけでなく引用も保存されることがわかりますそれ自体に印を付ける。実際には、引用符は* flow *スカラーに対して特別な意味を持ちますが、 '|'で示される* block *スカラーではありません。と '>'。 – Tsyvarev

+0

このような質問のために、オンラインエディタはhttp://editor.swaggerに多く役立ちます。io/ –

+0

私はさまざまなYAMLツールの動作が非常に矛盾しているので、何かが間違っているかどうかを判断するツールの動作には依存しません。それは私が明示的に仕様を要求したことの証です。 – Gustave

答えて

8

私はこれをぼんやりとしたバグと考えていますが、私は他のエディタで問題を見ています。 YAMLをハイライト表示するとき。一周、

'It''s a good question' 

double quotes"....":文字列スカラーにのみ行うことができ、その文字列内のエスケープは、単一引用符を示すために、二重の単一引用符を挿入しているsingle quotes'....'に囲まれて

スカラー文字列では、バックスラッシュ(\)を使用してエスケープし、少なくともバックスラッシュと二重引用符をエスケープする必要があります。さらに、改行(\n)のような他の特殊文字をエスケープして、行の前にバックスラッシュを付けてエスケープすることもできます。

YAML仕様にはno way to escape characters inside literal scalars|で始まる)があると言われていますが、これはどのようにではありませんか。 PyYAMLは振る舞います(そして私は自分のルアメルも何もしないことに気付きます)。これらを使用すると、バックスラッシュを使用してたとえば余分な改行。

折りたたみスタイル(>)には、エスケープするかどうかの明示的な参照はありません。平野スカラー(任意の引用符や>/|ないもの)を除く

すべての文字列スカラーは問題なくスペースが続く:を含むことができ、そして編集者は(完全なYAMLの解析は高価であると)違った、それは理解できることを解釈する場合には、間違っている。

+0

あなたの答えをありがとう!それでも私は仕様の関連部分を見つけることができません。あなたが提供したリンクは、「3.2.1.3ノードの比較」になります。それはどのようにエスケープメカニズムに関連していますか? – Gustave

+0

@Gustave申し訳ありませんが、間違ったリンクに貼り付けられました。私はそれを更新しました。例8.8の直前の文章にあります。 – Anthon

+1

リンクされた仕様は、YAML 1.1の重大な変更点を含むYAML 1.2です。 PyYAMLは1.1仕様を使用します。参照:http://pyyaml.org/wiki/PyYAML –

7

私はまったく同じ問題を抱えていて、HTMLエスケープコードを使用すると:が動作することがわかりました。これは私が頼りにしたものです。

関連する問題