YAML-퀵 가이드

YAML Ai n't Markup Language는 데이터에 대한 사용자의 기대와 일치하는 데이터 직렬화 언어입니다. 인간 친화적으로 설계되었으며 다른 프로그래밍 언어와 완벽하게 작동합니다. 데이터를 관리하는 데 유용하며 유니 코드 인쇄 가능 문자를 포함합니다. 이 장에서는 YAML에 대한 소개와 기능에 대한 아이디어를 제공합니다.

체재

아래에 표시된 텍스트를 고려하십시오.

Quick brown fox jumped over the lazy dog.

이에 대한 YAML 텍스트는 다음과 같이 표시됩니다.

yaml.load(Quick brown fox jumped over the lazy dog.)
>>'Quick brown fox jumped over the lazy dog.'

YAML은 문자열 형식의 값을 취하고 위에서 언급 한 출력을 나타냅니다.

다음 예제를 통해 YAML의 형식을 이해하겠습니다.

3.1415926의 값을 갖는 "pi"의 다음 포인트 번호를 고려하십시오. YAML에서는 아래와 같이 부동 숫자로 표시됩니다.

>>> yaml.load('3.1415926536')
3.1415926536

아래에 언급 된 것처럼 특정 데이터 구조에 여러 값이로드된다고 가정합니다.

eggs
ham
spam
French basil salmon terrine

이것을 YAML에로드 할 때 값은 목록 형식 인 배열 데이터 구조로 가져옵니다. 출력은 다음과 같습니다.

>>> yaml.load('''
   - eggs
   - ham
   - spam
   - French basil salmon terrine
   ''')
['eggs', 'ham', 'spam', 'French basil salmon terrine']

풍모

YAML은 문서 마크 업과 데이터 지향 언어를 구별하기 위해 중요한 구성을 가진 마크 업 언어를 포함합니다. YAML의 설계 목표와 기능은 다음과 같습니다.

  • 애자일 방법론의 기본 데이터 구조와 Perl, Python, PHP, Ruby 및 JavaScript와 같은 언어를 일치시킵니다.

  • YAML 데이터는 프로그래밍 언어간에 이식 가능합니다.

  • 데이터 일관된 데이터 모델 포함

  • 사람이 쉽게 읽을 수 있음

  • 단방향 처리 지원

  • 구현 및 사용 용이성

이제 YAML과 그 기능에 대한 아이디어를 얻었으므로 구문 및 기타 작업에 대한 기본 사항을 배우겠습니다. YAML에는 사람이 읽을 수있는 구조화 된 형식이 포함되어 있습니다.

YAML 파일 생성 규칙

YAML에서 파일을 생성 할 때 다음 기본 규칙을 기억해야합니다.

  • YAML은 대소 문자를 구분합니다.

  • 파일에는 .yaml 확장으로

  • YAML은 YAML 파일을 만드는 동안 탭 사용을 허용하지 않습니다. 대신 공백이 허용됩니다.

YAML 파일의 기본 구성 요소

YAML의 기본 구성 요소는 다음과 같습니다.

기존 블록 형식

이 블록 형식은 hyphen+space지정된 목록에서 새 항목을 시작합니다. 아래 표시된 예를 참조하십시오.

--- # Favorite movies
 - Casablanca
 - North by Northwest
 - The Man Who Wasn't There

Inline Format

인라인 형식은 comma and space항목은 JSON으로 묶여 있습니다. 아래 표시된 예를 참조하십시오.

--- # Shopping list
   [milk, groceries, eggs, juice, fruits]

Folded Text

접힌 텍스트는 줄 바꿈을 공백으로 변환하고 선행 공백을 제거합니다. 아래 표시된 예를 참조하십시오.

- {name: John Smith, age: 33}
- name: Mary Smith
  age: 27

YAML의 모든 기본 규칙을 따르는 구조는 다음과 같습니다.

men: [John Smith, Bill Jones]
women:
  - Mary Smith
  - Susan Williams

YAML 기본 요소의 개요

  • YAML 기본 요소의 개요는 다음과 같습니다. YAML의 주석은 (#) 캐릭터.

  • 주석은 공백으로 다른 토큰과 구분되어야합니다.

  • 공백의 들여 쓰기는 구조를 표시하는 데 사용됩니다.

  • 탭은 YAML 파일의 들여 쓰기로 포함되지 않습니다.

  • 목록 멤버는 선행 하이픈 (-).

  • 목록 멤버는 대괄호로 묶이고 쉼표로 구분됩니다.

  • 연관 배열은 콜론을 사용하여 표시됩니다. ( : )키 값 쌍의 형식입니다. 중괄호로 묶여 있습니다.{}.

  • 단일 스트림이있는 여러 문서는 3 개의 하이픈 (---)으로 구분됩니다.

  • 각 파일에서 반복되는 노드는 처음에 앰퍼샌드 (&) 및 별표 (*) 나중에 표시하십시오.

  • YAML에는 항상 목록 구분 기호로 사용되는 콜론과 쉼표와 스칼라 값이있는 공백이 필요합니다.

  • 노드에는 느낌표 (!) 또는 이중 느낌표 (!!) 뒤에 URI 또는 ​​URL로 확장 할 수있는 문자열이옵니다.

프로그래밍 언어를 배울 때 들여 쓰기와 분리는 두 가지 주요 개념입니다. 이 장에서는 YAML과 관련된 두 가지 개념에 대해 자세히 설명합니다.

YAML 들여 쓰기

YAML에는 필수 공백이 포함되지 않습니다. 또한 일관성을 유지할 필요가 없습니다. 유효한 YAML 들여 쓰기는 다음과 같습니다.

a:
   b:
      - c
      -  d
      - e
f:
      "ghi"
  • YAML에서 들여 쓰기로 작업하는 동안 다음 규칙을 기억해야합니다. 흐름 블록은 현재 블록 수준을 둘러싼 적어도 일부 공백이 있어야합니다.

  • YAML의 흐름 콘텐츠는 여러 줄에 걸쳐 있습니다. 흐름 콘텐츠의 시작은{ 또는 [.

  • 차단 목록 항목에는-가 들여 쓰기의 일부로 간주되기 때문에 주변 블록 수준과 동일한 들여 쓰기가 포함됩니다.

의도 된 블록의 예

예제와 함께 들여 쓰기를 보여주는 다음 코드를 관찰하십시오.

--- !clarkevans.com/^invoice
invoice: 34843
date   : 2001-01-23
bill-to: &id001
   given  : Chris
   family : Dumars
   address:
      lines: |
            458 Walkman Dr.
            Suite #292
      city    : Royal Oak
      state   : MI
      postal  : 48046
ship-to: *id001
product:
    - sku         : BL394D
      quantity    : 4
      description : Basketball
      price       : 450.00
   - sku         : BL4438H
      quantity    : 1
      description : Super Hoop
      price       : 2392.00
tax  : 251.42
total: 4443.52
comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

문자열 분리

문자열은 큰 따옴표로 묶인 문자열을 사용하여 구분됩니다. 주어진 문자열에서 개행 문자를 이스케이프하면 완전히 제거되고 공백 값으로 변환됩니다.

이 예에서는 데이터 유형이 문자열 인 배열 구조로 나열된 동물 목록에 중점을 둡니다. 모든 새 요소는 접두사로 언급 된 하이픈 접두사로 나열됩니다.

-
 - Cat
 - Dog
 - Goldfish
-
 - Python
 - Lion
 - Tiger

YAML에서 문자열 표현을 설명하는 또 다른 예는 아래에 언급되어 있습니다.

errors:
      messages:
         already_confirmed: "was already confirmed, please try signing in"
         confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one"
         expired: "has expired, please request a new one"
         not_found: "not found"
         not_locked: "was not locked"
         not_saved:
            one: "1 error prohibited this %{resource} from being saved:"
            other: "%{count} errors prohibited this %{resource} from being saved:"

이 예제는 사용자가 핵심 측면을 언급하고 그에 따라 값을 가져 오는 것만으로 사용할 수있는 일련의 오류 메시지를 참조합니다. 이 YAML 패턴은 YAML을 처음 접하는 사용자가 이해할 수있는 JSON 구조를 따릅니다.

이제 YAML의 구문과 기본 사항에 익숙해 졌으므로 자세한 내용을 살펴 보겠습니다. 이 장에서는 YAML에서 주석을 사용하는 방법을 알아 봅니다.

YAML supports single line comments. 그 구조는 예제의 도움으로 아래에 설명되어 있습니다.

# this is single line comment.

YAML does not support multi line comments. 여러 줄에 대한 주석을 제공하려면 아래 예제와 같이 수행 할 수 있습니다.

# this
# is a multiple
# line comment

댓글의 특징

YAML의 주석 기능은 다음과 같습니다.

  • 주석 처리 된 블록은 실행 중에 건너 뜁니다.

  • 주석은 지정된 코드 블록에 대한 설명을 추가하는 데 도움이됩니다.

  • 주석은 스칼라 내부에 나타나지 않아야합니다.

  • YAML에는 해시 기호 (#)를 이스케이프하는 방법이 포함되어 있지 않으므로 여러 줄 문자열 내에서 주석을 원시 문자열 값에서 나눌 방법이 없습니다.

컬렉션 내의 주석은 다음과 같습니다.

key: #comment 1
   - value line 1
   #comment 2
   - value line 2
   #comment 3
   - value line 3

YAML 블록에 주석을 달기위한 단축키 조합은 다음과 같습니다. Ctrl+Q.

사용하는 경우 Sublime Text editor, 블록을 주석 처리하는 단계는 다음과 같습니다.

블록을 선택하십시오. Linux 및 Windows에서는 "CTRL + /"를 사용하고 Mac 운영 체제에서는 "CMD + /"를 사용합니다. 블록을 실행합니다.

다음을 사용하는 경우 동일한 단계가 적용됩니다. Visual Studio Code Editor. 항상 사용하는 것이 좋습니다Sublime Text Editor 대부분의 운영 체제에서 지원하는 YAML 파일 생성 용이며 개발자 친화적 인 바로 가기 키를 포함합니다.

YAML에는 범위에 들여 쓰기를 사용하는 블록 컬렉션이 포함되어 있습니다. 여기에서 각 항목은 새 줄로 시작합니다. 컬렉션의 블록 시퀀스는 각 항목에dash and space(-). YAML에서 블록 컬렉션 스타일은 특정 표시기로 표시되지 않습니다. YAML의 블록 컬렉션은 포함 된 키 값 쌍의 식별을 통해 다른 스칼라 수량과 구별 할 수 있습니다.

매핑은 JSON 구조에 포함 된 키 값의 표현입니다. 다국어 지원 시스템 및 모바일 애플리케이션의 API 생성에 자주 사용됩니다. 매핑은 다음을 사용하여 키 값 쌍 표현을 사용합니다.colon and space (:).

스칼라 시퀀스의 예를 살펴 보겠습니다. 예를 들어 아래에 표시된 볼 플레이어 목록입니다.

- Mark Joseph
- James Stephen
- Ken Griffey

다음 예제는 스칼라를 스칼라에 매핑하는 것을 보여줍니다.

hr: 87
avg: 0.298
rbi: 149

다음 예제는 스칼라를 시퀀스에 매핑하는 방법을 보여줍니다.

European:
- Boston Red Sox
- Detroit Tigers
- New York Yankees

national:
- New York Mets
- Chicago Cubs
- Atlanta Braves

컬렉션은 아래에 표시된 시퀀스 매핑에 사용할 수 있습니다.

-
   name: Mark Joseph
   hr: 87
   avg: 0.278
-
   name: James Stephen
   hr: 63
   avg: 0.288

컬렉션에서 YAML은 들여 쓰기를 사용하여 공백을 표시하는 대신 명시 적 표시기를 사용하는 흐름 스타일을 포함합니다. 컬렉션의 흐름 순서는 대괄호로 묶인 쉼표로 구분 된 목록으로 작성됩니다. symphony와 같은 PHP 프레임 워크에 포함 된 컬렉션을위한 최고의 일러스트레이션입니다.

[PHP, Perl, Python]

이러한 컬렉션은 문서에 저장됩니다. YAML에서 문서 분리는 세 개의 하이픈 또는 대시 (---)로 표시됩니다. 문서의 끝은 세 개의 점 (…)으로 표시됩니다.

YAML에서 문서 분리는 세 개의 대시 (---)로 표시됩니다. 문서의 끝은 세 개의 점 (…)으로 표시됩니다.

문서 표현은 아래에 언급 된 구조 형식이라고합니다.

# Ranking of 1998 home runs
---
- Mark Joseph
- James Stephen
- Ken Griffey 

# Team ranking
---
- Chicago Cubs
- St Louis Cardinals

공백 조합이있는 물음표는 구조의 복잡한 매핑을 나타냅니다. 블록 컬렉션 내에서 사용자는 대시, 콜론 및 물음표가있는 구조를 포함 할 수 있습니다. 다음 예제는 시퀀스 간의 매핑을 보여줍니다-

- 2001-07-23
? [ New York Yankees,Atlanta Braves ]
: [ 2001-07-02, 2001-08-12, 2001-08-14]

YAML의 스칼라는 다음과 같이 표시되는 리터럴 유형을 사용하여 블록 형식으로 작성됩니다.|). 줄 바꿈 개수를 나타냅니다. YAML에서 스칼라는 접힌 스타일 (>) 여기서 각 선은 접힌 공간을 나타내며 empty line 또는 more indented 선.

새 줄은 리터럴로 유지됩니다.

ASCII Art
--- |
\//||\/||
// || ||__

접힌 줄 바꿈은 more indented linesblank lines 아래와 같이-

>
Sammy Sosa completed another
fine season with great stats.
63 Home Runs
0.288 Batting Average
What a year!

YAML 플로우 스칼라에는 일반 스타일과 인용 된 스타일이 포함됩니다. 큰 따옴표 스타일에는 다양한 이스케이프 시퀀스가 ​​포함됩니다. 흐름 스칼라에는 여러 줄이 포함될 수 있습니다. 줄 바꿈은 항상이 구조에서 접 힙니다.

plain:
This unquoted scalar
spans many lines.
quoted: "So does this
quoted scalar.\n"

YAML에서 태그없는 노드는 특정 유형의 애플리케이션으로 지정됩니다. 일반적으로 사용되는 태그 사양의 예seq, mapstrYAML 태그 저장소의 유형. 태그는 아래에 언급 된 예로 표시됩니다.

정수 태그

이러한 태그에는 정수 값이 포함됩니다. 숫자 태그라고도합니다.

canonical: 12345
decimal: +12,345
sexagecimal: 3:25:45
octal: 014
hexadecimal: 0xC

부동 소수점 숫자

이러한 태그에는 10 진수 및 지수 값이 포함됩니다. 지수 태그라고도합니다.

canonical: 1.23015e+3
exponential: 12.3015e+02
sexagecimal: 20:30.15
fixed: 1,230.15
negative infinity: -.inf
not a number: .NaN

기타 태그

여기에는 다양한 정수, 부동 및 문자열 값이 포함되어 있습니다. 따라서이를 기타 태그라고합니다.

null: ~
true: y
false: n
string: '12345'

다음 전체 길이 예제는 JSON 형식으로 변환하거나 처리하는 데 도움이되는 기호 및 다양한 표현을 포함하는 YAML의 구성을 지정합니다. 이러한 속성은 JSON 문서에서 키 이름이라고도합니다. 이 표기법은 보안 목적으로 만들어졌습니다.

위의 YAML 형식은 기본값, 어댑터 및 호스트의 다양한 속성을 다양한 기타 속성과 함께 나타냅니다. YAML은 또한 생성 된 오류 메시지의 추적을 유지하는 생성 된 모든 파일의 로그를 유지합니다. 지정된 YAML 파일을 JSON 형식으로 변환하면 아래와 같이 원하는 출력을 얻을 수 있습니다.

defaults: &defaults
   adapter:  postgres
   host:     localhost

development:
   database: myapp_development
   <<: *defaults

test:
   database: myapp_test
   <<: *defaults

YAML을 JSON 형식으로 변환하고 출력을 확인하겠습니다.

{
   "defaults": {
      "adapter": "postgres",
      "host": "localhost"
   },
   "development": {
      "database": "myapp_development",
      "adapter": "postgres",
      "host": "localhost"
   },
   "test": {
      "database": "myapp_test",
      "adapter": "postgres",
      "host": "localhost"
   }
}

"<< : *"접두사가있는 기본 키는 동일한 코드 조각을 반복적으로 작성할 필요없이 필요할 때 포함됩니다.

YAML은 프로세스 흐름에 대한 표준 절차를 따릅니다. YAML의 기본 데이터 구조에는 노드와 같은 간단한 표현이 포함됩니다. Representation Node Graph라고도합니다.

직렬화 트리를 만들기 위해 직렬화되는 매핑, 시퀀스 및 스칼라 수량이 포함됩니다. 직렬화를 통해 개체는 바이트 스트림으로 변환됩니다.

직렬화 이벤트 트리는 다음 다이어그램에 표시된대로 문자 스트림의 프리젠 테이션을 작성하는 데 도움이됩니다.

반대 절차는 바이트 스트림을 직렬화 된 이벤트 트리로 구문 분석합니다. 나중에 노드는 노드 그래프로 변환됩니다. 이러한 값은 나중에 YAML 기본 데이터 구조로 변환됩니다. 아래 그림은 이것을 설명합니다-

YAML의 정보는 두 가지 방법으로 사용됩니다. machine processinghuman consumption. YAML의 프로세서는 위에 주어진 다이어그램에서 상호 보완적인 뷰간에 정보를 변환하는 절차를위한 도구로 사용됩니다. 이 장에서는 YAML 프로세서가 주어진 애플리케이션 내에서 제공해야하는 정보 구조를 설명합니다.

YAML에는 데이터 객체를 직렬 형식으로 표현하기위한 직렬화 절차가 포함되어 있습니다. YAML 정보 처리에는 세 단계가 포함됩니다.Representation, Serialization, Presentation and parsing. 각각에 대해 자세히 논의하겠습니다.

대표

YAML은 세 가지 종류의 노드를 사용하는 데이터 구조를 나타냅니다. sequence, mappingscalar.

순서

시퀀스는 순서가 지정된 항목 수를 나타내며 키 값 쌍의 순서없는 연결을 매핑합니다. Perl 또는 Python 배열 목록에 해당합니다.

아래에 표시된 코드는 시퀀스 표현의 예입니다.

product:
   - sku         : BL394D
     quantity    : 4
     description : Football
     price       : 450.00
   - sku         : BL4438H
     quantity    : 1
     description : Super Hoop
     price       : 2392.00

매핑

반면 매핑은 사전 데이터 구조 또는 해시 테이블을 나타냅니다. 동일한 예가 아래에 언급되어 있습니다.

batchLimit: 1000
threadCountLimit: 2
key: value
keyMapping: <What goes here?>

스칼라

스칼라는 문자열, 정수, 날짜 및 원자 데이터 유형의 표준 값을 나타냅니다. YAML에는 데이터 유형 구조를 지정하는 노드도 포함되어 있습니다. 스칼라에 대한 자세한 내용은이 자습서의 6 장을 참조하십시오.

직렬화

사람에게 친숙한 키 순서와 앵커 이름을 쉽게 만드는 YAML에는 직렬화 프로세스가 필요합니다. 직렬화의 결과는 YAML 직렬화 트리입니다. YAML 데이터의 일련의 이벤트 호출을 생성하기 위해 순회 할 수 있습니다.

직렬화의 예는 다음과 같습니다.

consumer:
   class: 'AppBundle\Entity\consumer'
   attributes:
      filters: ['customer.search', 'customer.order', 'customer.boolean']
   collectionOperations:
      get:
         method: 'GET'
         normalization_context:
       groups: ['customer_list']
   itemOperations:
      get:
         method: 'GET'
         normalization_context:
            groups: ['customer_get']

표시

YAML 직렬화의 최종 출력을 프레젠테이션이라고합니다. 인간 친화적 인 방식으로 캐릭터 스트림을 나타냅니다. YAML 프로세서에는 스트림 생성, 들여 쓰기 처리 및 콘텐츠 서식 지정을위한 다양한 프레젠테이션 세부 정보가 포함되어 있습니다. 이 완전한 프로세스는 사용자의 선호도에 따라 진행됩니다.

YAML 프레젠테이션 프로세스의 예는 생성 된 JSON 값의 결과입니다. 더 나은 이해를 위해 아래 주어진 코드를 관찰하십시오-

{
   "consumer": {
      "class": "AppBundle\\Entity\\consumer",
      "attributes": {
         "filters": [
            "customer.search",
            "customer.order",
            "customer.boolean"
         ]
      },
      "collectionOperations": {
         "get": {
            "method": "GET",
            "normalization_context": {
               "groups": [
                  "customer_list"
               ]
            }
         }
      },
      "itemOperations": {
         "get": {
            "method": "GET",
            "normalization_context": {
               "groups": [
                  "customer_get"
               ]
            }
         }
      }
   }
}

파싱

구문 분석은 프리젠 테이션의 역 프로세스입니다. 그것은 캐릭터의 스트림을 포함하고 일련의 이벤트를 생성합니다. 직렬화 이벤트를 발생시키는 프리젠 테이션 프로세스에 도입 된 세부 사항을 버립니다. 잘못된 입력으로 인해 구문 분석 절차가 실패 할 수 있습니다. 기본적으로 YAML이 잘 구성되었는지 확인하는 절차입니다.

아래에 언급 된 YAML 예제를 고려하십시오.

---
   environment: production
   classes:
      nfs::server:
         exports:
            - /srv/share1
            - /srv/share3
   parameters:
      paramter1

세 개의 하이픈으로 나중에 정의 된 다양한 속성이있는 문서의 시작을 나타냅니다.

YAML lint는 YAML의 온라인 파서이며 YAML 구조를 구문 분석하여 유효한지 여부를 확인하는 데 도움이됩니다. YAML lint의 공식 링크는 다음과 같습니다.http://www.yamllint.com/

아래와 같이 구문 분석 결과를 볼 수 있습니다.

이 장에서는 지난 장에서 논의한 절차와 프로세스에 대해 자세히 설명합니다. YAML의 정보 모델은 특정 다이어그램을 사용하여 체계적인 형식으로 직렬화 및 표현 절차의 기능을 지정합니다.

정보 모델의 경우 프로그래밍 환경간에 이식 가능한 응용 프로그램 정보를 나타내는 것이 중요합니다.

위에 표시된 다이어그램은 그래프 형식으로 표시되는 일반적인 정보 모델을 나타냅니다. YAML에서 네이티브 데이터의 표현은 루팅되고 연결되며 태그가 지정된 노드의 방향성 그래프입니다. 유 방향 그래프를 언급하면 ​​유 방향 그래프가있는 노드 집합이 포함됩니다. 정보 모델에서 언급했듯이 YAML은 세 가지 종류의 노드를 지원합니다.

  • Sequences
  • Scalars
  • Mappings

이러한 표현 노드의 기본 정의는 지난 장에서 논의되었습니다. 이 장에서는 이러한 용어의 개략도에 초점을 맞출 것입니다. 다음 시퀀스 다이어그램은 다양한 유형의 태그 및 매핑 노드가있는 범례의 워크 플로우를 나타냅니다.

노드에는 세 가지 유형이 있습니다. sequence node, scalar nodemapping node.

시퀀스

시퀀스 노드는 순차적 아키텍처를 따르며 순서가 지정된 일련의 0 개 이상의 노드를 포함합니다. YAML 시퀀스는 동일한 노드를 반복적으로 포함하거나 단일 노드를 포함 할 수 있습니다.

스칼라

YAML의 스칼라 내용에는 일련의 0이있는 형식으로 표현할 수있는 유니 코드 문자가 포함됩니다. 일반적으로 스칼라 노드에는 스칼라 수량이 포함됩니다.

매핑

매핑 노드에는 키 값 쌍 표현이 포함됩니다. 매핑 노드의 내용에는 키 이름이 고유하게 유지되어야하는 필수 조건과 함께 키-값 쌍의 조합이 포함됩니다. 시퀀스와 매핑은 집합 적으로 컬렉션을 형성합니다.

위에 표시된 다이어그램에 표시된 것처럼 스칼라, 시퀀스 및 매핑은 체계적인 형식으로 표시됩니다.

다양한 기능에 다양한 유형의 문자가 사용됩니다. 이 장에서는 YAML에서 사용되는 구문에 대해 자세히 설명하고 문자 조작에 중점을 둡니다.

표시기 문자

표시기 문자에는 YAML 문서의 내용을 설명하는 데 사용되는 특수 의미가 포함됩니다. 다음 표는이를 자세히 보여줍니다.

Sr. 아니. 특성 및 기능
1

_

블록 시퀀스 항목을 나타냅니다.

2

?

매핑 키를 나타냅니다.

:

매핑 값을 나타냅니다.

4

,

흐름 수집 항목을 나타냅니다.

5

[

흐름 시퀀스를 시작합니다.

6

]

흐름 시퀀스를 종료합니다.

7

{

흐름 매핑을 시작합니다.

8

}

흐름 매핑을 종료합니다.

9

#

주석을 나타냅니다.

10

&

노드의 앵커 속성을 나타냅니다.

11

*

별칭 노드를 나타냅니다.

12

!

노드의 태그를 나타냅니다.

13

|

리터럴 블록 스칼라를 나타냅니다.

14

>

접힌 블록 스칼라를 나타냅니다.

15

`

인용 된 흐름 스칼라를 작은 따옴표로 묶습니다.

16

"

큰 따옴표는 큰 따옴표로 묶인 흐름 스칼라를 둘러 쌉니다.

17

%

사용 된 지시문을 나타냅니다.

다음 예제는 구문에 사용되는 문자를 보여줍니다-

%YAML 1.1
---
!!map {
   ? !!str "sequence"
   : !!seq [
      !!str "one", !!str "two"
   ],
   ? !!str "mapping"
   : !!map {
      ? !!str "sky" : !!str "blue",
      ? !!str "sea" : !!str "green",
   }
}

# This represents
# only comments.
---
!!map1 {
   ? !!str "anchored"
   : !local &A1 "value",
   ? !!str "alias"
   : *A1,
}
!!str "text"

이 장에서는 YAML의 구문 기본 요소의 다음 측면에 대해 학습합니다.

  • 생산 매개 변수
  • 들여 쓰기 공백
  • 분리 공간
  • 무시 된 줄 접두사
  • 라인 폴딩

각 측면을 자세히 이해합시다.

생산 매개 변수

생산 매개 변수에는 특정 생산에 사용되는 매개 변수 세트와 허용 값 범위가 포함됩니다. 다음 생산 매개 변수 목록은 YAML에서 사용됩니다-

들여 쓰기

문자로 표시 n 또는 m문자 스트림은 포함 된 블록의 들여 쓰기 수준에 따라 다릅니다. 많은 프로덕션에서 이러한 기능을 매개 변수화했습니다.

문맥

다음과 같이 표시됩니다. c. YAML은 두 가지 컨텍스트 그룹을 지원합니다.block stylesflow styles.

스타일

s로 표시됩니다. 스칼라 콘텐츠는 다음 5 가지 스타일 중 하나로 표시 될 수 있습니다.plain, double quoted and single quoted flow, literal and folded block.

씹기

다음과 같이 표시됩니다. t. 블록 스칼라는 블록을 트리밍하는 데 도움이되는 많은 메커니즘을 제공합니다.strip, clipkeep. Chomping은 새 줄 문자열 형식을 지정하는 데 도움이됩니다. 블록 스타일 표현을 사용합니다. Chomping 프로세스는 지표의 도움으로 발생합니다. 인디케이터는 줄 바꿈 문자열로 생성되어야하는 출력을 제어합니다. 줄 바꿈은(-) 연산자와 줄 바꿈이 추가됩니다. (+) 운영자.

chomping 프로세스의 예는 다음과 같습니다.

strip: |-
   text↓
clip: |
   text↓
keep: |+
   text↓

지정된 YAML 예제를 구문 분석 한 후 출력은 다음과 같습니다.

들여 쓰기 공백

YAML 문자 스트림에서 들여 쓰기는 0 개 이상의 문자에 의한 줄 바꿈 문자로 정의됩니다. 명심해야 할 가장 중요한 점은 들여 쓰기에 탭 문자가 없어야한다는 것입니다. 들여 쓰기의 문자는 노드 콘텐츠 정보의 일부로 간주되어서는 안됩니다. 더 나은 이해를 위해 다음 코드를 관찰하십시오.

%YAML 1.1
---
!!map {
   ? !!str "Not indented"
   : !!map {
      ? !!str "By one space"
      : !!str "By four\n spaces\n",
      ? !!str "Flow style"
      : !!seq [
         !!str "By two",
         !!str "Still by two",
         !!str "Again by two",
      ]
   }
}

들여 쓰기 후 볼 수있는 출력은 다음과 같습니다.

{
   "Not indented": {
      "By one space": "By four\n spaces\n", 
      "Flow style": [
         "By two", 
         "Still by two", 
         "Again by two"
      ]
   }
}

분리 공간

YAML은 토큰을 구분하기 위해 공백 문자를 사용합니다. 가장 중요한 점은 YAML의 구분에 탭 문자가 포함되어서는 안된다는 것입니다.

다음 코드는 분리 공간의 사용법을 보여줍니다.

{ · first: · Sammy, · last: · Sosa · }
{
   "\u00b7 last": "\u00b7 Sosa \u00b7", 
   "\u00b7 first": "\u00b7 Sammy"
}

무시 된 줄 접두사

빈 접두사는 항상 선행 공백을 포함하는 스칼라 유형에 따라 들여 쓰기를 포함합니다. 일반 스칼라에는 탭 문자가 없어야합니다. 반면에 인용 된 스칼라에는 탭 문자가 포함될 수 있습니다. 블록 스칼라는 완전히 들여 쓰기에 의존합니다.

다음 예제는 체계적인 방식으로 무시 된 줄 접두사의 작동을 보여줍니다-

%YAML 1.1
---
!!map {
   ? !!str "plain"
   : !!str "text lines",
   ? !!str "quoted"
   : !!str "text lines",
   ? !!str "block"
   : !!str "text·®lines\n"
}

블록 스트림에 대한 출력은 다음과 같습니다.

{
   "plain": "text lines", 
   "quoted": "text lines", 
   "block": "text\u00b7\u00aelines\n"
}

라인 폴딩

줄 접기는 가독성을 위해 긴 줄을 끊을 수 있습니다. 짧은 줄이 많을수록 가독성이 향상됩니다. 줄 접기는 긴 줄의 원래 의미에 주목하여 이루어집니다. 다음 예제는 줄 접기를 보여줍니다.

%YAML 1.1
--- !!str
"specific\L\
trimmed\n\n\n\
as space"

다음과 같이 JSON 형식의 줄 접기 출력을 볼 수 있습니다.

"specific\u2028trimmed\n\n\nas space"

YAML에서는 다음과 같이 다양한 문자 스트림을 보게됩니다.

  • Directives
  • 문서 경계 마커
  • Documents
  • 완전한 스트림

이 장에서는 이에 대해 자세히 설명합니다.

지시어

지시문은 YAML 프로세서에서 사용되는 기본 명령입니다. 지시문은 직렬화 트리에 반영되지 않는 주석과 같은 프리젠 테이션 세부 사항입니다. YAML에서는 개인 지시문을 정의하는 방법이 없습니다. 이 섹션에서는 관련 예제와 함께 다양한 유형의 지시문에 대해 설명합니다.

예약 된 지시문

예약 된 지시문은 아래 예와 같이 세 개의 하이픈 문자 (---)로 초기화됩니다. 예약 된 지시문은 JSON의 특정 값으로 변환됩니다.

%YAML 1.1
--- !!str
"foo"

YAML 지시어

YAML 지시문은 기본 지시문입니다. JSON으로 변환 된 경우 가져온 값에는 앞뒤 문자에 슬래시 문자가 포함됩니다.

%YAML 1.1
---
!!str "foo"

문서 경계 마커

YAML은 이러한 마커를 사용하여 하나 이상의 문서가 하나의 스트림에 포함될 수 있도록합니다. 이 마커는 YAML 문서의 구조를 전달하는 데 특별히 사용됩니다. "---"로 시작하는 줄은 새 문서를 시작하는 데 사용됩니다.

다음 코드는 이에 대해 예제로 설명합니다.

%YAML 1.1
---
!!str "foo"
%YAML 1.1
---
!!str "bar"
%YAML 1.1
---
!!str "baz"

서류

YAML 문서는 단일 루트 노드로 표시되는 단일 기본 데이터 구조로 간주됩니다. 지시문, 주석, 들여 쓰기 및 스타일과 같은 YAML 문서의 프리젠 테이션 세부 사항은 포함 된 컨텐츠로 간주되지 않습니다.

YAML에는 두 가지 유형의 문서가 사용됩니다. 이 섹션에서 설명합니다.

노골적인 문서

문서 시작 마커로 시작하여 루트 노드가 표시됩니다. YAML 명시 적 선언의 예는 다음과 같습니다.

---

some: yaml

...

주어진 예에서 "---"및 "…"인 명시 적 시작 및 끝 마커를 포함합니다. 지정된 YAML을 JSON 형식으로 변환하면 아래와 같은 출력이 표시됩니다.

{
   "some": "yaml"
}

암시 적 문서

이러한 문서는 문서 시작 마커로 시작하지 않습니다. 아래 주어진 코드를 관찰하십시오-

fruits:
   - Apple
   - Orange
   - Pineapple
   - Mango

이러한 값을 JSON 형식으로 변환하면 아래와 같이 간단한 JSON 객체로 출력을 얻습니다.

{
   "fruits": [
      "Apple",
      "Orange",
      "Pineapple",
      "Mango"
   ]
}

완전한 스트림

YAML에는 문자 스트림이라고하는 일련의 바이트가 포함됩니다. 스트림은 문자 인코딩을 나타내는 바이트 순서를 포함하는 접두사로 시작합니다. 전체 스트림은 문자 인코딩이 포함 된 접두사로 시작하고 주석이 이어집니다.

완전한 스트림 (문자 스트림)의 예는 다음과 같습니다.

%YAML 1.1
---
!!str "Text content\n"

각 프리젠 테이션 노드에는 anchortag. 노드 속성은 문자 스트림에서 생략 된 노드 내용으로 지정할 수 있습니다.

노드 표현의 기본 예는 다음과 같습니다.

%YAML 1.1
---
!!map {
   ? &A1 !!str "foo"
   : !!str "bar",
   ? !!str &A2 "baz"
   : *a1
}

노드 앵커

anchor 속성은 나중에 참조 할 수 있도록 노드를 나타냅니다. 노드에서 YAML 표현의 문자 스트림은ampersand (&)지시자. YAML 프로세서는 표현 세부 사항이 구성된 앵커 이름을 보존 할 필요가 없습니다. 다음 코드는 이것을 설명합니다-

%YAML 1.1
---
!!map {
   ? !!str "First occurence"
   : &A !!str "Value",
   ? !!str "Second occurence"
   : *A
}

앵커 노드로 생성 된 YAML의 출력은 다음과 같습니다.

---
!!map {
   ? !!str "First occurence"
   : !!str "Value",
   ? !!str "Second occurence"
   : !!str "Value",
}

노드 태그

태그 속성은 노드를 완전히 정의하는 기본 데이터 구조의 유형을 나타냅니다. 태그는 (!) 표시기. 태그는 표현 그래프의 고유 한 부분으로 간주됩니다. 다음 예제는 노드 태그를 자세히 설명합니다-

%YAML 1.1
---
!!map {
   ? !<tag:yaml.org,2002:str> "foo"
   : !<!bar> "baz"
}

노드 내용

노드 콘텐츠는 흐름 콘텐츠 또는 블록 형식으로 표현 될 수 있습니다. 블록 내용은 줄 끝까지 확장되고 들여 쓰기를 사용하여 구조를 나타냅니다. 각 컬렉션 종류는 특정 단일 흐름 컬렉션 스타일로 표현되거나 단일 블록으로 간주 될 수 있습니다. 다음 코드는 이것을 자세히 설명합니다.

%YAML 1.1
---
!!map {
   ? !!str "foo"
   : !!str "bar baz"
}

%YAML 1.1
---
!!str "foo bar"

%YAML 1.1
---
!!str "foo bar"

%YAML 1.1
---
!!str "foo bar\n"

이 장에서는 내용을 표현하는 데 사용되는 다양한 스칼라 유형에 초점을 맞출 것입니다. YAML에서 주석은 스칼라 콘텐츠 앞이나 뒤에 올 수 있습니다. 주석은 스칼라 내용에 포함되지 않아야한다는 점에 유의해야합니다.

모든 흐름 스칼라 스타일은 여러 키에서 사용하는 경우를 제외하고 여러 줄을 포함 할 수 있습니다.

스칼라의 표현은 다음과 같습니다.

%YAML 1.1
---
!!map {
   ? !!str "simple key"
   : !!map {
      ? !!str "also simple"
      : !!str "value",
      ? !!str "not a simple key"
      : !!str "any value"
   }
}

블록 스칼라 헤더의 생성 된 출력은 다음과 같습니다.

{
   "simple key": {
      "not a simple key": "any value", 
      "also simple": "value"
   }
}

문서 마커 스칼라 콘텐츠

이 예의 모든 문자는 내부 공백 문자를 포함하여 내용으로 간주됩니다.

%YAML 1.1
---
!!map {
   ? !!str "---"
   : !!str "foo",
   ? !!str "...",
   : !!str "bar"
}

%YAML 1.1
---
!!seq [
   !!str "---",
   !!str "...",
   !!map {
      ? !!str "---"
      : !!str "..."
   }
]

일반 줄 바꿈은 아래에 주어진 예로 표현됩니다.

%YAML 1.1
---
!!str "as space \
trimmed\n\
specific\L\n\
none"

동일한 JSON 출력은 아래에 언급되어 있습니다.

"as space trimmed\nspecific\u2028\nnone"

YAML의 흐름 스타일은 객체 인스턴스를 생성하기 위해 앵커와 별칭을 사용하는 더 읽기 쉬운 기능을 위해 접는 콘텐츠 줄을 포함하는 JSON의 자연스러운 확장으로 생각할 수 있습니다. 이 장에서는 다음 개념의 흐름 표현에 초점을 맞출 것입니다.

  • 별칭 노드
  • 빈 노드
  • Flow Scalar 스타일
  • 흐름 수집 스타일
  • 흐름 노드

별칭 노드의 예는 다음과 같습니다.

%YAML 1.2
---
!!map {
   ? !!str "First occurrence"
   : &A !!str "Foo",
   ? !!str "Override anchor"
   : &B !!str "Bar",
   ? !!str "Second occurrence"
   : *A,
   ? !!str "Reuse anchor"
   : *B,
}

위에 주어진 코드의 JSON 출력은 다음과 같습니다.

{
   "First occurrence": "Foo", 
   "Second occurrence": "Foo", 
   "Override anchor": "Bar", 
   "Reuse anchor": "Bar"
}

내용이 비어있는 노드는 빈 노드로 간주됩니다. 다음 예제는 이것을 보여줍니다-

%YAML 1.2
---
!!map {
   ? !!str "foo" : !!str "",
   ? !!str "" : !!str "bar",
}

JSON에서 빈 노드의 출력은 다음과 같이 표시됩니다.

{
   "": "bar", 
   "foo": ""
}

흐름 스칼라 스타일에는 큰 따옴표, 작은 따옴표 및 일반 형식이 포함됩니다. 동일한 기본 예는 다음과 같습니다.

%YAML 1.2
---
!!map {
   ? !!str "implicit block key"
   : !!seq [
      !!map {
         ? !!str "implicit flow key"
         : !!str "value",
      }
   ]  
}

위의 예제에 대한 JSON 형식의 출력은 다음과 같습니다.

{
   "implicit block key": [
      {
         "implicit flow key": "value"
      }
   ] 
}

YAML의 흐름 컬렉션은 다른 흐름 컬렉션 내의 블록 컬렉션과 중첩됩니다. 흐름 수집 항목은 다음으로 종료됩니다.comma (,) 표시기. 다음 예제는 흐름 수집 블록을 자세히 설명합니다.

%YAML 1.2
---
!!seq [
   !!seq [
      !!str "one",
      !!str "two",
   ],
   
   !!seq [
      !!str "three",
      !!str "four",
   ],
]

JSON의 흐름 수집에 대한 출력은 다음과 같습니다.

[
   [
      "one", 
      "two"
   ], 
   [
      "three", 
      "four"
   ]
]

JSON과 같은 흐름 스타일에는 시작 및 종료 표시기가 포함됩니다. 속성이없는 유일한 흐름 스타일은 일반 스칼라입니다.

%YAML 1.2
---
!!seq [
!!seq [ !!str "a", !!str "b" ],
!!map { ? !!str "a" : !!str "b" },
!!str "a",
!!str "b",
!!str "c",]

JSON 형식으로 위에 표시된 코드의 출력은 다음과 같습니다.

[
   [
      "a", 
      "b"
   ], 
   
   {
      "a": "b"
   }, 
   
   "a", 
   "b", 
   "c"
]

YAML에는 두 개의 블록 스칼라 스타일이 포함됩니다. literalfolded. 블록 스칼라는 콘텐츠 앞에 헤더가있는 몇 개의 표시기로 제어됩니다. 블록 스칼라 헤더의 예는 다음과 같습니다.

%YAML 1.2
---
!!seq [
   !!str "literal\n",
   !!str "·folded\n",
   !!str "keep\n\n",
   !!str "·strip",
]

기본 동작이있는 JSON 형식의 출력은 다음과 같습니다.

[
   "literal\n", 
   "\u00b7folded\n", 
   "keep\n\n", 
   "\u00b7strip"
]

블록 스타일 유형

네 가지 유형의 블록 스타일이 있습니다. literal, folded, keepstrip스타일. 이러한 블록 스타일은 Block Chomping 시나리오의 도움으로 정의됩니다. 블록 촘핑 시나리오의 예는 다음과 같습니다.

%YAML 1.2
---
!!map {
   ? !!str "strip"
   : !!str "# text",
   ? !!str "clip"
   : !!str "# text\n",
   ? !!str "keep"
   : !!str "# text\n",
}

아래와 같이 JSON에서 세 가지 형식으로 생성 된 출력을 볼 수 있습니다.

{
   "strip": "# text", 
   "clip": "# text\n", 
   "keep": "# text\n"
}

YAML의 Chomping은 다양한 형태로 해석되는 마지막 줄 바꿈과 후행 빈 줄을 제어합니다.

스트리핑

이 경우 최종 줄 바꿈 및 빈 줄은 스칼라 콘텐츠에서 제외됩니다. 촘핑 표시기 "-"로 지정됩니다.

깎는

명시 적 절단 표시기가 지정되지 않은 경우 클리핑은 기본 동작으로 간주됩니다. 마지막 구분 문자는 스칼라의 내용에 유지됩니다. 클리핑의 가장 좋은 예가 위의 예에 나와 있습니다. 개행으로 끝납니다.“\n” 캐릭터.

유지

유지는 "+"촙핑 표시기가있는 추가를 의미합니다. 생성 된 추가 선은 접히지 않습니다. 추가 선은 접히지 않습니다.

시퀀스 스타일을 이해하려면 컬렉션을 이해하는 것이 중요합니다. 컬렉션 및 시퀀스 스타일의 개념은 동시에 작동합니다. YAML의 컬렉션은 적절한 시퀀스 스타일로 표현됩니다. 태그의 올바른 순서를 참조하려면 항상 컬렉션을 참조하십시오. YAML의 컬렉션은 배열에 표시된대로 0으로 시작하는 순차 정수로 인덱싱됩니다. 시퀀스 스타일의 초점은 컬렉션에서 시작됩니다.

우주에있는 행성의 수를 컬렉션으로 만들 수있는 시퀀스로 생각해 봅시다. 다음 코드는 우주에서 행성의 시퀀스 스타일을 표현하는 방법을 보여줍니다.

# Ordered sequence of nodes in YAML STRUCTURE
Block style: !!seq
- Mercury   # Rotates - no light/dark sides.
- Venus     # Deadliest. Aptly named.
- Earth     # Mostly dirt.
- Mars      # Seems empty.
- Jupiter   # The king.
- Saturn    # Pretty.
- Uranus    # Where the sun hardly shines.
- Neptune   # Boring. No rings.
- Pluto     # You call this a planet?
Flow style: !!seq [ Mercury, Venus, Earth, Mars,      # Rocks
                    Jupiter, Saturn, Uranus, Neptune, # Gas
                    Pluto ]                           # Overrated

그런 다음 JSON 형식으로 정렬 된 시퀀스에 대한 다음 출력을 볼 수 있습니다.

{
   "Flow style": [
      "Mercury", 
      "Venus", 
      "Earth", 
      "Mars", 
      "Jupiter", 
      "Saturn", 
      "Uranus", 
      "Neptune", 
      "Pluto"
   ], 
   
   "Block style": [
      "Mercury", 
      "Venus", 
      "Earth", 
      "Mars", 
      "Jupiter", 
      "Saturn", 
      "Uranus", 
      "Neptune", 
      "Pluto"
   ]
}

YAML의 흐름 매핑은 키 값 쌍의 정렬되지 않은 컬렉션을 나타냅니다. 매핑 노드라고도합니다. 키는 고유하게 유지되어야합니다. 흐름 매핑 구조에 중복 된 키가있는 경우 오류가 발생합니다. 키 순서는 직렬화 트리에서 생성됩니다.

흐름 매핑 구조의 예는 다음과 같습니다.

%YAML 1.1
paper:
   uuid: 8a8cbf60-e067-11e3-8b68-0800200c9a66
   name: On formally undecidable propositions of  Principia Mathematica and related systems I.
   author: Kurt Gödel.
tags:
   - tag:
      uuid: 98fb0d90-e067-11e3-8b68-0800200c9a66
      name: Mathematics
   - tag:
      uuid: 3f25f680-e068-11e3-8b68-0800200c9a66
      name: Logic

JSON 형식으로 매핑 된 시퀀스 (순서없는 목록)의 출력은 다음과 같습니다.

{
   "paper": {
      "uuid": "8a8cbf60-e067-11e3-8b68-0800200c9a66",
      "name": "On formally undecidable propositions of Principia Mathematica and related systems I.",
      "author": "Kurt Gödel."
   },
   "tags": [
      {
         "tag": {
            "uuid": "98fb0d90-e067-11e3-8b68-0800200c9a66",
            "name": "Mathematics"
         }
      },
      {
         "tag": {
            "uuid": "3f25f680-e068-11e3-8b68-0800200c9a66",
            "name": "Logic"
         }
      }
   ]
}

위와 같이이 출력을 관찰하면 키 이름이 YAML 매핑 구조에서 고유하게 유지되는 것이 관찰됩니다.

YAML의 블록 시퀀스는 일련의 노드를 나타냅니다. 각 항목은 선행 "-"표시기로 표시됩니다. YAML의 "-"표시기는 공백으로 노드와 분리되어야합니다.

블록 시퀀스의 기본 표현은 다음과 같습니다.

block sequence:
··- one↓
  - two : three↓

블록 시퀀스를 더 잘 이해하려면 다음 예제를 참조하십시오.

예 1

port: &ports
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *ports

JSON 형식의 블록 시퀀스 출력은 다음과 같습니다.

{
   "port": {
      "adapter": "postgres",
      "host": "localhost"
   },
   "development": {
      "database": "myapp_development",
      "adapter": "postgres",
      "host": "localhost"
   }
}

YAML 스키마는 태그 집합의 조합으로 정의되며 비 특정 태그를 해결하기위한 메커니즘을 포함합니다. YAML의 failsafe 스키마는 모든 YAML 문서와 함께 사용할 수있는 방식으로 생성됩니다. 또한 일반 YAML 문서에 권장되는 스키마로 간주됩니다.

종류

두 가지 유형의 비상 안전 스키마가 있습니다. Generic MappingGeneric Sequence

일반 매핑

연관 컨테이너를 나타냅니다. 여기서 각 키는 연결에서 고유하며 정확히 하나의 값에 매핑됩니다. YAML에는 키 정의에 대한 제한이 없습니다.

일반 매핑을 나타내는 예는 다음과 같습니다.

Clark : Evans
Ingy : döt Net
Oren : Ben-Kiki
Flow style: !!map { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki }

JSON 형식의 일반 매핑 구조 출력은 다음과 같습니다.

{
   "Oren": "Ben-Kiki", 
   "Ingy": "d\u00f6t Net", 
   "Clark": "Evans", 
   "Flow style": {
      "Oren": "Ben-Kiki", 
      "Ingy": "d\u00f6t Net", 
      "Clark": "Evans"
   }
}

일반 시퀀스

시퀀스 유형을 나타냅니다. 여기에는 0으로 시작하는 순차 정수로 인덱싱 된 컬렉션이 포함됩니다. 다음과 같이 표현됩니다.!!seq 꼬리표.

Clark : Evans
Ingy : döt Net
Oren : Ben-Kiki
Flow style: !!seq { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki }

이 일반적인 안전 장치 시퀀스에 대한 출력

schema is shown below:
{
   "Oren": "Ben-Kiki", 
   "Ingy": "d\u00f6t Net", 
   "Clark": "Evans", 
   "Flow style": {
      "Oren": "Ben-Kiki", 
      "Ingy": "d\u00f6t Net", 
      "Clark": "Evans"
   }
}

YAML의 JSON 스키마는 대부분의 최신 컴퓨터 언어의 공통 분모로 간주됩니다. JSON 파일을 구문 분석 할 수 있습니다. YAML에서는 JSON 스키마에서 다른 스키마를 고려하는 것이 좋습니다. 그 주된 이유는 사용자 친화적 인 키 값 조합이 포함되어 있기 때문입니다. 메시지는 키로 인코딩 할 수 있으며 필요할 때 사용할 수 있습니다.

JSON 스키마는 스칼라이며 값이 없습니다. JSON 스키마의 매핑 항목은 null이 유효한 것으로 처리되는 일부 키 및 값 쌍의 형식으로 표시됩니다.

null JSON 스키마는 다음과 같이 표시됩니다.

!!null null: value for null key
key with null value: !!null null

JSON 표현의 출력은 다음과 같습니다.

{
   "null": "value for null key", 
   "key with null value": null
}

다음 예제는 부울 JSON 스키마를 나타냅니다.

YAML is a superset of JSON: !!bool true
Pluto is a planet: !!bool false

다음은 JSON 형식으로 동일한 출력입니다.

{
   "YAML is a superset of JSON": true, 
   "Pluto is a planet": false
}

다음 예제는 정수 JSON 스키마를 나타냅니다.

negative: !!int -12
zero: !!int 0
positive: !!int 34
{
   "positive": 34, 
   "zero": 0, 
   "negative": -12
}

JSON 스키마의 태그는 다음 예제로 표시됩니다.

A null: null
Booleans: [ true, false ]
Integers: [ 0, -0, 3, -19 ]
Floats: [ 0., -0.0, 12e03, -2E+05 ]
Invalid: [ True, Null, 0o7, 0x3A, +12.3 ]

아래와 같이 JSON 출력을 찾을 수 있습니다.

{
   "Integers": [
      0, 
      0, 
      3, 
      -19
   ], 
   
   "Booleans": [
      true, 
      false
   ], 
   "A null": null, 

   "Invalid": [
         true, 
         null, 
         "0o7", 
         58, 
         12.300000000000001
   ], 
   
   "Floats": [
      0.0, 
      -0.0, 
      "12e03", 
      "-2E+05"
   ]
}