YAML

YAML
YAML
Official YAML Logo.svg
파일 이름 확장명.yaml,.yml
인터넷 미디어 유형등록되지 않음
초기 릴리즈2001년 5월 11일; 20년(2001-05-11)
최신 릴리즈
1.2 (개정 1.2.2)
2021년 10월 1일; 5개월(2021-10-01)
형식 유형데이터 교환
오픈 포맷?
웹사이트yaml.org

YAML (/ˈjæməl/YAH-ml) (§ History and name 참조)는 사람이 판독하는 서리화 언어다.이것은 일반적으로 구성 파일과 데이터가 저장되거나 전송되는 응용 프로그램에 사용된다.YAML은 Extensible Markup Language(XML)와 동일한 통신 애플리케이션을 많이 대상으로 하지만 의도적으로 SGML과 다른 최소 구문을 가지고 있다.[1] Python 스타일의 들여쓰기를 모두 사용하여 중첩을 나타내며, 보다 컴팩트한 형식을 사용한다.[...]리스트 및{...}따라서[1] JSON 파일은 유효한 YAML 1.2이다.[2]

사용자 정의 데이터 유형은 허용되지만 YAML은 기본적으로 스칼라(, 정수, 플로트 등), 목록연관 배열(지도, 사전 또는 해시라고도 함)을 인코딩한다.이러한 데이터 유형은 Perl 프로그래밍 언어에 기초하지만, 일반적으로 사용되는 모든 고급 프로그래밍 언어는 매우 유사한 개념을 공유한다.[3][4][5]키-값 쌍을 표현하는 데 사용되는 콜론 중심 구문은 에서 정의한 전자 메일 헤더에서 영감을 얻는다. RFC822문서 구분자 --- MIME(RFC2046)에서 빌렸다.이스케이프 시퀀스는 C에서 재사용되며, 멀티 라인 문자열의 화이트스페이스 래핑은 HTML에서 영감을 얻는다. 리스트와 해시는 중첩된 목록과 해시를 포함하고 트리 구조를 형성할 수 있으며 임의 그래프는 YAML 별칭(SOAP의 XML과 유사함)[1]을 사용하여 나타낼 수 있다.YAML은 스트림에서 읽고 쓰도록 되어 있는데, 이것은 SAX에서 영감을 받은 기능이다.[1]

YAML 읽기 및 쓰기 지원은 많은 프로그래밍 언어에서 사용할 수 있다.[6]Vim,[7] Emacs [8]등 일부 소스 코드 편집기 및 다양한 통합 개발 환경에는[9][10][11] 중첩된 구조를 접거나 구문 오류를 자동으로 강조 표시하는 등 YAML 편집을 용이하게 하는 기능이 있다.

YAML 파일의 공식 권장 파일 이름 확장명이.yaml2006년부터[12]

역사와 이름

YAML(/ˈjæməl/, 낙타[2] 운율)은 2001년 클라크 에반스가 처음 제안한 것으로,[13] 그는 인기 d트[14] 넷, 오렌 벤키키와 함께 설계했다.[14]원래 YAML은 프리젠테이션과 연결성(HTML, XML, SGML 등)을 위한 마크업 언어가 급증하는 시대에 출시되었기 때문에 '아직다른 마크업 언어'를 의미한다고 한다.[15]초기 명칭은 아직 또 다른 구조와의 마크업 언어로서 그 목적을 언급하면서 기술 지형을 로 지칭하기 위한 것이었으나, 이후 문서 마크업이 아닌 데이터 지향적 목적을 구분하기 위해 재귀적 약어인 YAML Ain't Markup Language로 용도 변경되었다.

디자인

구문

공식 사이트에서는 커닝 시트와 전체 사양을 확인할 수 있다.[17]다음은 기본 요소의 개요다.

YAML은 일부 제어 문자를 제외한 전체 유니코드 문자 집합을 수용하며 UTF-8, UTF-16 또는 UTF-32 중 하나로 인코딩할 수 있다(UTF-32는 의무사항은 아니지만, 파서에게 JSON 호환성이 요구된다).[18]

  • 공백 들여쓰기는 구조물을 나타내는 데 사용되지만, 들여쓰기의 일부로 탭 문자는 허용되지 않는다.
  • 코멘트는 숫자 부호로 시작한다.#))는 선의 어느 곳에서든 출발하여 끝까지 계속할 수 있다.코멘트는 공백 문자로 다른 토큰과 구분되어야 한다.[19]# 문자가 문자열 내부에 나타나면 숫자 부호(숫자 기호)가 된다.#)문학.
  • 리스트 멤버는 선행 하이픈으로 표시된다(-한 줄에 한 명씩 멤버가 있는 )
    • 리스트는 또한 대괄호로 텍스트를 둘러싸서 지정할 수 있다.[...]각 항목이 쉼표로 구분된 경우
  • 연관 배열 항목은 양식 콜론스페이스(한 줄당 하나의 항목으로 값)를 사용하여 표시된다.YAML은 다음과 같은 URL 스타일 문자열을 위해 콜론 뒤에 공백이 필요하다.http://www.wikipedia.org인용문으로 동봉할 필요 없이 표현될 수 있다.
    • 물음표는 "?key: value" 형태로 키 앞에 쓰여 인용문 없이 키에 선행 대시, 대괄호 등을 포함할 수 있다.
    • 연관 배열은 또한 곱슬 가새로 둘러싸인 텍스트로 지정할 수 있다.{...}() 키를 콜론 및 쉼표로 구분한 항목으로 구분한 경우(JSON과의 호환성을 유지하기 위해 공간이 필요하지 않음).
  • 문자열(YAML의 스칼라 중 한 가지 유형)은 일반적으로 인용되지 않지만 이중 인용문(Double Quote)으로 묶을 수 있다.") 또는 단일 눈금(single-sumbers)').
    • 이중 인용문 내에서 특수 문자는 백슬래시로 시작하는 C형 탈출 시퀀스로 나타낼 수 있다.\문서에 따르면 지원되는 8진 탈출구는\0.
    • 작은따옴표 내에서 지원되는 유일한 이스케이프 시퀀스는 두 배의 작은따옴표임('') 단일 인용문 자체를 에서와 같이 나타냄'don''t'.
  • 블록 스칼라는 보존할 선택적 수식어를 사용하여 들여쓰기로 구분된다( ) 또는 접기(>) 새로운 선.
  • 단일 스트림 내의 여러 문서는 세 의 하이픈으로 구분된다.---).
    • 3주기 (...) 선택적으로 스트림 내에서 문서를 종료하십시오.
  • 반복된 노드는 처음에 앰퍼샌드로 표시된다.&() 및 이후 별표를 사용하여 참조().*).
  • 노드에는 더블 느낌표를 사용하여 유형 또는 태그로 라벨을 표시할 수 있다.!!) 다음에 문자열로, URI로 확장할 수 있다.
  • 스트림의 YAML 문서는 백분율 기호로 구성된 '직접'이 선행할 수 있다().%) 다음에 이름 및 공백으로 구분된 매개변수가 표시된다.YAML 1.1에는 두 가지 지침이 정의되어 있다.
    • %YAML 지시어는 주어진 문서에서 YAML 버전을 식별하는 데 사용된다.
    • %TAG 지시어는 URI 접두사의 바로 가기로 사용된다.그런 다음 이러한 바로가기를 노드 유형 태그에 사용할 수 있다.

가능한 향후 사양을 위해 두 개의 추가 시그널 문자가 YAML에 예약되어 있다: at 기호(at sign)@) 및 백틱(backtick)`).

기본 구성 요소

YAML은 연관 배열 및 목록을 나타내는 "인라인" 스타일을 제공한다.여기 구성 요소의 샘플이 있다.

기존 블록 형식은 하이픈+스페이스를 사용하여 목록의 새 항목을 시작한다.

--- # 좋아하는 영화 - 카사블랑카 - 노스바이노스웨스트 - 없었던 남자 

옵션 인라인 형식은 쉼표+공백으로 구분되며 괄호로 묶는다(JSON과 유사).[20]

--- # 쇼핑 리스트 [우유를 짜다, 호박 파이, 달걀, 주스] 

키는 콜론+공간에 의해 값에서 분리된다.YAML 데이터 파일에 공통인 들여쓰기 블록은 들여쓰기 및 새 줄을 사용하여 키/값 쌍을 구분한다.YAML 데이터 스트림에서 공통적으로 사용되는 인라인 블록은 쉼표+스페이스를 사용하여 가새 간에 키/값 쌍을 구분한다.

--- # 움푹 들어간 블록   이름을 붙이다: 존 스미스   나이를 먹다: 33 --- # 인라인블록 {이름을 붙이다: 존 스미스,나이를 먹다: 33} 

문자열에는 따옴표가 필요하지 않다.다행 문자열을 쓰는 방법에는 두 가지가 있는데, 하나는 새로운 줄을 보존하는 방법(사용법)이다. (문자) 및 새로운 선을 접는 것(문자 사용)>캐릭터), 두 가지 모두 뉴라인 캐릭터가 뒤따른다.

자료:      언젠가 에일링에서 온 키 큰 남자가 있었다.    Darjeeling으로 가는 버스를 탄 사람        문에 쓰여 있었다.        "제발 바닥에 앉지 마십시오."    그래서 그는 조심스럽게 천장에 앉았다. 

다른 동작을 명시적으로 지정할 수 있지만 기본적으로 (첫 번째 줄의) 선행 들여쓰기 및 후행 공백이 벗겨진다.

자료: >    래핑된 텍스트    접힐 것이다    하나로    단락     빈 선은 그 의미를 나타낸다.    단락이 깨지다 

접힌 텍스트는 새 줄을 공백으로 변환하고 선행 공백을 제거한다.

--- # 스미스 씨네 - {이름을 붙이다: 존 스미스,나이를 먹다: 33} - 이름을 붙이다: 메리 스미스   나이를 먹다: 27 - [이름을 붙이다, 나이를 먹다]: [래 스미스, 4]   # 키를 지원하는 시퀀스 --- # 사람, 성별에 따라 남자들: [존 스미스, 빌 존스] 여성들.:   - 메리 스미스   - 수전 윌리엄스 

물건과 목록은 yaml의 중요한 구성요소로서 혼합될 수 있다.첫 번째 예는 모든 스미스 가족 출신의 주요 가치 대상들의 목록이다.두 번째는 성별에 따른 목록으로, 두 개의 목록을 포함하는 키 가치 객체다.

고급 구성 요소

YAML과 다른 데이터 직렬화 언어의 기능을 구분하는 두 가지 특징은 구조와[21] 데이터 입력이다.

YAML 구조는 하나의 파일 내에 여러 개의 문서를 저장할 수 있고, 반복된 노드에 대한 참조를 사용할 수 있으며, 임의 노드를 키로 사용할 수 있다.[21]

명확성, 컴팩트성 및 데이터 입력 오류 방지를 위해 YAML은 노드 앵커(사용)를 제공한다.&() 및 참조(사용)*). 앵커에 대한 참조는 모든 데이터 유형에 대해 작동한다(아래 예에서 참조할 선박 참조).

아래는 계측기 시퀀서에서 두 단계가 매번 완전히 설명되지 않고 반복적으로 재사용되는 큐의 예다.

--- # 레이저 눈 수술을 위한 시퀀서 프로토콜 - 스텝을 밟다:  &id001                  # 앵커 레이블 &id001 정의     악기를 사용하다:      라식 2000     펄스 에너지:     5.4     맥박변성:   12     반복:      1000     스폿사이즈:        1mm  - 스텝을 밟다: &id002     악기를 사용하다:      라식 2000     펄스 에너지:     5.0     맥박변성:   10     반복:      500     스폿사이즈:        2mm - 스텝을 밟다: *id001                   # 첫 번째 단계(앵커 &id001) 참조 - 스텝을 밟다: *id002                   # 두 번째 단계를 가리킴 - 스텝을 밟다: *id002 

YAML은 단순 유형을 자동 감지하므로 대부분의 YAML 문서에서는 명시적 데이터 입력이 거의 나타나지 않는다.데이터 유형은 코어, 정의, 사용자 정의의 세 가지 범주로 나눌 수 있다.코어는 모든 파서(예: floats, int, 문자열, list, maps, maps 등)에 존재할 것으로 예상되는 파서다.이진 데이터와 같은 많은 고급 데이터 유형은 YAML 규격에서 정의되지만 모든 구현에서는 지원되지 않는다.마지막으로 YAML은 데이터 유형 정의를 사용자 정의 클래스, 구조 또는 원시 요소(예: 쿼드 프리밀 플로트)를 수용하도록 로컬로 확장하는 방법을 정의한다.

YAML은 엔티티의 데이터 유형을 자동 감지하지만, 데이터 유형을 명시적으로 캐스트하고 싶을 때가 있다.가장 일반적인 상황은 숫자, 부울 또는 태그처럼 보이는 단일 단어 문자열을 따옴표로 둘러싸거나 명시적 데이터 형식 태그를 사용하여 모호성을 해제해야 하는 경우다.

--- a: 123                     # 정수 b: "123"                   # 따옴표로 모호한 끈 c: 123.0                   # 부유층 d: !!float 123             # 또한 (!!)로 접두사 앞에 명시적 데이터 유형을 통한 부동액 e: !!스트르 123               # 명시적 활자로 모호한 끈 f: !!스트르                # 명시적 활자를 통한 문자열 g:                      # 부울 참(yaml1.1), 문자열 "Yes"(yaml1).2) h: 응, 바나나 없어.  # 문맥에 의해 모호해진 끈, "예"와 "아니오" 

YAML의 모든 구현이 모든 사양 정의 데이터 유형을 가지는 것은 아니다.이러한 기본 제공 유형은 이중 구획 시길 접두사를 사용한다.!!여기에 표시되지 않는 특히 흥미로운 것은 세트, 순서 지도, 타임스탬프 및 16진법이다.여기 base64로 인코딩된 이진 데이터의 예가 있다.

--- 사진을: !!binary     R0lGODHDQ아이아아아안   Z2SWAAAADQAIAAACF4SDGQ   ar3xxbJ9p0qa7R0YxwzaFME   1IAADS= 

YAML의 많은 구현은 객체 직렬화를 위한 사용자 정의 데이터 유형을 지원할 수 있다.로컬 데이터 유형은 범용 데이터 유형이 아니지만 YAML 파서 라이브러리를 사용하여 응용 프로그램에서 정의된다.로컬 데이터 유형에서 느낌표(단일) 사용!).

--- myObject: !myClass {이름을 붙이다: 조.,나이를 먹다: 15 } 

데이터 구조 계층 구조는 윤곽선 삽입에 의해 유지된다.

--- 영수증:     Oz-Ware 구매 송장 날짜를 잡다:        2012-08-06 고객:     first_name:   도로시     family_name:  게일  항목들:     - part_no:   A4786       설명하다:   워터 버킷(채움)       값을 매기다:     1.47       수량:  4      - part_no:   E1628       설명하다:   하이힐 "루비" 슬리퍼       사이즈를 맞추다:      8       값을 매기다:     133.7       수량:  1  대금 청구서:  &id001     거리:               123 토네이도 골목             스위트 16     도회:   이스트 센터빌     :  KS  배까지:  *id001  특별배달:  >     노란 벽돌 따라하기     에메랄드 시티로 가는 길.     에 주의하지 마십시오.     막후 실력자 ... 

문자열에는 따옴표로 인클로저가 필요하지 않다는 점에 유의하십시오.병렬 원소가 동일한 왼쪽 정당성을 가지며 계층적으로 중첩된 원소가 추가로 들여쓰기되는 한 들여쓰기의 특정 공간 수는 중요하지 않다.이 샘플 문서는 7개의 최상위 키와 연관 배열을 정의한다. 키 중 하나인 "항목"은 2개 요소 목록을 포함하고 있으며, 각 요소 자체는 서로 다른 키를 가진 연관 배열이다.관계 데이터 및 중복 제거가 표시됨: "선적" 연관 배열 콘텐츠는 "선적" 연관 배열의 콘텐츠에서 복사됨(앵커에 의해 표시된 대로)&() 및 참조(*) 레이블.가독성을 위해 옵션으로 빈 줄을 추가할 수 있다.단일 파일/스트림 내에 여러 개의 문서가 존재할 수 있으며, 다음으로 구분됨---. 선택 사항...파일 끝에서 사용될 수 있다(파이프를 닫지 않고 스트리밍 통신의 끝을 신호하기 위해 필요함).

특징들

들여쓰기 구분

YAML은 주로 구조물의 윤곽선 삽입에 의존하기 때문에 특히 구분자 충돌에 내성이 있다.YAML이 스칼라 값으로 따옴표와 가새에 대한 불감증은 단순히 블록 리터럴로 들여쓰기만 하면 XML, JSON 또는 심지어 YAML 문서를 YAML 문서 안에 담을 수 있다는 것을 의미한다(사용). 또는>):

--- 예시: >         HTML을 수정하지 않고 YAML로 전환 메세지:            <블록쿼트 스타일="blockquote style="the: 기울임꼴 1em serif">         <p>"3은 항상 2보다 크지만            2"라는 큰 값에도 불구하고         (p)--Author Unknown(작성자 알 수 없음)         </블록쿼트> 날짜를 잡다: 2007-06-01 

YAML은 모든 내부 인용 부호를 인용 및 이스케이프하여 JSON에 배치할 수 있다.YAML은 예약된 문자를 이스케이프하여 XML로 배치할 수 있다.<,>,&,',") 및 공백 변환 또는 CDATA 섹션에 배치.

비계층적 데이터 모델

각 자식 노드가 하나의 부모를 갖는 계층적 모델에서만 데이터를 나타낼 수 있는 JSON과는 달리, YAML은 또한 동일한 데이터의 반복을 해당 지점에 중복 입력하기보다는 트리의 두 개 이상의 지점에서 참조할 수 있는 간단한 관계형 체계를 제공한다.이는 XML에 내장된 시설 IDREF와 유사하다.[22] 그런 다음 YAML 파서는 이러한 참조를 읽을 때 암시하는 완전하게 채워진 데이터 구조로 확장하므로, 파서를 사용하고 있는 프로그램은 참조를 확장하지 않는 XML 프로세서와 달리 관계형 인코딩 모델을 인식할 필요가 없다.이러한 확장은 가독성을 향상시키는 동시에 많은 매개변수가 순차적인 일련의 기록에서 동일하게 유지되는 구성 파일이나 처리 프로토콜의 데이터 입력 오류를 줄일 수 있다.송장의 "선적" 및 "선적" 레코드가 거의 항상 동일한 데이터인 경우를 예로 들 수 있다.

현실적 고려

YAML은 회선 지향적이기 때문에 기존 프로그램의 비정형 출력을 YAML 형식으로 변환하는 것이 간단하고 원본 문서의 모양을 많이 유지하도록 하는 경우가 많다.균형을 맞추기 위해 닫는 태그, 가새 또는 따옴표가 없기 때문에, 일반적으로 세련되지 않은 프로그램 내에서 분산된 인쇄 문장에서 직접 잘 형성된 YAML을 생성하기 쉽다.마찬가지로 공백 구분 기호는 grep, AWK, Perl, Ruby, Python의 선 지향 명령을 사용하여 YAML 파일의 빠르고 더티 필터링을 용이하게 한다.

특히 마크업 언어와 달리 연속적인 YAML 라인의 청크는 YAML 문서 자체가 잘 형성되는 경향이 있다.따라서 문서 전체를 처리할 필요가 없는 파서(예: 태그 열기 및 닫기, 인용 및 이스케이프 문자 탐색)는 내부에서 특정 레코드를 추출하기 전에 매우 쉽게 작성할 수 있다.이 속성은 특히 단일 상태 비저장 패스, 전체 데이터 구조가 너무 커서 메모리에 보관할 수 없는 파일의 기록, 또는 하나의 항목을 추출하기 위해 전체 구조를 재구성하는 데 비용이 엄청나게 많이 들 때 편리하다.

반직관적으로, 비록 그것의 들여쓰기 구분은 깊이 중첩된 계층 구조를 복잡하게 할 수 있지만, YAML은 단일 공간만큼 작은 들여쓰기를 처리하고, 이것은 마크업 언어보다 더 나은 압축을 달성할 수 있다.또한, 극히 깊은 들여쓰기는 완전히 피할 수 있다: 1) 들여쓰기 없이 "인라인 스타일"(즉, JSON과 같은 형식)로 되돌리거나 2) 관계형 앵커로 계층을 풀어서 YAML 파서가 전체 데이터 구조로 투명하게 재구성하는 평평한 형태로 계층 구조를 푸십시오.[citation needed]

보안

YAML은 순수하게 데이터를 나타내는 언어여서 실행 가능한 명령이 없다.[23]검증과 안전한 파싱은 어떤 데이터 언어에서도 본질적으로 가능하지만, 구현은 YAML의 관련 명령어 부족이 상대적인 보안 이득이 될 수 있을 정도로 악명 높은 함정이다.

그러나 YAML은 언어별 태그를 허용하여 임의의 로컬 개체를 해당 태그를 지원하는 파서에 의해 생성할 수 있다.정교한 객체 인스턴스화를 실행할 수 있는 YAML 파서는 주입 공격의 가능성을 열어준다.임의 클래스의 객체를 로드할 수 있는 Perl 파서들은 소위 "축복된" 값을 생성한다.이러한 값을 사용하면 클래스가 과부하 연산자를 사용하는 경우와 같이 예기치 않은 동작을 유발할 수 있다.이로 인해 임의 Perl 코드가 실행될 수 있다.[citation needed]

파이썬이나 루비 파서즈도 상황은 비슷하다.PyYAML 문서에 따르면:[24]

인터넷과 같은 신뢰할 수 없는 원본에서 YAML 문서를 수신할 경우 임의의 Python 개체를 구성하는 기능이 위험할 수 있다는 점에 유의하십시오.함수yaml.safe_load이 기능을 정수나 목록과 같은 단순한 Python 개체로 제한한다. [...]

PyYAML을 사용하면 모든 유형의 Python 개체를 구성할 수 있다.Python 클래스의 인스턴스도 를 사용하여 구성할 수 있다.!!python/object꼬리표를 달다

데이터 처리 및 표현

YAML 규격은 인스턴스 문서를 "표시" 또는 "문자 스트림"[25]으로 식별한다.YAML 인스턴스 문서의 주요 논리 구조는 스칼라, 시퀀스 및 매핑이다.[26]YAML 규격은 또한 이러한 일차 논리 구조에 적용되는 몇 가지 기본적인 제약조건을 나타낸다.예를 들어 사양에 따르면 매핑 키에는 오더가 없다.노드 순서가 중요한 모든 경우 시퀀스를 사용해야 한다.[27]

더욱이, YAML 프로세서에 대한 적합성을 정의함에 있어, YAML 규격은 덤프부하라는 두 가지 기본 작동을 정의한다.모든 YAML 호환 프로세서는 이러한 작업 중 적어도 하나를 제공해야 하며, 선택적으로 두 가지 작업을 모두 제공할 수 있다.[28]마지막으로 YAML 규격은 정보 모델 또는 "표현 그래프"를 정의하는데, API를 통해 사용자가 이 표현을 사용할 필요는 없지만 덤프 및 로드 작업을 모두 처리하는 동안 생성되어야 한다.[29]

다른 직렬화 형식과의 비교

JSON과의 비교

JSON 구문은 YAML을 "공식 하위 집합으로서 JSON 컴플라이언스"로 가져오는 것을 명시적으로 목적으로 공표한 YAML 버전 1.2의 기초다.[2]YAML의 이전 버전은 엄격히 호환되지는 않았지만 불일치는 거의 눈에 띄지 않았으며 대부분의 JSON 문서는 Syck와 같은 일부 YAML 파서들에 의해 구문 분석할 수 있다.[30][31]JSON의 의미구조는 YAML 작성의 선택적 '인라인 스타일'에 해당하기 때문이다.JSON과 같이 확장된 계층 구조는 인라인 스타일로 작성할 수 있지만, 이것은 명확성에 도움이 되는 경우를 제외하고는 권장되는 YAML 스타일이 아니다.

YAML은 주석, 확장 가능한 데이터 유형, 관계형 앵커, 따옴표가 없는 문자열, 키 오더를 보존하는 매핑 유형 등 JSON에 부족한 추가 기능이 많다.

TOML과의 비교

TOML은 .ini 파일 형식의 진보가 되도록 설계되었다.YAML 규격은 2만3449단어, TOML 규격은 3천339단어에 불과하다는 지적을 받았다.[32]이러한 추가 단어와 YAML의 들여쓰기 구문은 TOML에 비해 덜 복잡한 방법으로 쓰일 수 있게 한다. 그리고 YAML[33] 문서의 서열은 들여쓰기로부터 명백하다.

XML과 비교

YAML은 XML에서 찾을 수 있는 태그 속성의 개념이 없다. 대신 YAML은 확장 가능한 유형 선언(개체의 클래스 유형 포함)을 가지고 있다.

YAML 자체는 예를 들어 문서가 자체 검증되도록 허용하는 XML의 언어 정의 문서 스키마 설명자를 가지고 있지 않다.그러나 그 역할을 수행하는 YAML(: 독트린, 콰리파이, Rx)에 대해 외부적으로 정의된 스키마 설명자 언어가 몇 개 있다.더욱이 YAML 문서 자체의 YAML 언어 정의 유형 선언에 의해 제공되는 의미론들은 단순하고 일반적인 상황에서 검증자의 필요성을 종종 완화시킨다.또한, XML로 YAML 데이터 구조를 나타내는 YAXML은 XML 스키마 수입업체와 XSLT와 같은 출력 메커니즘을 YAML에 적용할 수 있도록 한다.

데이터 직렬화 형식의 비교는 YAML을 다른 직렬화 형식과 보다 포괄적으로 비교한다.

소프트웨어(이메일 및 구문 분석기)

고정 데이터 구조의 경우, 데이터와 YAML 특정 장식을 모두 쓰는 인쇄 명령을 사용하여 간단히 YAML 파일을 생성할 수 있다.그러나 다양하거나 복잡한 계층적 데이터를 덤프하려면 전용 YAML 이미터가 바람직하다.마찬가지로 간단한 YAML 파일(예: 키-값 쌍)도 정규식으로 쉽게 구문 분석한다.보다 복잡하거나 다양한 데이터 구조를 위해 공식적인 YAML 파서가 권장된다.

YAML 방출자와 파서들은 많은 인기 있는 언어들을 위해 존재한다.대부분은 모국어 그 자체로 쓰여 있다.몇몇은 C도서관의 언어 바인딩이다; 그것들은 더 빨리 달릴지도 모른다.예전에는 왜 이 좋은 사람이 뻣뻣한가에 의해 쓰여지고 고아가 된 또 다른 C 도서관이 있었는데, 그것은 유지되지 않고, 권위 있는 소스 묶음이 없으며, 웹사이트가 납치되었다.따라서 유일하게 추천할 수 있는 C 도서관은 리비아믈이다.원래 키릴 시모노프에 의해 개발되었다.2018년에는 새로운 유지 관리자인 이안 코다스코와 인기 ö트 넷에 의해 개발이 재개되었다.[34]

C++ 프로그래머는 C 라이브러리 리비람과 C++ 라이브러리 리비람-cpp 중에서 선택할 수 있다.둘 다 완전히 독립적인 코드 베이스와 완전히 다른 API를 가지고 있다.라이브러리 liviaml-cpp는 여전히 주요 버전 번호가 0이며, 이는 버전 0.3 이후 실제로 일어났던 것처럼 API가 언제든지 변경될 수 있음을 나타낸다.내포된 요소의 확장을 목적으로 C#에 쓰여진 문법 중심 구현이 있다.[35]

Perl의 YAML.pm과 같은 YAML의 일부 구현에서는 전체 파일(스트림)을 로드하여 일괄 구문 분석한다.PyYaml과 같은 다른 구현은 게으르고 요청 시에만 다음 문서에 반복된다.문서를 독립적으로 처리할 계획인 매우 큰 파일의 경우, 처리 전에 전체 파일을 인스턴스화하는 것은 불가능할 수 있다.따라서 YAML.pm에서는 때때로 파일을 문서화하여 개별적으로 구문 분석해야 한다.YAML을 사용하면 단순히 문서 끝 마커를 분할할 필요가 있기 때문에, 이는 스스로 한 줄에 세 개의 마침표로 정의된다.이 마커는 내용상 금지되어 있다.[36]

비판

YAML은 상당한 공백, 혼란스러운 기능, 불안정한 디폴트, 복잡하고 모호한 사양으로 인해 비판을 받아왔다.[32][37][38]

  • 구성 파일은 사용자가 알지 못하는 사이에 명령을 실행하거나 내용을 로드할 수 있다.[32]
  • 들여쓰기 오류는 눈치채지 못할 수 있기 때문에 큰 YAML 파일은 편집하기 어렵다.[32]
  • 유형 자동 탐지는 오류의 원인이다.예를 들어 인용되지 않은 경우Yes그리고NO소프트웨어 버전 번호는 공중에 뜨는 것으로 변환될 수 있다.[32][39]
  • 잘린 파일은 터미네이터가 없어 유효한 YAML로 해석되는 경우가 많다.
  • 표준의 복잡성으로 인해 일관성 없는 구현이 이루어졌고 언어를 휴대할 수 없게 되었다.[32][40]

YAML의 인식된 결함과 복잡성으로 인해 엄격함과 같은 보다 엄격한 대안이 등장하게 되었다.YAML 및 중첩 텍스트.[39]

참고 항목

참조

  1. ^ a b c d "Yet Another Markup Language (YAML) 1.0 / Working Draft". 10 Dec 2001.
  2. ^ a b c "YAML Ain't Markup Language (YAML) Version 1.2". YAML.org. Retrieved 2019-05-29.
  3. ^ "Built-in Types — Python 3.9.6 documentation". docs.python.org. Retrieved 2021-08-19.
  4. ^ "Standard built-in objects - JavaScript MDN". developer.mozilla.org. Retrieved 2021-08-19.
  5. ^ corob-msft. "Built-in types (C++)". docs.microsoft.com. Retrieved 2021-08-19.
  6. ^ "The Official YAML Web Site". yaml.org.
  7. ^ "Setting up Vim for YAML editing". arthurkoziel.com.
  8. ^ "Yaml Mode". EmacsWiki. 2015-06-12. Retrieved 2016-12-05.
  9. ^ aukaost. "Pretty YAML - Packages - Package Control". Packagecontrol.io. Retrieved 2016-12-05.
  10. ^ "yaml Eclipse Plugins, Bundles and Products - Eclipse Marketplace". Marketplace.eclipse.org. Retrieved 2016-12-05.
  11. ^ Ruth Kusterer. "NetBeans IDE - Ruby and Ruby on Rails Development". Netbeans.org. Retrieved 2016-12-05.
  12. ^ "YAML Ain't Markup Language". September 24, 2006. Archived from the original on 2006-09-24.
  13. ^ Evans, Clark (May 11, 2001). "YAML Draft 0.1". Yahoo! Tech groups: sml-dev. Retrieved 2019-03-21.
  14. ^ a b "YAML Ain't Markup Language: About". YAML.org. Retrieved 2019-05-29.
  15. ^ "Yet Another Markup Language (YAML) 1.0". YAML.org. Retrieved 2019-05-29.
  16. ^ "Yet Another Markup Language (YAML) 1.0". stackoverflow.com. Retrieved 2021-03-24.
  17. ^ "YAML 1.1 Reference Card". YAML.org. Retrieved 2019-05-29.
  18. ^ "YAML Ain't Markup Language (YAML) Version 1.2". YAML.org. Retrieved 2019-05-29.
  19. ^ "YAML Ain't Markup Language (YAML) Version 1.2". YAML.org. Retrieved 2019-05-29.
  20. ^ "Cloud Based Management apps". JigoCloud.com. Archived from the original on 2016-09-17. Retrieved 2016-09-28.
  21. ^ a b "YAML 1.2 specification of Structures". YAML.org. Retrieved 2019-05-29.
  22. ^ "Extensible Markup Language (XML) 1.0 (Second Edition)". W3.org. Retrieved 27 May 2015.
  23. ^ 제안된 "수익" 태그는 간단한 산술 계산을 제공할 것이다.
  24. ^ "PyYAML Documentation, Loading YAML". Pyyaml.org. Retrieved 2016-09-28.
  25. ^ "Ain't Markup Language (YAML) Version 1.1". YAML.org. Retrieved 2019-05-29.
  26. ^ YAML 유형 저장소에 선택적으로 사용할 수 있는 추가 논리 구조가 열거되어 있다."Language-Independent Types for YAML Version 1.1". YAML.org. Retrieved 2019-05-29.YAML 유형 저장소에 태그가 지정된 유형은 선택 사항이기 때문에 순응형 YAML 프로세서에 반드시 필요한 것은 아니다."이러한 태그의 사용은 필수가 아니다."
  27. ^ "YAML Ain't Markup Language (YAML) Version 1.1". YAML.org. Retrieved 2019-05-29.
  28. ^ "Ain't Markup Language (YAML) Version 1.1". YAML.org. Retrieved 2019-05-29.
  29. ^ "YAML Ain't Markup Language (YAML) Version 1.1". YAML.org. Retrieved 2019-05-29.
  30. ^ 비호환성은 다음과 같다:JSON은 UTF-32와 같이 확장된 문자 집합을 허용하고 YAML에 비해 호환되지 않는 유니코드 문자 이스케이프 구문을 가지고 있다; YAML은 쉼표, 동등 문자, 콜론 같은 구분자 뒤에 공간이 필요하지만 JSON은 그렇지 않다.JSON의 일부 비표준 구현에서는 Javascript의 문법을 Javascript의 문법을 포함하도록 확장한다./*...*/평.이러한 에지 케이스를 처리하려면 인라인 YAML로 구문 분석하기 전에 JSON의 가벼운 사전 처리가 필요할 수 있다. [1]도 참조하십시오.
  31. ^ JSON을 SYCK로 구문 분석.예를 들어, 에 유의하십시오.Symfony의 YAML 파서는 JSON과의 주요 비호환성인 [] 또는 {} 구조 내부의 라인 파싱을 지원하지 않는다.
  32. ^ a b c d e f Tournoij, Martin (4 Sep 2016). "YAML: probably not so great after all". Retrieved 16 May 2019.
  33. ^ TOML이 왜 그래?
  34. ^ yaml-core@lists.sourceforge.net, 2018년 6월 27일 메일.
  35. ^ "YAML Grammar for Lexepars".
  36. ^ "YAML Ain't Markup Language (YAML) Version 1.2 # 9.1.2 Document Markers". YAML.org. Retrieved 2019-05-29.
  37. ^ "That's a lot of YAML". Retrieved 16 May 2019.
  38. ^ "YAML sucks". Retrieved 16 May 2019.
  39. ^ a b "The Norway Problem - why StrictYAML refuses to do implicit typing and so should you". Retrieved 3 June 2020.
  40. ^ "YAML Test Matrix".

외부 링크