YAML에서 파이프 기호를 사용하는 것은 무엇입니까?


126

저는 yaml을 처음 사용했으며 여러 줄에 사용되는 파이프 기호 (|)에 대한 질문이 있습니다. YAML에 아래와 같은 구문이 있습니까?

테스트 : | 6+

아래의 두 YAML 파일 중 첫 번째 파일은 작동하고 두 번째 파일은 작동하지 않습니다. 이 문제의 원인을 모르겠습니다.

첫 번째 파일

Name :
  -
   testing:
     val1
  -
   second:
     val2
  -
   third:
     val3
  -
   then
  - 
    final: |
     a
     aa
     aaa
     aaaa : 'test:'

두 번째 파일

Name :
  -
   testing:
     val1
  -
   second:
     val2
  -
   third:
     val3
  -
   then
  - 
    final: |6+
      a
      aa
      aaa
      aaaa : 'test:'

두 번째 파일은 고객의 파일입니다.

XMLBeans를 사용하고 있는데이 오류가 발생합니다.

com.esotericsoftware.yamlbeans.parser.Parser $ ParserException : 17 행, 12 열 : '블록 끝'이 필요하지만 발견 : 블록 매핑 시작 " .

답변:


179

YAML에서 행 끝에있는 파이프 기호는 뒤에 오는 들여 쓰기 된 텍스트가 다중 행 스칼라 값으로 해석되어야 함을 나타냅니다. YAML 사양을 참조하세요 .

특히 파이프는 들여 쓰기를 제외하고 스칼라 값이 줄 바꿈을 유지하는 방식으로 문자 그대로 해석되어야 함을 나타냅니다. 반대로, >문자는 여러 줄의 "접힌"스칼라가 뒤따른다는 것을 나타냅니다. 이는 줄 바꿈이 공백으로 변환됨을 의미합니다. 예를 들면 :

>>> import yaml
>>> yaml.load("""
... |
...  This is a multi-line
...  literal style scalar.
... """)
'This is a multi-line\nliteral style scalar.\n'
>>> yaml.load("""
... >
...  This is a multi-line
...  folded scalar; new lines are folded into
...  spaces.
... """)
'This is a multi-line folded scalar; new lines are folded into spaces.\n'

6+부분은 +스칼라 리터럴 끝에있는 추가 공백을 처리해야하는 방법을 제어하는 "chomping indicator"와 함께 들여 쓰기 표시기 (사용해야하는 들여 쓰기 공백 수에 대한 명시 적 사양)입니다 .

당신이 얻는 오류는 까다로운 오류입니다. 들여 쓰기가 현재 블록 수준 요소에 상대적이어야하기 때문입니다. 따라서이 경우 에는 마지막 블록 수준 요소가 배열 항목 (으로 지정됨 )이고 리터럴이 여기에서 4 들여 쓰기 되기 때문에 4+대신 해야 합니다. 놀랍게도 매핑은 값이 여러 줄로되어 있어도 블록 요소로 간주되지 않습니다. 생각해 보면 이치에 맞습니다. 여전히 '한 줄짜리' "키 : 값"매핑 일뿐입니다. 값은 여러 줄 스칼라 값에 대한 특수 구문을 사용합니다. 혼란 스럽지만 어떻게 든 일관성 ...6+-final: |


6
"얼마나 많은 줄의 들여 쓰기를 사용해야하는지"라고 말할 때 들여 쓰기 문자 (공백이라고합시다)를 의미합니까? 아니면 정말 라인?
ROunofF

5
@ROunofF 네 살짜리 대답이고 당신은 그것을 지적한 첫 번째 사람입니다. "들여 쓰기의 공백"이라고 말해야합니다. 내가 고칠 게.
Iguananaut dec. 05


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