2015-10-07 20 views
13

Mam następujący fragment: YAMLJak uniknąć dwukropków i innych znaków specjalnych w ciągu znaków YAML?

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

Swagger editor interpretuje dwukropek (:) jako znak specjalny, pomimo cudzysłowie.

Zgodnie z zaakceptowaną odpowiedzią na this question dwukropek nie powinien być traktowany jako znak specjalny.

Czy to błąd Swaggera, czy jest to sekwencja ucieczki potrzebna do używania dwukropka w cytowanych tekstach literowych?

Próbowałem to znaleźć za pomocą YAML specification, ale zrezygnowałem.

Jak mogę przeczytać tę specyfikację, aby odpowiedzieć na pytanie?

Czy istnieje różnica między pojedynczymi cudzysłowami (') a podwójnymi cudzysłowami (") w YAML?

Czy budowa rury (|) lub większa niż (>) wpływa tylko na obsługę podziałki linii lub obsługę znaków specjalnych?

+1

Jeśli wkleisz ten fragment do [Online YAML Parser] (http://yaml-online-parser.appspot.com/), okaże się, że nie tylko dwukropki są zachowane w wartości 'description', ale także cytat same się zaznaczają. Rzeczywiście, cytaty mają specjalne znaczenie dla * flow * skalars, a nie dla * block * skalars, które są oznaczone "|" i ">". – Tsyvarev

+0

W przypadku tego rodzaju pytań edytor online bardzo pomaga: http: //editor.swagger.io/ –

+0

Doświadczyłem różnych narzędzi YAML zachowujących się bardzo niekonsekwentnie, więc nie będę polegał na zachowaniu niektórych narzędzi, które powiedzą, czy coś jest nie tak, czy nie. To jest powód, dla którego wyraźnie poprosiłem o specyfikację. – Gustave

Odpowiedz

8

Uważam, że to błąd w zachwycie, ale widziałem problemy w innych edytorach, np. podświetlając YAML.

Gdy skalar ciąg jest otoczony single quotes'....' jedyną ucieczką w ramach tego łańcucha, które można zrobić jest wstawianie podwójny apostrof, aby wskazywać pojedynczy cytat:

'It''s a good question' 

Kiedy double quotes, "....", przejść wokół łańcuch skalarny używasz odwrotnego ukośnika (\) do ucieczki, a musisz uciec przynajmniej od ukośnika odwrotnego i podwójnych cudzysłowów. Oprócz tego możesz uciec od innych znaków specjalnych, takich jak linia (\n) i uciec przed końcem linii, poprzedzając go ukośnikiem odwrotnym.

Specyfikacja YAML mówi, że istnieje no way to escape characters inside literal scalars (począwszy od |), ale nie jest to np. PyYAML zachowuje się (i zdaję sobie sprawę, że ani moja ruamel.yaml). Za pomocą tych można użyć odwrotnego ukośnika do wstawienia np. dodatkowe nowe linie.

Dla złożonego stylu (>) nie ma wyraźnego odniesienia do wychodzenia lub nie.

Wszystkie skalary strunowe oprócz zwykłych skalarów (te bez cudzysłowów lub >/|) może zawierać : następnie przez przestrzeń bez problemu, a jeśli edytor interpretuje to inaczej, to jest zrozumiałe (jako pełny YAML parsowanie jest drogie), ale niepoprawny.

+0

Dzięki za odpowiedź! Nadal nie jestem w stanie znaleźć odpowiednich części specyfikacji. Podany link prowadzi mnie do "3.2.1.3. Porównanie węzłów". Jak to jest związane z mechanizmami ucieczki? – Gustave

+0

@ Gustave Przepraszamy, wkleiłem niewłaściwy link. Zaktualizowałem to. To jest w zdaniu tuż przed przykładem 8.8 – Anthon

+1

Dla tego, co jest warte, połączona specyfikacja jest dla YAML 1.2, która zawiera zmiany łamania z YAML 1.1. PyYAML używa specyfikacji 1.1. Patrz: http://pyyaml.org/wiki/PyYAML –

7

Miałem dokładnie ten sam problem i okazało się, że przy użyciu kodu ucieczki HTML działa :, do czego się odwołałem.