본문 바로가기

학습컨텐츠/XML

XML다루기 - 3. XML 문서란?

XML문서라…… 분명히 XML은 그 자체가 data를 관리하는 언어가 아닌 언어를 만드는 메타-언어라고 배웠습니다. 그렇다면 왜 XML로 만든 markup-language의 이름을 쓰지 않고 그냥 XML문서라고 칭할까요?

사실 큰 이유는 없습니다. 실제로 markup-language의 이름을 쓰는 경우도 있어요. WML, cXML, 8MIL 등등 이 그것입니다. 다만, 우리가 XML을 써서 만들 수 있는 markup language가 무수히 많은데 그것의 이름을 일일이 붙이기가 난감해서 그냥 XML로 개발한 언어로 만든 문서들을 XML문서라고 부르는 것입니다.

 

사실 엄밀히 얘기하면 XML문서라는 표현이나 *.xml이란 확장자는 옳지 못합니다. 위에서 예시로 든 xml파일의 경우, BML이란 언어로 만들어졌으므로 BML문서라고 호칭해야 하고 따라서 *.bml 이라는 확장자를 쓰는 것이 개념적으로는 옳은 것입니다. 하지만 우리는 편의상 XML문서라는 말을 쓰고 있지요.

(그렇지만 사실, XML문서는 꼭 XML로 정의된 특정 ML에 맞게 작성될 필요는 없습니다. 이러한 xml문서를 invalid Document라고 하는데 자세한 얘기는 후에 하겠습니다.)

그럼 이제 XML문서가 어떤 식의 구조를 가지는지 알아보도록 합시다.


XML문서의 구조

XML문서의 구조는 크게 서두(Prolog), 엘리먼트(Element), 기타(Misc) 즉, 세 부분으로 나누어집니다.

서두 부분은 해당 문서가 XML 문서임을 명시하는 XML 선언과 XML 응용 프로그램에게 XML문서를 어떻게 처리하라는 정보를 알려주는 프로세싱 지시자(Processing Instruction) 그리고 어떤 마크 업 언어로 작성했는지 알려주는 문서 유형 선언으로 이루어 집니다.


엘리먼트 부분에는 딱 하나의 엘리먼트가 와야만 하는데, 이것을 우리는 루트 엘리먼트(Root element)라고 합니다. 엘리먼트 부분에 있는 다른 엘리먼트들은 모두 루트 엘리먼트의 하위 엘리먼트입니다. 즉, 계층적 구조를 이루게 되겠죠.


기타 부분은 주석, 프로세싱 지시자로 구성되는데 주로 생략되므로 특별히 신경 쓰지 않아도 좋습니다.

예시를 보면서 살펴봅시다. 아래는 booklist.xml이라는 파일입니다.

 

위 XML 문서의 내용을 설명해 드리도록 하겠습니다.


예시 설명- 서두부분
  <?xml version="1.0" encoding="euc-kr"?>
이 부분은 XML 선언이라는 부분입니다. 이 문서가 XML이라는 것을 가르쳐주고 있죠. XML 선언은 생략 가능하지만, 선언하는 것이 권장사항입니다. 선언에는 XML 권고안(Recommendation)의 버전, 문서의 인코딩(encoding) 방식, 그리고 스탠드얼론(standalone) 문서여부에 대해 기술하도록 되어있습니다.

version이란 현재 XML 스펙 1.0을 지원한다는 것이고요. Encoding을 euc-kr이나 ksc5601로 지정하면 한글을 사용할 수 있습니다.
만약 이 부분이 빠지면 한글을 사용하지 못하게 되지요

  <?xml:stylesheet type="text/xsl" href="booklist.xsl"?>
XML 문서에서 <? ... ?> 이런 형태로 사용되는 것을 PI(Processing Instruction)라고 부릅니다. 위의 예시에서 나온 PI는 PI 중에서 가장 많이 사용될 PI인데요. 스타일시트(style sheet)를 지정하는 것입니다. PI란 말 그대로 xml을 Processing, 즉 처리할 때 어떻게 처리할지 지시해주는 부분입니다.
나중에 XML의 장점을 설명할 때 설명드릴 것이지만 XML은 문서의 구조를 나타내는 부분과 포맷팅(formatting), 즉 보여주는 부분이 서로 다릅니다. 위의 PI는 바로 그 포맷팅을 담당하는 것을 가리키는 부분이라고 할 수 있지요.
만약 이 부분을 빼고 문서를 IE에서 볼 경우 특정 포맷이 정해지지 않았기에 그냥 문서의 내용이 보여집니다.

  <!DOCTYPE booklist SYSTEM "booklist.dtd" >
위에서 XML이란 markup언어의 문법을 정의하는 언어라고 설명하였죠. DTD파일이란 markup언어의 문법을 XML로써 정의하는 파일이고 위의 괄호는 그러한 DTD를 지정하는 부분입니다. 이 부분은 현재 문서가 "메모.dtd"라는 파일에 정의된 문법에 따라 만들어진 문서임을 알려주는 것이죠.

이 문서유형 선언 부분은

<!DOCTYPE 루트엘리먼트 SYSTEM "DTD문서의 위치"> 와 같은 형태를 가지며, 위의 예시에서는 루트엘리먼트가 <booklist>이므로 booklist라는 값을 가지게 됩니다.
 


예시 설명- 엘리먼트 부분

이제 엘리먼트 부분을 봅시다.

<booklist>
<book kind="소설">
<title>시인과도둑</title>
<author>이문열</author>
</book>
</booklist>

일단 모든 XML문서는 단 하나의 루트 엘리먼트(root element)를 가집니다. 그 외의 모든 엘리먼트들은 루트 엘리먼트로부터 파생된 엘리먼트들이죠.

각각의 엘리먼트가 가질 수 있는 것은 크게 두 가지 입니다. 바로 속성(Attribute)와 내용(content)입니다.

Attribute란 엘리먼트 스스로의 정보를 나타내 주는 것이며, Content란 엘리먼트가 가질 수 있는 data를 뜻합니다. 루트 엘리먼트를 포함한 모든 엘리먼트는 Content로 문자 데이터와 엘리먼트(자식 엘리먼트)를 가질 수 있습니다.

예시를 보면 Booklist라는 루트 엘리먼트는 book이란 자식 엘리먼트를 가지고 있고, book이란 엘리먼트는 kind라는 속성과 title, author라는 자식 엘리먼트를 가지고 있습니다. Title, author라는 엘리먼트는 각각 content로 문자 데이터를 가지고 있죠.

 

방금 까지 XML문서에 대해 살펴보았습니다. 이제 여러분은 XML 문서가 데이터를 어떤 형태로 tagging하고 분류함으로써 저장하고 있는지 이해 할 수 있을 것입니다. 이제 이러한 XML문서의 토대(문법)가 되는 마크 업 언어를 만드는 방법에 대해 알아보도록 합시다. 즉, 데이터를 저장하는 XML문서의 규칙을 직접 만들어 보는 거지요.