왜 — yaml 파일에서 (3 개의 대시 / 하이픈)?


116

그래서 더 읽기 쉬운 YAML대신 파일을 사용하기 시작했습니다 application.properties. 나는 YAML그들이 ---. 나는 봤고 아래 설명을 찾았습니다.

YAML은 세 개의 대시 ( "---")를 사용하여 지시문과 문서 내용을 구분합니다. 또한 지시문이없는 경우 문서의 시작을 알리는 역할도합니다.

또한 샘플을 사용하지 않고 샘플을 시도해 보았고 ---필수가 아니라는 것을 이해했습니다.

directive및에 대한 명확한 이해가없는 것 같습니다 document. 누구든지 간단한 예를 들어 설명해 주시겠습니까?


3
YAML 사양을 확인 했습니까? 그것은 지시문 이나 문서 가 무엇인지 거의 설명합니다 . 죄송합니다 . 내 책 에서 idownvotedbecau.se/noresearch 에 해당합니다.
lexicore

19
@lexicore 예제를 시도하기 전에 문서를 확인했습니다. 그러나 나는 명확한 이해를 얻지 못했고 누군가가 설명하면 더 잘 이해할 것이라고 생각했습니다. 아주 기본적인 것 같았다면 미안하지만 저는 초보자 일뿐입니다.
Andy

답변:


66

이미 알고 있듯이 세 개의 대시 ---문서의 시작알리는 데 사용됩니다 .

  1. 문서의 시작 신호에 지시 한 후 , 즉, %YAML또는 %TAG현재의 사양에 따라 라인. 예를 들면 :

    %YAML 1.2
    %TAG !foo! !foo-types/
    ---
    myKey: myValue
    
  2. 동일한 스트림에 여러 yaml 문서 가있을 때 문서 시작을 알리려면 ( 예 : yaml 파일) :

    doc 1
    ---
    doc 2
    

    만약 doc 2에 몇 가지 선행 지시문이 있다면, 우리는 ...파서에게 doc 1의 끝 (그리고 doc 2 이전의 잠재적 지시문의 시작)을 나타 내기 위해 세 개의 점을 사용해야 합니다. 예를 들면 :

    doc 1
    ...
    %TAG !bar! !bar-types/
    ---
    doc 2
    

사양은 yaml 파서 구현 자에게 좋습니다. 그러나이 기사 는 사용자 관점에서 더 쉽게 읽을 수 있습니다.


다음 문서에 지시문이 있어도 문서 끝 표시기가 필요하지 않은 방식으로 YAML 1.2 사양의 생산 규칙 211을 읽었습니다.이 경우 필요한 유일한 것은 끝이 있다는 것입니다. of-directives 표시기 (시작 부분 l-explicit-document).
Anthon

세 개의 점 사용에 대한 나의 이해는이 문장을 기반으로 사양 : "문서가 문서 끝 마커 라인으로 종료되지 않은 경우, 다음 문서는 지시 끝 마커 라인으로 시작해야합니다." 로 시작하는 문서를 요구하는 지시문 끝 마커 ---는 해당 문서에 지시문이 허용되지 않음을 의미합니다. 따라서 doc 2에 지시문이있는 경우 doc 1은 문서 끝 마커로 종료되어야합니다 ....
Yi Ou

사실, l-explicit-document정의는 이에 대한 지시문을 금지합니다. "명시 적 문서는 명시 적 지시문 끝 마커 행으로 시작하지만 지시문은 없습니다."
Yi Ou

규칙 211에는 명시 적으로 l-explicit-document 외부의 지시문이 있으며 텍스트 인용이 그것과 모순되는지 확실하지 않습니다. 어쨌든 Python YAML 파서는 그렇게 구현합니다 (즉, 다음 문서 지시문 앞에 명시적인 문서 끝 표시기가 필요하지 않음).
Anthon

앞에 지시문을 허용하는 규칙 211이 표시되지 않습니다 l-explicit-document. 식에 l-document-prefix*지시문이 없습니다. 나는 Python Yaml 파서에 익숙하지 않지만 흥미로운 질문은 지시문 앞에 점이 없으면 지시문을 조용히 건너 뛰는 지 여부입니다.
Yi Ou

55

YAML지시문으로 시작하지 않는 경우 필수 사항은 아닙니다 . 그럴 경우 사용해야합니다.

문서를 살펴 보겠습니다.

3.2.3.4. 지시어

각 문서는 일련의 지시문과 연관 될 수 있습니다. 지시문에는 이름과 선택적 매개 변수 시퀀스가 ​​있습니다. 지시문은 YAML 프로세서에 대한 지시이며 다른 모든 프리젠 테이션 세부 사항과 마찬가지로 YAML 직렬화 트리 또는 표현 그래프에 반영되지 않습니다. . 이 버전의 YAML은“YAML”과“TAG”라는 두 가지 지시문을 정의합니다. 다른 모든 지시문은 YAML의 향후 버전을 위해 예약되어 있습니다.

이에 대한 한 가지 예는 지시문 에 대한 문서 에서도 찾을 수 있습니다.YAML

%YAML 1.2 # Attempt parsing
           # with a warning
---
"foo"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.