일반적인 프로필 언어: INI, XML, JSON, YAML

8836 단어
https://dhpo.github.io/2018/02/03/%E5%B8%B8%E8%A7%81%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-XML-JSON-INI%E4%B8%8EYAML/
어제 Hexo 블 로 그 를 만 들 었 는데 Hexo 자체 든 Next 테마 든 프로필 이 YAML 언어 를 사용 하 는 것 을 발견 했다.
제 블 로 그 를 잘 가 르 치고 자신의 지식 수준 을 향상 시 키 기 위해 YAML 의 기초 문법 을 배우 고 제 가 전에 만 났 던 XML, JSON, INI 등 언어 와 함께 정 리 를 하기 로 했 습 니 다.
머리말
설정 파일 의 주요 역할 은 프로그램 이 실 행 될 때의 인 자 를 제공 하 는 것 입 니 다.이상 적 인 프로필 언어 는 만족 해 야 합 니 다:
  • 인류 가 읽 고 이해 하 는 데 편리 하고 비전문가 들 이 대략적인 문법
  • 을 맞 출 수 있 도록 하 는 것 이 좋다.
  • 강력 한 표 현 력 을 가지 고 키 값 을 제외 하고 배열, 인용 등 표현 방식 도 지원 할 수 있다.등급 관 계 를 표현 할 수 있다
  • 손 으로 때 리 고 IDE
  • 를 사용 하 는 것 을 포함한다.
  • 저장 공간 이 작다

  • 상기 특징 은 흔히 만족 하기 어렵다. 예 를 들 어 문법 이 간단 한 언어 표 현 력 이 강하 지 않 고 추상 적 인 기호 가 많은 언어 는 공간 을 절약 하고 쓰기 효율 을 향상 시 키 는 동시에 공부 하기 어렵다.이러한 성질 에 대한 취 사 는 어느 정도 언어의 사용 장면 을 결정 한다.
    INI
    INI 는 이 언어 중에서 문법 이 가장 간단 하고 제 가 가장 먼저 접 했 습 니 다.유명한 사다리 GoAgent 는 INI 파일 을 사용 하여 설정 한 것 입 니 다. 설정 파일 부분 은 다음 과 같 습 니 다.
    1
    2
    3
    4
    5
    6
    7
    8
    
    [listen]
    ip = 127.0.0.1
    port = 8087
    username =
    password =
    visible = 0
    debuginfo = 0
    ; to be continued
    

    key-value
    INI 의 키 값 대 문법 은: key = value 입 니 다.
    주의해 야 할 것 은 key 는 section 에서 중복 되 지 않 습 니 다. 그 행 위 는 불확실 합 니 다. 전자 가 덮어 쓰 이거 나 직접 오 류 를 보고 할 수 있 습 니 다.하지만 키 는 다른 섹 션 에서 반복 할 수 있 습 니 다.
    section
    INI 는 section 을 사용 하여 간단하게 분할 합 니 다.섹 션 이름 은 괄호 안에 쓰 여 있 습 니 다. 예 를 들 어:
    1
    2
    3
    4
    5
    6
    7
    
    [ServerA]
    enable = 0
    port = 8080
    
    [ServerB]
    enable = 1
    port = 8081
    

    섹 션 을 보면 어느 정도 배열 의 역할 을 할 수 있 습 니 다.
    주석
    INI 의 한 줄 주석 은
    1
    
    ; comment
    

    총결산
    설정 언어 로 서 INI 의 가장 큰 장점 은 간결 하고 알 기 쉬 우 며 프로 그래 밍 을 전혀 접 하지 않 은 사람 도 대략적인 것 을 알 수 있다 는 것 이다.그러나 그 에 따 른 문 제 는 언어 표 현 력 이 부족 해 수조, 층계 관계 등 을 표현 할 수 없다 는 점 이다.따라서 INI 는 구성 내용 이 간단 하고 대중 을 대상 으로 하 는 장면 에 적합 하 다.
    XML
    나 는 자바 로 백 엔 드 를 쓸 때 처음으로 XML 을 사용 하여 SpringMVC 와 Maven 을 설정 하 였 으 며, XML 은 데이터 교환 형식 으로 RSS 등에 서 흔히 볼 수 있다.나 는 XML 에 대한 첫 인상 이 무 거 웠 다. 그것 은 대략 이렇게 생 겼 다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    
      
        Mail 1
        Jimmy
        Hello, world
      
      
      
        Mail 2
        Xkz
        foobar
      
    
    

    기본 문법
    XML 의 key - value 형식 은 value 이 며, XML 에 서 는 보통 을 tag 라 고 부 르 며, 모든 tag 에 대응 하 는 tag 가 닫 혀 있 습 니 다.tag 사이 에 끼 워 넣 을 수 있 습 니 다.위의 예제 에서 하나의 mail - list 의 value 는 두 통 의 mail 이 고 모든 mail 은 title, author, content 등 내용 을 포함한다.이런 층 층 이 덧 붙 여 나무 모양 의 구 조 를 형성 하 였 다.value 에서 의 내용 을 보통 data 라 고 부른다.
    tag 도 속성 을 가 질 수 있 습 니 다.위의 예제 에서 mail 은 중요 한 메 일 인지 아 닌 지 를 나타 내 는 important 속성 을 가지 고 있 습 니 다.tag 의 속성 은 일반적으로 metadata, 즉 '데이터 의 데이터' 라 고 부른다.
    XML 의 주석 은 에 써 야 하 며 여러 줄 이 될 수 있다.
    data vs metadata
    데이터 에 속성 을 쓰 는 지 메타 데이터 에 통 일 된 기준 이 없 는 지예 를 들 어 상기 mail 에서 도 mail 의 author 를 metadata 로 할 수 있 습 니 다.
    1
    2
    3
    4
    
    
      Mail 1
      Hello, world
    
    

    일반적으로 data 는 기본 데이터 이 고 metadata 는 추가 데이터 입 니 다.애매모호 한 상황 에 대해 서 는 너희 자신 도 판단 해 야 한다.
    총결산
    INI 에 비해 XML 의 가장 큰 특징 은 계층 구 조 를 가지 고 복잡 한 계층 관 계 를 표현 할 수 있다 는 것 이다.
    그러나 XML 의 뚜렷 한 결함 중 하 나 는 키 의 중복 성 이다. 키 마다 두 번 씩 나타난다.이런 디자인 은 그 의 미 를 더욱 직관 적 으로 할 수 없 을 뿐만 아니 라 오히려 비전문가 들 을 괴 롭 힐 수 있다.뿐만 아니 라 키 의 중복 으로 인해 쓰기 가 IDE 에 의존 하여 효율 을 높 여야 한다.데이터 교환 언어 로 서 의 군더더기 도 너무 크다.
    따라서 XML 은 파일 트 리 와 같은 복잡 한 등급 관 계 를 표현 하기에 적합 하 다.일반적인 상황 에서 사용 하기에 적합 하지 않 고 데이터 교환 기능 도 JSON 으로 대체 되 고 있다.
    JSON
    JSON 은 제 가 전단 을 쓸 때 만 났 습 니 다. 자 바스 크 립 트 기반 이 있 으 면 JSON 은 쉽게 알 수 있 습 니 다. 자 바스 크 립 트 의 부분 집합 (JS - SON) 으로 볼 수 있 지만 공식 적 인 해석 은 아 닙 니 다.JSON 은 프로필 외 에 도 가장 많이 사용 되 는 데이터 교환 형식 입 니 다.JSON 은 대략 이렇게 생 겼 다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    {
      "mailList":[
        {
          "title": "Mail 1",
          "author": "Jimmy",
          "content": "Hello, World"
        },
        {
          "title": "Mail 2",
          "author": "xkz",
          "content": "foobar"
        }
      ]
    }
    

    기본 문법
    JSON 에는 Object (키 쌍, 사전, 대상) 와 Array (배열) 두 가지 데이터 구조 가 있 습 니 다.
    Object 의 데 이 터 는 키 쌍 입 니 다. 기본 형식 은 {"key": "value"} 입 니 다. key 는 두 개의 따옴표 가 필요 합 니 다. (이렇게 하면 key 에 특수 문자 가 있 을 수 있 습 니 다)키 쌍 사 이 를 쉼표 로 분할 하 다.
    Array 는 집합 으로 그 기본 형식 은 [element1, element2] 이 고 element 는 수치, 문자열 등 기본 형식 일 수도 있 으 며 Array 와 Object 일 수도 있다.
    Object 와 Array 는 끼 워 넣 을 수 있 습 니 다. Object 는 Array 의 요소 (mailList 의 mail) 로 서 Array 는 Object 의 특정한 value (mailList) 일 수도 있 습 니 다.
    주석
    JSON 은 주석 이 없어 요.JSON 이 데이터 교환 을 위해 설 계 했 기 때 문인 지 여 유 를 최소 화해 야 한다.
    그러나 교묘 한 방법 도 있다. 사용 하지 않 는 키 를 만 들 고 주석 내용 을 value 에 쓴다.
    1
    2
    3
    4
    
    {
      "title" : "Mail3",
      "comment": "some comment"
    }
    

    총결산
    내 가 보기에 JSON 의 특징 은 추상 적 이 고 간결 하 다 는 것 이다.추상 은 INI 에 비해 언어 법 이 직관 적 이지 않 고 간결 한 것 은 XML 에 비해 지루 도가 낮 고 좋 은 데이터 교환 형식 이다.
    JSON 은 설명 이 없 는 특징 으로 설정 파일 로 사용 하기에 적합 하지 않 고 데이터 교환 형식 으로 사용 하기에 적합 합 니 다.그래서 아예 js 를 프로필 용 (webpack) 으로 사용 하 는 사람 이 있다.js 를 사용 하면 주석 을 사용 할 수 있 을 뿐만 아니 라 import 다른 파일, if 문 구 를 사용 하고 인용 등 고급 기능 도 사용 할 수 있 습 니 다.그러나 js 는 js 실행 환경 이 있 는 곳 에 만 적 용 됩 니 다. 아마도 nodejs 일 것 입 니 다.
    YAML
    YAML 은 현재 유행 하 는 프로필 형식 입 니 다. 저 는 최근 에 Hexo 와 Docker - Compose 에서 만 났 습 니 다.YAML 은 처음에 파 이 썬 처럼 보 였 는데 들 여 쓰기 로 등급 관 계 를 나 타 냈 기 때문이다.그러나 이 는 논리 적 으로 JSON 과 매우 유사 하고 JSON 이 가지 고 있 지 않 은 특성 을 가지 고 있다.YAML 은 대략 이렇게 생 겼 습 니 다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    users:
      - jimmy
      - xkz
    
    #   
    defaults: &defaults
      adapter:  postgres
      host:     localhost
    
    development:
      database: myapp_development
      <<: test:="" database:="" myapp_test=""> 

    기본 문법
    YAML 은 들 여 쓰기 로 등급 관 계 를 표시 하고 같은 등급 의 들 여 쓰기 가 일치 해 야 합 니 다.들 여 쓰기 빈 칸 만 사용 할 수 있 고 tab 를 사용 할 수 없 지만 빈 칸 은 규정 되 어 있 지 않 습 니 다.
    YAML 의 배열 은 요소 앞 에 '-' (Markdown 과 비슷 하 다) 를 붙 이 는 방식 이다.키 값 이 맞 는 표현 방식 은 JSON 과 차이 가 많 지 않 지만 YAML 의 key 와 문자열 은 따옴표 가 필요 없습니다.
    YAML 의 배열 과 대상 도 끼 워 넣 을 수 있 으 며 논리 적 으로 JSON 과 일치 합 니 다.
    YAML 은 주석 을 사용 할 수 있 으 며 문법 은 #comment (Python 과 유사) 입 니 다.
    인용 하 다.
    일부 복잡 한 프로젝트 의 설정 파일 에 서 는 내용 의 중복 이 자주 발생 합 니 다. 예 를 들 어 여러 서버 에 같은 데이터 베 이 스 를 설정 하고 데이터 베 이 스 를 연결 하 는 설정 자 체 는 ip, 사용자 이름, 비밀번호 등 항목 을 포함 하 며 이 서버 들 은 모두 이 데이터 베 이 스 를 사용 하여 연결 설정 해 야 합 니 다.JSON 에 서 는 모든 서버 설정 에서 만 복사 할 수 있 습 니 다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    {
      "servers":[
        {
          "ip": "192.168.2.1",
          "...": "...",
          "db":{
            "ip": "192.168.1.1",
            "username" : "jimmy",
            "..." : "..."
          }
        },
        {
          "ip": "192.168.2.2",
          "...": "...",
          "db":{
            "ip": "192.168.1.1",
            "username" : "jimmy",
            "..." : "..."
          }
        }
      ]
    }
    

    이렇게 하면 설정 파일 의 여 유 를 초래 할 뿐만 아니 라 수정 할 때 도 번 거 로 우 므 로 모든 서버 를 변경 해 야 합 니 다.따라서 YAML 에 서 는 인용 체 제 를 도입 했다. 모든 서버 는 같은 데이터 베이스 설정 을 인용 하여 공간 을 절약 할 수 있 을 뿐만 아니 라 변경 하기 도 편리 하 다.같은 의미 의 YAML 파일 은 다음 과 같 습 니 다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    db: &database
      ip: 192.168.1.1
      username: jimmy
      # ...
      
    servers:
      - ip: 192.168.2.1
        db: *database
      - ip: 192.168.2.2
        db: *database
    

    그 중에서 &database 의 의 미 는 이곳 에 닻 점 을 설치 하 는 것 이 고 8 번 과 10 번 째 줄 에서 *database 은 이 닻 점 의 값, 즉 db 대상 이다.문법 은 C 와 약간 유사 하 다.
    총결산
    YAML 은 JSON 의 강화 판 이 라 고 할 수 있 는데 주로 주석 과 인용 메커니즘 을 넣 으 면서 눈 부신 네모 난 괄호 와 괄호 를 생략 한 데 나타난다.괄호 대신 들 여 쓰기 로 등급 관 계 를 표현 하면 편집기 나 IDE 로 짝 짓 기 괄호 를 찾 지 않 고 불필요 한 빈 줄 을 줄 이 고 가 독성 을 높 일 수 있 습 니 다.YAML 은 JSON 에 비해 표 현 력 을 강화 하면 서 가 독성 을 높 여 복잡 한 프로젝트 에서 최고의 배치 언어 라 고 할 수 있다.
    총결산
    위의 분석 은 YAML 을 불면 서 다른 언어 를 비판 한 것 같 지만 설정 파일 의 선택 은 실제 사용 장면 을 고려 해 야 하고 보이 지 않 는 바람 은 비 입 니 다.일부 간단 한 장면 에 대해 서 는 INI 가 잘 해결 되 므 로 YAML 을 사용 할 필요 가 없다.전단 프로젝트 에 대해 프로그래머 는 자 바스 크 립 트 의 그 방법 을 잘 알 고 있 습 니 다. JSON 이 잘 어 울 리 는 상황 에서 한 가지 언어 를 더 배 울 필요 가 없습니다. 더 복잡 한 상황 에 대해 서 는 js 를 사용 하 는 것 이 더 좋 은 선택 일 수도 있 습 니 다.특정 언어 성향 이 없 는 복잡 한 프로젝트 는 YAML 이 가장 잘 할 수 있 을 지도 모른다.

    좋은 웹페이지 즐겨찾기