by 노먼 월시
XML은 구조적 정보가 있는 문서를 나타내는 마크업 언어이다.
구조적 정보는 컨텐츠(단어, 그림 등)와 컨텐츠가 어떤 역할을 수행하는지를 가리키는 것(예를 들면, 섹션의 머리말에 있는 컨텐츠와 각주에 있는 컨텐츠는 그 뜻이 다르다. 즉 그림에 대한 설명이나 데이터베이스 테이블에 있는 컨텐츠와는 다르다는 것이다)을 모두 일컫는다. 거의 모든 문서에는 어느 정도의 구조적 정보가 포함돼 있다.
마크업 언어는 문서의 구조를 나타내는 메커니즘이다. XML 규약(Specification)은 문서에 마크업을 덧붙이는 기준을 정의한다.
문서란 무엇인가?
현재 XML 문서에 기반하거나, 이를 이용해서 많은 애플리케이션을 개발 중인데, 그 이유는 순전히 XML이 우수하기 때문이다(XML이 비교적 신생 언어라는 것을 고려하면 더욱 그렇다)! 우리가 사용하는 “문서”라는 용어는 이처럼 전통적인 문서만을 말하는 것이 아니라, 무수한 다른 XML "데이터 형식“을 지칭하기도 한다. 이 ”데이터 형식“은 벡터 그래픽, e-커머스 처리, 수학의 등식, 객체 메타-데이터, 서버 API, 그리고 수천 가지에 달하는 다른 구조적 정보를 모두 포함한다.
XML과 HTML은 같은 것인가?
아니다. HTML에서는 태그의 의미와 설정이 정해져 있다.
은 첫 번째 표제에 쓰는 태그이고, 는 아무 의미 없다는 뜻이다. W3C는 브라우저 벤더와 WWW 커뮤니티와 연계하여 계속적으로 HTML의 정의를 확장하려고 노력하고 있다. 변화하는 기술에 보조를 맞추고, 웹에서 다양하게 표현하기 위해(스타일시트) 새로운 태그를 도입하고 있다. 하지만 브라우저 벤더에서 구현한 것이 다르고, 호환성이 계속 떨어지고 있어서 이러한 변화는 항상 그 범위가 제한된다. 게다가 네스케이프와 인터넷 익스플로러의 최신 배포판에서만 지원되는 특성이 많아서 다른 브라우저로는 정보를 퍼뜨릴 수가 없다.
XML은 의미나 태그 설정을 지정해 주지 않는다. 사실 XML은 확장 언어를 표현하는 메타언어이다. 즉 XML은 태그와 태그간의 구조적 관계를 정의해 줄뿐이다. 미리 설정된 태그가 없기 때문에 어떤 의미를 띨 것이라고 예상할 수도 없다. XML 문서에서는 의미를 처리하는 애플리케이션이나 스타일시트가 의미를 정의한다.
XML과 SGML과 같은 것인가?
아니다. 일부는 그렇다고 할 수도 있다. XML은 SGML을 응용한 형태라고 볼 수 있기 때문이다. SGML은 ISO 문서처리 표준(ISO8879)의 하나로, Standard Generalized Makeup Language의 약자이다. SGML이 표준이며, 상업적 벤더의 제품을 구입하지 않고도 구조적 문서를 10년 이상 저장할 수 있는 방법이긴 하지만, 웹에서 웹으로 문서를 전송하는데는 적합하지 않았다(그 이유는 여기에서 말하고자 하는 것이 아니므로 설명하지 않는다). XML이 SGML의 응용 형태이므로 SGML 체계에서 XML 문서를 읽어 들일 수 있다. 하지만 XML 문서를 사용하고 이해하기 위해서 반드시 SGML의 특성을 알아야 할 필요는 없다. 한마디로 말하자면, XML은 SGML의 제한된 하나의 형식인 것이다.
기술적인 면에서 볼 때, XML 체계에서 읽어 들이는 문서와 SGML에서 읽어 들이는 문서간에는 약간의 차이가 있을 수 있는데, 태그 옆의 빈 공간을 처리하는 방법이 특히 다를 수 있다.
왜 XML을 사용해야 하는가?
XML을 제대로 평가하기 위해서는 XML이 생겨난 배경을 알아야 하는데, XML은 구조적인 문서를 웹에서 사용하기 위해 생겨났다. XML 대신 HTML과 SGML을 생각해 볼 수 있겠지만, HTML과 SGML은 이러한 목적으로 사용할 때는 실용적이지 않다.
위에서도 언급했듯이, HTML은 의미와 깊이 연결되어 있으며, 임의의 구조를 제공하지 않는다.
SGML은 임의의 구조를 제공하긴 하지만, 웹 브라우저에서 이를 구현하는 것은 너무 힘들다. SGML 체계를 완벽하게 구현해서 크고 복잡한 문제를 해결한다면, 들인 비용에 대한 대가를 얻을 수 있겠지만, 단지 웹에서 구조적 문서를 보기 위해 SGML에 비용을 많이 들일 수는 없다.
그렇다고 XML이 SGML을 완전히 대체할 것이라는 말은 아니다. XML이 웹에서 구조적 문서를 전달하기 위해 고안되었기 때문에, 다른 특성이 결여되었을 수도 있고, 그래서 복잡한 문서를 만들고 오래 저장하기 위해서는 SGML이 더 만족스러운 해결책이 될 수도 있는 것이다. 여러 기구에서 SGML을 XML로 바꾸는 것이 웹 전달의 표준 과정이 될 것이다.
XML의 개발 목표
XML 규약에 XML이 추구하는 목표가 나와 있다: [Section 1.1]
- 인터넷에서 XML을 사용할 수 있어야 한다. 그래서 사용자는 XML 문서를 HTML 문서처럼 쉽고 빠르게 볼 수 있어야 한다. 하지만 이렇게 하려면 XML 브라우저가 HTML 브라우저처럼 강하고 널리 사용되어야 한다는 문제가 있다.
- XML은 여러 애플리케이션을 지원할 수 있다. XML로 저작, 브라우징, 컨텐츠 분석 등을 할 수 있다. 원래 XML은 웹에서 구조적 문서를 전달하기 위해서 만들었지만, 그 활용 분야는 아주 넓다.
- XML은 SGML과 같은 기능을 제공해야 한다. XML 개발자들이 일하는 기구에는 SGML로 된 방대한 자료가 있다. XML은 실용적인 목적으로 고안되어 현재의 표준과 함께 웹에서 구조적 문서를 전송하는 등의 비교적 새로운 문제도 해결할 것이다.
- XML 문서를 처리할 수 있는 프로그램을 쉽게 작성할 수 있어야 한다. 이는 새로운 규약이 등장하는 가운데, 대학에서 컴퓨터 과학을 전공한 유능한 프로그래머가 XML 문서 처리프로그램을 만드는데 걸리는 시간을 2주 정도로 단축해야 한다는 의미이다.
- XML에서 선택사양은 가능한 최소한으로 유지되어야 하며, 가장 이상적인 것은 0이다. 선택사양을 사용하면, 사용자가 문서를 공유하고자 할 때 혼동을 일으키기 때문이다.
- XML 문서는 쉽게 읽을 수 있고 합리적이어야 한다. XML 브라우저가 없는 상황에서 XML 문서를 받게 되었을 때, 평소 사용하던 문서편집기로 그 내용이 무엇인지 알아 볼 수 있어야 하는 것이다.
- XML 디자인 역시 빨리 개발되어야 한다. 현재 개발 노력은 너무 느리다. XML은 당장 필요했고, 이에 따라 디자인 개발이 이뤄지지 않은 상태에서 너무 빨리 개발된 감이 있다.
- XML 디자인은 형식을 갖춰야 하고 간결해야 한다. 4의 규칙에 따라 XML은 확장 백커스-나우어 형식(EBNF)으로 표현되어야 하며, 현대 컴파일러 툴과 기술을 적용할 수 있어야 한다. SGML 문법이 EBNF로 표현될 수 없는 데에는 여러 기술적 요인이 있다. SGML 파서를 만들기 위해서는 잘 사용되지 않고 잘 기능하지도 않는 여러 특성을 다룰 줄 알아야 하지만, XML은 그렇지 않다.
- XML 문서는 작성하기 쉬워야 한다. 시간이 많이 흐르면 XML 컨텐츠를 정교하게 만들고 편집할 수 있는 편집자들이 나타나겠지만, 당장은 아니다. 그 동안엔 XML 문서를 다른 방식으로 만들어야 할 것이다. 즉 텍스트 편집기에서 바로 만들거나, 간단한 셸과 펄 스크립트로 XML 문서를 만들어야 한다.
- XML에서는 간결하다는 것이 별로 중요하지 않다. 몇몇 SGML 언어에서는 SGML 문서의 매뉴얼 키에 입력해야 하는 글자 수를 줄일 수 있지만, XML에서는 지원되지 않는다. 크게 봤을 때 입력하는 글자수를 줄여서 만든 문서와 그렇지 않은 문서는 별로 다를 바 없지만, 이러한 특성을 지원하면 SGML 파서나 SGML을 작성하는 당사자에 큰 부담이 된다. 게다가 요즘의 편집기는 텍스트 입력을 단순화하는 방법을 제공하고 있는 추세이기 때문에 XML에서 간결함이 차지하는 비중은 더욱 낮아질 것이다.
XML은 어떻게 정의되는가?
XML은 수많은 관련 규약으로 정의된다.
확장 마크업 언어(XML) 1.0
- XML의 구문을 정의한다.
XPointer(XML Pointer Language)와 XLink(XML Linking Language)
- 리소스 사이의 링크를 나타내는 표준 방식을 정의한다. HTML의 태그와 같은 단순 링크 외에도 XML에는 여러 리소스간의 링크와, 읽기만 가능한 리소스간의 링크 메커니즘이 있다. XPointer는 리소스 주소를 지정하는 방법을 보여주고, XLink는 둘 이상의 리소스를 연결하는 방법을 보여준다.
Extensible Style Language (XSL)
- XML의 표준 스타일시트 언어를 정의한다.
시간이 지나면서 다른 규약에서 추가적인 요구사항이 늘어나고 있다. 현재는 이름공간(여러 태그 집합에서 태그를 처리), 조회언어(문서에 있는 것을 찾아냄), 스키마 언어(XML에서 태그, DTD의 관계 서술) 등이 추가되고 있다.
규약 이해
대부분의 경우 SGML이나 관련 기술을 잘 알아야만 XML 규약을 읽고 이해할 수 있는 것은 아니다.