XML
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
XML은 SGML의 응용 프로파일로, 데이터를 구조화하고 표현하기 위한 마크업 언어이다. 1990년대 중반 월드 와이드 웹의 성장에 따라 SGML의 문제점을 해결하기 위해 개발되었다. XML은 텍스트 기반이며, 다양한 마크업 언어의 기반이 되며, 스키마 언어를 제공하여 문서의 유효성을 검사한다. XML은 웰 폼(well-formed) 규칙과 유효성(validity) 규칙을 가지며, 여러 관련 규격과 프로그래밍 인터페이스를 통해 활용된다. XML은 장황함, 복잡성, 처리 비용 등의 이유로 비판을 받기도 한다.
더 읽어볼만한 페이지
- 표현 계층 프로토콜 - MIME
MIME은 다양한 인터넷 프로토콜에서 메시지의 형식과 내용을 설명하는 인터넷 표준으로, 메시지 내용의 타입과 서브타입을 정의하는 `Content-Type` 헤더와 바이너리 데이터 변환 방식을 지정하는 `Content-Transfer-Encoding` 헤더 등을 포함하여 다양한 메시지 타입과 첨부 파일, 문자 인코딩을 지원한다. - 표현 계층 프로토콜 - 애플 파일링 프로토콜
애플 파일링 프로토콜(AFP)은 애플 기기 간 파일 공유를 위해 개발된 프로토콜로, AppleTalk에서 TCP/IP를 지원하며 유니코드, POSIX 권한, Time Machine 등을 지원한다. - 데이터 모델링 언어 - 임베디드 SQL
임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다. - 데이터 모델링 언어 - 데이터 정의 언어
데이터 정의 언어(DDL)는 SQL에서 테이블, 열, 데이터 형식 등을 정의하고 데이터베이스 스키마를 수정하는 데 사용되는 명령어 집합이며, `CREATE`, `DROP`, `ALTER`, `TRUNCATE` 등의 명령어를 포함하고 데이터 구조를 정의하는 다양한 형식 언어들을 포괄하는 의미로도 사용된다. - 데이터 직렬화 포맷 - S-표현식
S-표현식은 Lisp 구문에서 소스 코드와 데이터를 표현하는 기본 구조로, 원자와 `(x . y)` 형태의 표현식으로 정의되며, 이진 트리 표현, 다양한 데이터 형식 지원, 그리고 여러 분야에서 활용된다. - 데이터 직렬화 포맷 - YAML
YAML은 2001년에 제안된 데이터 직렬화 형식으로, 가독성이 좋고 다양한 프로그래밍 언어에서 사용되며 JSON과 유사하지만, 주석 및 확장 기능 등을 제공하며 직렬화 속도가 느리다는 특징을 갖는다.
2. 역사
SGML의 다재다능함은 인터넷의 성장 이전인 1980년대 말에 초기 디지털 미디어 출판사들에 의해 인지되었다.[99][100] 1990년대 중순, 일부 SGML 실천자들은 당시 새로운 월드 와이드 웹을 경험하였고 웹이 성장할수록 마주칠 가능성이 있던 문제들 중 일부를 SGML이 해결해줄 것이라 믿었다. 댄 코놀리는 1995년에 W3C의 활동 목록에 SGML을 추가하였다. 1996년 중반 썬 마이크로시스템즈의 엔지니어 존 보삭이 선언문을 만들고 협업자들을 모집하였을 때 XML 개발이 시작되었다. 보삭은 SGML과 웹에 모두 경험이 있는 사람들의 작은 공동체와 잘 어울렸다.[101]
XML은 구조적인 데이터를 위한 것으로, 정보를 레이블링하고 분류하며 구조적으로 구성한다.[11] HTML과 유사한 마크업 언어이지만, 태그를 사용자가 정의할 수 있어 확장성이 뛰어나다. 텍스트 기반으로 사람이 읽을 수 있지만, 기계를 위한 처리도 고려되었다. 크기가 커지는 경향이 있지만, 압축 기술을 통해 완화할 수 있다.
주요 디자인 결정은 1996년 7월과 11월 사이에 도달했으며,[102] 당시 XML 사양의 최초 워킹 드래프트가 출판되었다.[103] 추가 디자인 작업이 1997년에 계속되었으며 XML 1.0은 1998년 2월 10일 W3C 권고안이 되었다.
XML은 11명의 구성원으로 구성된 작업 그룹에 의해 컴파일되었으며,[34] 대략 150명의 관심 그룹이 지원했다. 기술적인 논쟁은 관심 그룹 메일링 리스트에서 이루어졌으며, 문제는 합의 또는 실패 시 작업 그룹의 과반수 투표로 해결되었다. 설계 결정과 그 근거에 대한 기록은 마이클 스퍼버그-맥퀸이 1997년 12월 4일에 작성했다.[35] 제임스 클라크는 작업 그룹의 기술 리더로, 특히 빈 요소 <empty /> 구문과 "XML"이라는 이름을 기여했다. 고려되었던 다른 이름으로는 "MAGMA"(Minimal Architecture for Generalized Markup Applications), "SLIM"(Structured Language for Internet Markup) 및 "MGML"(Minimal Generalized Markup Language)이 있었다. 사양의 공동 편집자는 원래 팀 브레이와 마이클 스퍼버그-맥퀸이었다. 프로젝트 중간에 브레이가 넷스케이프와 컨설팅 계약을 맺으면서 마이크로소프트의 격렬한 항의를 받았다. 브레이는 일시적으로 편집자직에서 사임해 달라는 요청을 받았다. 이로 인해 작업 그룹에서 격렬한 논쟁이 벌어졌고, 결국 마이크로소프트의 장 파올리를 세 번째 공동 편집자로 임명함으로써 해결되었다.
XML 작업 그룹은 주로 이메일과 주간 전화 회의를 통해 소통했다. 주요 설계 결정은 1996년 8월부터 11월까지의 짧은 기간 동안 집중적인 작업을 통해 이루어졌으며,[36] 이때 XML 사양의 첫 번째 작업 초안이 발표되었다.[37] 1997년까지 추가적인 설계 작업이 진행되었다.
XML 1.0은 1998년 2월 10일에 W3C 권고안이 되었다. XML 1.1은 2004년 2월 4일에 처음 게시되었으며,[39] 현재는 2006년 8월 16일에 게시된 2판이 최신판이다.
3. 기본 개념
XML은 XML 네임스페이스, XML 스키마, XSLT, XPath 등 다양한 기술의 집합이다. SGML에서 발전된 기술로, HTML에서 XHTML로 발전하는 데 중요한 역할을 했다. 모듈식으로 설계되어 다른 XML 기반 언어와 함께 사용하기 용이하다.
RDF와 시맨틱 웹의 토대가 되며, 라이선스 제약이 없고, 플랫폼 독립적이며, 많은 지원을 받고 있다.
XML의 주된 목적은 임의의 데이터를 직렬화하여 저장, 전송 및 재구성하는 것이다. 서로 다른 시스템이 정보를 교환하려면 파일 형식에 동의해야 하는데, XML은 이 과정을 표준화하여 정보를 표현하기 위한 공통어와 유사한 역할을 한다.[11]
마크업 언어로서 XML은 정보를 레이블링하고 분류하며 구조적으로 구성한다.[11] XML 태그는 데이터 구조를 나타내며 메타데이터를 포함한다. 태그 안에는 XML 표준에서 지정한 방식으로 인코딩된 데이터가 있다.[11] 추가적인 XML 스키마 (XSD)는 XML을 해석하고 유효성을 검사하는 데 필요한 메타데이터를 정의한다.[11] 기본 XML 규칙을 준수하는 XML 문서는 "구성이 올바르며", 스키마를 준수하는 XML 문서는 "유효하다."[11]
3. 1. XML 기반 언어
XML 기반 언어는 매우 다양하며, 대표적인 예시는 다음과 같다.
이 언어들은 단일하게 규정된 방식으로 정의되어, 사전 정보 없이도 해당 언어로 작성된 문서를 수정하거나 유효성을 검사하는 프로그램을 제작할 수 있다.
XML은 인터넷을 통한 데이터 교환에 널리 사용된다. RSS, Atom, Office Open XML, OpenDocument, SVG, COLLADA, XHTML 등 XML 구문을 사용하는 수백 가지의 문서 형식이 개발되었다.[12] XML은 SOAP, XMPP와 같은 통신 프로토콜의 기본 언어를 제공하며, AJAX 프로그래밍 기법에서 사용되는 메시지 교환 형식 중 하나이다.
Health Level 7, OpenTravel Alliance, FpML, MISMO, National Information Exchange Model 등 다양한 산업 데이터 표준이 XML 및 XML 스키마 사양을 기반으로 한다. 출판 분야에서는 Darwin Information Typing Architecture가 XML 산업 데이터 표준이며, XML은 다양한 출판 형식의 기반을 마련하는 데 널리 사용된다.
XML 응용 분야 중 하나는 IWXXM 표준 기반의 운영 기상(OPMET) 정보 전송이다.[13] XML을 적용한 마크업 언어는 매우 많으며( #XML의 응용 절 참조), XHTML[50], DocBook, RSS, MathML, ebXML, SVG, MusicXML 등이 그 예이다. XML은 이러한 개별 XML에 대한 구문 규칙을 나타내는 스키마 언어도 제공한다. 스키마 자체도 XML의 XML Schema 외에, XML이 아닌 표기법으로 간결하고 이해하기 쉽게 작성할 수 있는 RELAX NG도 있다.
4. 중요 용어
다음은 XML 문서에서 사용되는 주요 용어들이다.
- '''(유니코드) 문자''': XML 문서는 유니코드 문자로 이루어진 문자열이다.
- '''프로세서(processor)와 애플리케이션(application)''': ''프로세서''는 마크업을 분석하고 구조화된 정보를 ''애플리케이션''에 넘긴다. 이 프로세서는 흔히 ''XML 파서''라고 불린다.
- '''마크업(markup)과 내용(content)''': XML 문서를 구성하는 문자들은 ''마크업''과 ''내용''으로 나뉜다. 마크업은 `<`로 시작하여 `>`로 끝나거나, `&`로 시작하여 `;`로 끝나는 문자열이다.
- '''태그(tag)''': `<`로 시작하여 `>`로 끝나는 마크업 구조이다. 시작 태그, 끝 태그, 빈 엘리먼트 태그의 세 가지 종류가 있다.
- '''엘리먼트(element)''': 문서의 논리 요소로서, 시작 태그로 시작하여 짝이 되는 끝 태그로 끝나거나, 빈 엘리먼트 태그만으로 이루어진다.
- '''애트리뷰트(Attribute)''': 이름/값 짝으로 이루어진 마크업 구조로 시작 태그 또는 빈 엘리먼트 태그 속에 위치한다.
- '''XML 선언''': XML 문서는 자신에 대한 정보(버전, 인코딩 등)를 선언하는 것으로 시작할 수 있다.
```xml
5. 문자와 이스케이프
XML 문서는 유니코드 문자로만 구성된다. 특별히 제외된 제어 문자(control characters)를 제외하면, 유니코드에 정의된 어떤 문자든 XML 문서 내용에 나타날 수 있다.
XML은 문서의 ''인코딩''을 인식하고 출력하는 기능을 포함한다. 또한, XML은 직접 포함하기 어려운 문자를 표현하기 위한 ''이스케이프'' 기능을 제공한다. 예를 들어 다음과 같은 경우가 있다.
- `<` 와 `&` 문자는 주요 구문 표시자이므로, CDATA 섹션 외부의 콘텐츠에는 직접 나타날 수 없다.
- 일부 문자 인코딩은 유니코드의 하위 집합만 지원한다.
- 작성자가 해당 문자를 입력할 수 없는 경우도 있다.
- 글리프가 다른 문자와 시각적으로 구별하기 어려운 경우도 있다.
XML에서는 이러한 문제를 해결하기 위해 다음과 같은 5개의 미리 정의된 엔티티를 제공한다.
예를 들어, "AT&T"와 같이 회사 이름에 앰퍼샌드를 표현하기 위해 `&`를 사용할 수 있다.
```xml
<회사이름>AT&T회사이름>
```
미리 정의된 엔티티 외에도, ''숫자 문자 참조''를 사용하여 허용된 모든 유니코드 문자를 표현할 수 있다. 예를 들어, 유니코드에서 16진수 4E2D 또는 10진수 20,013인 중국어 문자 "中"은 `中` 또는 `中`로 표현할 수 있다.
하지만, `�` (널 문자)는 숫자 문자 참조를 사용하더라도 XML에서 허용되지 않는 제어 문자 중 하나이므로 사용할 수 없다.[19]
5. 1. 인코딩 감지
유니코드 문자 집합은 UTF-8, UTF-16 등 다양한 방식으로 부호화(인코딩)될 수 있다.[104] XML은 유니코드가 정의한 어떤 인코딩이든 사용하는 것을 허용하며, 문자들이 유니코드에 나타나는 다른 인코딩도 사용할 수 있다. XML은 XML 프로세서가 사전 지식 없이 어느 인코딩이 사용되고 있는지 결정하는 메커니즘을 제공한다.[105]5. 2. 주석 사용
주석은 다른 마크업 바깥 어디에나 나타날 수 있다. XML 선언 전에는 주석이 올 수 없다. 주석은 ``로 끝난다. SGML과의 호환성을 위해 "--"(이중 하이픈) 문자열은 주석 내에서 허용되지 않으며[20], 주석은 겹쳐질 수 없다. 앰퍼샌드는 주석 내에서 특별한 의미를 갖지 않으므로, 엔티티 및 문자 참조는 인식되지 않으며, 문서 인코딩의 문자 집합 외부의 문자를 나타낼 방법이 없다.유효한 주석의 예는 다음과 같다.
``
5. 3. 국제어 사용
XML 1.0과 XML 1.1은 요소 이름, 속성, 주석, 문자 데이터, 처리 명령어에서 거의 모든 유니코드 문자를 직접 사용할 수 있도록 지원한다.[11] 이는 XML이 다양한 언어의 텍스트를 포함하는 문서를 작성하는 데 매우 유용하다는 것을 의미한다. 예를 들어, 다음과 같이 한자와 키릴 문자를 포함하는 XML 문서를 작성할 수 있다.```xml
<俄语>данные俄语>
UTF-8과 UTF-16과 같은 유니코드 문자 인코딩을 지원하므로, XML은 영어 외 다른 언어를 쉽게 다룰 수 있게 되었다.[51]
6. 웰 폼(Well-formed) 문서와 유효 XML 문서
XML 명세는 XML 문서를 잘 구성된 텍스트로 정의하며, 이는 명세에 제공된 구문 규칙 목록을 충족함을 의미한다.[106]
핵심 사항은 다음과 같다.
- 문서는 올바르게 인코딩된 합법적인 유니코드 문자만 포함한다.
- `<` 및 `&`와 같은 특수 구문 문자는 마크업 경계 역할을 수행할 때를 제외하고는 나타나지 않는다.
- 요소를 구분하는 시작 태그, 종료 태그 및 빈 요소 태그는 올바르게 중첩되어 있으며, 생략된 태그가 없고 겹치는 태그도 없다.
- 태그 이름은 대소문자를 구분한다. 시작 태그와 종료 태그는 정확히 일치해야 한다.
- 태그 이름은 `!"#$%&'()*+,/;<=>?@[\]^`
