1. XML 의 시작

XML 은 eXtensible Markup Language 로서 SGML(Standardized General Markup Language)의 부분집합이다. XML 은 쉽게 실행하고 사용하는것을 지향하며, 이미 새로운 다양한 표준을 위한 특수한 마크업 언어로 사용되고 있다. 여기에는 수학적인 등식을 표현하기 위한 MathML, 멀티미디어를 표현하기 위한 Synchronized Multimedia Integration Language 등이 있다.

SGML 과 XML 은 문서의 다양한 구성요소들을 그들의 기능과 의미과 함께 태그화하여 표현한다. 예를 들어 레포트는 여러가지 부분으로 나뉠수있다. : 그것은 제목(title) 과 한명이상의 작성자(author), 서문(abstract), 실제 레포트의 내용, 참고자료 목록 등으로 나눌수 있을것이다. 이러한 레포트를 작성하기 위한 마크업 언어는, 그 내용이 서문인지, 제목인지등을 가리킬수있는 태그를 가지고 있어야 한다. 이렇게 함으로서, 어떻게 문서가 실제적으로 출력될지에 대한 물리적인 세부기술에 혼동을 주지 않을것이다. 서문은 문서의 다른 부분보다 작은 폰트와 좁은 폭의 여백으로 출력되어야 할것이다. 그러나 마크업은 보통 이렇게 자세한 세부기술을 하지는 않는다.; 다른 프로그램을 사용하여 마크업 언어를 TEX 와 같은 식자언어로 변환할 수 있을것이고, 정교하게 처리할 수 있을것이다.

XML 은 HTML 과 매우 흡사한 모양을 갖는다; 문서는 하위요소를 포함하는 하나의 요소(element)로 구성된다. 그리고 그 하위요소들은 그들 자신의 내용으로 또 하위요소들을 가질 수 있다. 요소는 문장안에서 < > 안에 존재하는 태그로 표현된다. 요소에는 두가지 표현 방법이 있다. 그중 하나는 <name>Euryale</name> 와 같이 시작태그와 마침태그가 존재하는것이다. 이것은 "Euryale" 내용(content)을 갖는 name 요소를 나타낸다. 이러한 내용에는 일반적인 텍스트 데이터, XML 요소, 또는 이 두가지가 혼합되어 나타날 수 있다. 요소는 또한 아무런 내용도 가지지 않는 공백일수도 있다. 이러한 때에는 <stop/> 과 같이 슬래쉬로 끝나는 하나의 태그로 표현된다. HTML 과는 달리 XML 은 대소문자를 구분한다. 그러므로 stop 과 Stop 은 서로 다른 두개의 요소로 인식된다.

시작태그와 공백태그는, 그 요소와 함께하는 특정값을 갖는 속성(attribute)을 가질 수 있다. 예를 들어 <name lang='greek'>Herakles</name> 은 그 값이 "greek" 인 lang 속성을 갖는 name 요소를 나타낸다. 이것은 속성값이 'latin' 인 <name lang='latin'>Hercules</name> 과 비교될 수 있을것이다.

XML 언어는 DTD (Document Type Definition) 로 정의된다. DTD 는 요소가 가질 수 있는 이름과, 어떤 요소가 서로 중첩될수 있는가등을 정의해준다. DTD 는 또한 각 요소에 나타날수있는 속성과 그 기본값, 그리고 그 값이 생략할 수 있는 값인지 등에 대해 정의한다. HTML 을 예로 들면, LI 요소는 리스트의 목록을 표현할 때 사용되어지는데, 리스트를 표현하는 OL 또는 UL 요소안에서만 사용해야한다. 적합한 파서는 DTD 와 문서를 넘겨받아, 그 문서가 DTD 의 법칙에 잘 맞는지를 검증해주거나, 하나 또는 그 이상의 법칙에 위배되었다는 것을 결정해주게 된다.

XML 을 처리하기 위한 어플리케이션은 두가지 타입으로 구분되어질 수 있다. 가장 간단한 부류는 특정한 하나의 마크업 언어를 조작하기 위한 어플리케이션이다. 예를 들어, 화학관련 프로그램은 MathML 이 아닌, 화학 마크업 언어만을 처리하기를 원할것이다. 이러한 어플리케이션은 하나의 DTD 로 명세화 할수 있으며, 여러종류의 마크업 언어를 핸들링하기 위한 능력은 필요없을 것이다. 이러한 부류는 작성하기가 쉬우며, 이용가능한 파이썬 소프트웨어로 구현하기가 쉬운편이다.

두번째 부류는 좀 더 범용적이며, 어떠한 마크업 언어에 대해서도 핸들링이 가능한 것이다. 선택된 DTD 를 따르는 XML 을 작성하도록 도와주는 '스마트 XML 에디터' 같은 프로그램을 예로 들어보자. 이것은 허용되지 않는 요소를 입력하는것을 막아주어야 할것이고, 커서위치에 놓일수 있는 적절한 요소들을 제안할 수 있을것이다. 이러한 어플리케이션은 어떠한 가능한 XML 기반의 마크업도 핸들링 가능해야 하며, 그러기 위해서는, 사용되는 DTD 를 포함하는 데이터 구조를 가지고 있어야 할것이다. XXX 이러한 형태의 어플리케이션은 현재로선 파이썬으로 구현하기는 어려운 상황이다. (XXX DTD 모듈이 추가되기를 지켜봐야 할것이다...)

XML 의 문법에 대한 자세한 자료는, http://www.w3.org/TR/xml-spec.html 에서 XML 1.0 명세서를 볼 수 있을것이다. 모든 명세서와 마찬가지로, 이것은 매우 형식적이며, XML 을 시작하거나 배우기 위해 보기에는 적합하지가 않다. 표준에 주석이 붙은 버전인 http://www.xml.com/xml/pub/axml/axmlintro.html 이 더 이해하기 쉬울것이다. 또한 여기에는 XML 을 시작하려는 사람에게 적합한 튜토리얼등의 다양한 문서들도 있다.

이 HOWTO 의 나머지 부분에서는, 이미 적절한 전문용어에 익숙하다고 생각할것이며, 대부분의 섹션에서 요소(element) 와 속성(attribute) 등의 XML 용어들을 사용할 것이다. 문서 객체 모델을 다루는 섹션 4에서는, 당신이 관련 문서들을 읽어봤으며, 노드(Node) 등과 같은 것에 친숙하다고 가정할것이다. 그러나 섹션 3을 위해 특별히 Java SAX 도구에 대한 경험을 요구하지는 않는다.

1.1. 관련 홈페이지