한 주 동안 안녕하셨나요? 강좌 담당자 천랑입니다.

요 근래 며칠 동안은 정말 바깥 바람이 날카로운 칼을 들고 돌진해 오는 무사 같아서 밖에 나가기 겁이 나더군요. 게다가 땅바닥까지 얼음판이니 도망갈 수도 없구. ^^;; 내일 부터는 날씨가 좀 풀린다니 정말 다행입니다. 이젠 목욕탕에 가서 세수를 하지 않아도 되겠군요. (저희 집엔 물이 안나온답니다. ㅠ.ㅠ)

지난 제 2강에서는 W3C의 XML 스펙의 가장 첫부분에 해당하는 저작권과, 문서의 지위, XML의 기원과 설계 목표, 용어의 정의 등에 대해 살펴보았습니다. 많은 분들이 World Wide Web 콘소시움(W3C)의 사이트에 한번씩은 들려 보셨을 것 같은데요. 관찰력이 뛰어난 분이라면 W3C의 XML 1.0 스펙의 메인 페이지에 XML 1.0 한국어판 번역문이 링크되어 있는 것을 보셨을 것입니다. 1999년도에 Techno2000 이라는 회사에서 번역해 주신 것인데요. 많은 사람들이 관심을 갖기 이전에 발빠르게 번역문을 올려 주셔서 감사하게 생각합니다만 최근의 XML 용어의 한글화 작업과정에서 달라진 용어들도 있고, 해석상의 차이점 등등으로 윈도우 사용자 그룹에서는 XML 1.0 스펙을 다시 번역하였습니다. 지금 여러분이 보시고 계시는 XML 1.0 스펙 본문은 저를 비롯한 윈도우 사용자 그룹이 번역한 번역본이랍니다. ^^

그럼 오늘은 도큐먼트(Document)에 대해 좀 더 자세히 알아보도록 합시다.
 
<스펙 본문>
2. 도큐먼트(Documents)

문법을 따르고 있는(well-formed) 하나의 데이터 객체는 이 스펙에 정의되어 있는 대로 하나의 XML 도큐먼트가 된다. 문법을 따르는 XML 도큐먼트는 몇 가지 강제사항들을 만족하면 부수적으로 유효한 XML 도큐먼트가 될 수 있다. 각각의 XML 도큐먼트는 논리적 구조와 물리적 구조를 모두 갖는다. 물리적으로 도큐먼트는 엔터티라고 불리는 단위들로 구성되어 있다. 하나의 엔터티는 도큐먼트에 다른 엔터티들을 포함시키기 위해 다른 엔터티들을 참조할 수 있다. 도큐먼트는 "루트" 또는 도큐먼트 엔터티에서 시작한다. 논리적으로 도큐먼트는 선언들, 요소들, 주석들, 문자 레퍼런스들, 처리 지시문들로 구성되어 있으며, 이 모든 구성 요소들은 도큐먼트 안에서 명시적인 마크업에 의해 지시된다. 물리적 및 논리적 구조는 "4.3.2 문법을 따르는 파싱되는 엔터티들"에 기술된 것처럼 반드시 적절하게 중첩되어야만 한다.

 
<천랑의 주석>
도큐먼트의 구조와 단위
이 부분은 XML 도큐먼트를 구성하는 '단위'들에 대해 설명하고 있습니다. XML에서의 도큐먼트라는 개념은 지난 2강에서 우리가 일반적으로 쓰는 '문서'의 막연한 개념이 아닌 "데이터 객체들의 클래스"라는 구체적 개념으로 쓰인다고 이야기 했었습니다.

XML 도큐먼트는 두 가지 조건을 요구합니다. 그 중 하나는 문법적합성(well-formedness)이고, 다른 하나는 유효성(Validity)입니다. 지긋지긋하던 고등학교 때의 수학 용어를 빌리자면 문법적합성은 XML 도큐먼트의 "충분조건"이 되고, 유효성은 XML 도큐먼트의 "필요조건"이 됩니다. 즉, XML 도큐먼트가 되기 위해서는 반드시 "문법적합성"을 만족해야 하지만, 꼭 "유효성"을 만족할 필요는 없다는 말입니다. 모든 파서(Parser - XML Document를 처리하는 프로세서)는 XML Document를 처리할 때 기본적으로 "문법적합성"을 만족하고 있는지 검사합니다. "유효성"은 특정한 목적을 위해서 주로 사용되는 선택사양 정도로 생각하셔도 될 것 같네요.

위의 스펙 본문은 그 자체로 대단히 짧습니다만, XML의 기본적인 골격을 이루는 중요한 내용이 들어 있습니다. 그 것은 바로 XML 도큐먼트의 물리적 구조와 논리적 구조를 이루는 단위들에 대한 내용입니다.

어떤 도큐먼트(앞으로 이 강좌에서 그냥 '도큐먼트'라고 하면 'XML 도큐먼트'를 말하는 것입니다)의 물리적 구조는 그 도큐먼트를 구성하는 엔터티들의 관계가 됩니다. 그리고 이러한 엔터티들 중에서 가장 중요한 엔터티가 바로 "도큐먼트 엔터티"가 되는 것이죠. XML을 다루는 프로그램은 일단 도큐먼트 엔터티 안에서 또 다른 엔터티 자체를 다루거나 다른 엔터티를 참조하는 것들을 다루게 됩니다. 엔터티에 대해서는 나중에 좀 더 자세하게 다루도록 하죠.

도큐먼트의 논리적 구조는 바로 정보의 계층적 구조를 말합니다. XML에 좀 관심을 가진 분들은 아마도 XML이 자주 데이터베이스와 비교되어 다루어지고 있음을 알고 있을 것입니다. 기존의 데이터베이스가 수평적 구조(Flatten Structure)로 데이터의 관계를 정의하는데 성공적이었다면, XML은 계층적 구조(Hierarchical Structure)로 데이터의 관계를 나타내는데 아주 효과적이기 때문이죠. 흔히들 트리 구조(Tree Structure)라고 부른는 형태의 데이터 관계를 데이터베이스로 모델링할 때 겪게 되는 어려움을 생각해 본다면 왜, XML과 데이터베이스가 상호 보완적으로 유기적인 결합을 꾀하려하는지 그 이유를 알 수 있을 것입니다. 계층 구조를 모델링하는 방법에 대해서는 '문법을 따르는 XML 도큐먼트(Well-formed XML Document)'를 다룰 때 예제를 통해 살펴보도록 하죠.

이번 시간까지는 주로 장황하게 말로 설명했습니다만 다음 시간부터는 간단한 예를 통해 위 스펙의 마지막 문장에 있는 '적절하게 중첩된'의 의미와 'Well-formed XML 도큐먼트'의 의미에 대해 좀 더 자세히 알아보도록 합시다.

날씨가 워낙 추워서 감기 바이러스도 활동을 못할 것 같습니다만, 모두들 몸 건강히 다음 시간에 뵙도록 하죠. 그럼.

참 고
현재 시중에 출간되어 있는 많은 도서들이 Well-formed XML Document를 "잘 구성된(또는 잘 형성된) XML 도큐먼트"로 번역하고 있습니다만 제 짧은 생각은 역시 Well-formed XML Document는 "문법을 따르는 XML 도큐먼트"로 번역하는 것이 훨씬 오해의 소지가 줄어든다고 생각합니다. 그리고 사전을 찾아보면 아시겠지만 "Well-formed"라는 단어는 "문법에 맞는"이란 의미를 갖는다고 명시되어 있기도 하구요. 저두 처음에 번역서를 볼 때, 잘 형성된 XML 문서, 잘 구성된 XML 문서라는 말의 의미를 제대로 이해하지 못했던 기억이 나거든요. ^^

(2001. 09) 이 강좌를 쓸 시점에는 Well-formed에 해당하는 적절한 단어가 없어 일단 "문법을 따르는"으로 번역했습니다만, 최근 국내에 XML 관련 도서들이 많이 번역되면서 용어의 통일이 어느 정도 이루어졌습니다. 최근 번역서의 경우 "Well-formed XML"은 "적격 XML"로, "Valid XML"은 "적합 XML"로 번역하고 있고, 저 또한 XML 공동체에서 합의가 이루어진다면 위의 두 용어가 더 낫다고 생각합니다.

또, 한 가지 덧붙이자면 이 스펙을 번역할 시점에는 XML에 대한 이야기가 풍부하게 논의되지 않았었기 때문에, "XML Document"에서 "Document"를 일반적인 "문서"와는 다른 개념을 가진 데이터 저장소로서 그대로 "도큐먼트"라고 썼었습니다만, 이제는 XML에 관련된 책 안에서는 그냥 "문서"라고 써도 무방할 것 같습니다.
참고가 되었나요? ^^;

 

저작권 정보

 

본 강좌는 Prentice Hall 출판사의
"XML: The Annotated Specification"을 일부 참고하였음을 밝힙니다.

본 강좌에서 사용하고 있는 XML 1.0 스펙의 한국어 번역본은 윈도우 사용자 그룹에 그 저작권이 있으며, 이 스펙 전체가 단 한 구절도 훼손되지 않는 경우에 한하여 배포될 수는 있으나 기타 상업적인 목적으로의 전재 및 인용은 금합니다

+ Recent posts