일반적인 프로필 언어: INI, XML, JSON, YAML
어제 Hexo 블 로 그 를 만 들 었 는데 Hexo 자체 든 Next 테마 든 프로필 이 YAML 언어 를 사용 하 는 것 을 발견 했다.
제 블 로 그 를 잘 가 르 치고 자신의 지식 수준 을 향상 시 키 기 위해 YAML 의 기초 문법 을 배우 고 제 가 전에 만 났 던 XML, JSON, INI 등 언어 와 함께 정 리 를 하기 로 했 습 니 다.
머리말
설정 파일 의 주요 역할 은 프로그램 이 실 행 될 때의 인 자 를 제공 하 는 것 입 니 다.이상 적 인 프로필 언어 는 만족 해 야 합 니 다:
상기 특징 은 흔히 만족 하기 어렵다. 예 를 들 어 문법 이 간단 한 언어 표 현 력 이 강하 지 않 고 추상 적 인 기호 가 많은 언어 는 공간 을 절약 하고 쓰기 효율 을 향상 시 키 는 동시에 공부 하기 어렵다.이러한 성질 에 대한 취 사 는 어느 정도 언어의 사용 장면 을 결정 한다.
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 이 가장 잘 할 수 있 을 지도 모른다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.