XML (eXtensible Markup Language)
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
장점
- 유연성 : 복잡한 데이터 구조와 다양한 데이터 타입을 표현하는데 유리함
- 스키마 검증 : DTD(Document Type Definition)와 XSD(XML Schema)를 통해 데이터의 정확성과 일관성을 보장할 수 있음
- 메타데이터 포함 : 태그와 속성을 통해 풍부한 메타데이터를 포함할 수 있음
- 표준화 : 다양한 산업 표준 준수 및 문서형식으로 많이 사용됨
단점
- 무거움 : 태그 기반 형식으로 인해 데이터 양이 많아질 수 있음
- 복잡성 : 구조가 복잡함
- 유지보수 : 문서를 작성하고 유지보수하는데 더 많은 노력 필요
- 속도 : 파싱 속도가 상대적으로 느릴 수 있음
XML 형식 검증 방식
특정한 규칙을 준수하면 well-formed XML로 간주
- Well-Formedness Check (형식 준수 검증)
- XML 문서가 XML 규격을 따르고 있는지 확인
- 시작 태그와 종료 태그가 일치해야 하며, 태그는 올바르게 중첩되어야 함
- 단일 루트 요소를 가져야 함
- 특수 문자는 적절히 이스케이프 되어야함
- DTD (Document Type Definition)
- XML 문서의 구조와 요소 및 속성의 관계를 정의하는데 사용됨
- XML 문서가 DTD에 정의된 구조를 따르는지 검증
<!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]>
- XSD (XML Schema)
- DTD보다 더 강력하고 유연한 방식으로 XML 문서 검증
- 요소와 속성의 데이터 타입, 기본값, 고유성 등의 조건을 정의
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
JSON (JavaScript Object Notation)
{
"note": {
"to": "Tove",
"from": "Jani",
"heading": "Reminder",
"body": "Don't forget me this weekend!"
}
}
장점
- 간결함 : 더 적은 양의 데이터를 사용하여 표현 가능, 읽기 쉽고 쓰기 쉬움
- 네이티브 JavaScript 지원 : JavaScript에서 JSON은 네이티브 데이터 형식으로 웹개발에 용이
- 속도 : 파싱과 생성 속도가 빠름
- 가벼움 : XML에 비해 오버헤드가 적어 네트워크 전송 효율이 좋음
단점
- 제한된 데이터 타입 : 문자열, 숫자, 배열, 객체, bool, null 등의 기본 타입만 지원
- 스키마 검증의 제한 : JSON 스키마를 통해 데이터 구조를 검증할 수 있지만, XML Schema에 비해 덜 강력함
- 메타데이터 부족 : XML처럼 태그 기반의 풍부한 메타데이터 표현이 어려움
공통점
- 두 형식 모두 데이터의 구조화된 표현을 위해 사용
- 데이터 교환을 위해 사용
- 다양한 프로그래밍 언어에서 파싱 및 생성 라이브러리를 지원
'JS' 카테고리의 다른 글
| Jest를 통해 unit테스트 진행하기 (1) | 2024.07.24 |
|---|---|
| 타입스크립트 컴파일 with readline (2) | 2024.07.23 |
| [Node.js] Process 노드 모듈 (0) | 2024.07.19 |
| [Node.js] 메모리 관리 (0) | 2024.07.18 |
| readline을 통해 입력받기 (0) | 2024.07.15 |