Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


XML의 기본개요
 
XML에 대한 간략한 개요와 특징, well-formed, valid한 문서의 정의와 namespace에 대한 간략한 설명을 하도록 한다. ( 2003/03/11 ) 334
Written by ienvyou - 최지웅
1 of 1
 

자. 여러분들은 XML이란 용어에 대하여 많이 들어봤을 것이다. 이 글을 읽는 분이 XML에 대하여
잘 할수도 있고 접해보지 못할 수 있다. 접해본 분이라면 이번글은 소개에 대한 성격이 강하기
때문에 그냥 다른 XML아티클로 넘어가도 무방하리라 본다.

여기서 살펴볼 내용은 XML이 무엇이며, 무엇이 well-formed이며 valid한 문서인지에 대하여
놀할 것이다. 또한 namespace라는 것에 대한 이야기를 간략하게 해보도록 할 것이다.

▶ XML이란?

XML은 eXtensible Markup Language의 약자로 기존 HTML이 가지고 있는 태그(tag)의 한계와 SGML의 
복잡성을 보완하기 위해 만들어진 것으로, 웹에서의 데이터 및 구조화된 문서들을 위한 보편적인 
표준이며, W3C에 1996년에 제안되어 1998년 2월에 W3C표준이 되었다. 이름에서 보여지듯 XML은 
고정된 태그를 가지고 있던 HTML과 달리 문서의 내용에 관련된 태그를 사용자가 정의하여 확장할 
수 있도록 하여 내용정보의 중요성을 강조한다. 또한 XSL을 사용하여 문서의 외양을 표현하기 때문에, 
내부 구조와 표현의 분리를 통한 다양한 활용 가능성을 제공함으로써 인터넷에서 전달되어야 할 
많은 정보들을 기술하는 데 있어 사용자와 개발자 모두에게 편리함을 제공한다. 

eXtensible ? SGML이나 HTML처럼 이미 정해진 태그에 대한 제약을 받지 않는다.
자신만의 애플리케이션에 맞게끔 구성할 수 있다.

▶ XML의 특징

단순성:XML은 다른 코드셋이 아닌 일반 text로 되어 있어 쉽게 판독이 가능하며, H/W or S/W에 
의존하지 않으므로 simple해질수 있는 특징을 가지고 있다.

표준성:W3C가 주도하므로 스펙의 표준화를 이룰 수 있다.

확장성:사용자 임의대로의 무한한 태그확장이 이루어질 수 있으며, 상황에 따라 적절한 
태그의 부여가 가능하다.

스타일시트:문서의 논리구조를 기술하기 위한 언어로 XSL과 같은 표준 스타일 시트언어가 존재한다.

Character Set: UTF-8 or UTF-16 코드가 가능한데, 모든 XML프로세서는 16bit Unicode를 지원하도록 
하므로 한글과 같은 2byte문자권의 데이터도 처리가 가능하다.

▶ Well-formed Document구조

아래와 같은 사항을 가진다면 Well-Formed문서라 부른다

    - Prolog : <?xml version="1.0"?>
    - Root Element : XML Document시작점
    - Miscellaneous : Element, Entity, Comment, PI, DTD declaration, CDATA Section 등등


Prolog:XML의 선언부와 같은 형태이다. 위에서는 어떠한 인코딩방식도 취하고 있지 않다.
위처럼 아무런 방식도 취하지 않았다면 문서는 오직 UTF-8이나 UTF-16만을 취해야 한다.

Root Element : XML Document의 시작점이며, 오로지 문서내에 하나만 존재한다.

Miscellaneous : 루트 원소 뒤에 나타날 수 있는 다른 요소들이며 위의 예 이외에도
whitespace character등이 올 수 있다.

위에서 말한 세가지의 구성요소는 XML Specification v1.0에 표기되어 있는 내용이다. 
이들 모두는 EBNF를 사용하며, 이들에 대한 내용은 
       http://www.w3c.org/TR/2000/REC-xml-20001006 
에서 찾을 수 있다.

▶ Valid XML Document conditions

    - Valid XML Description
    - DTD를 따르는 Well-formed XML 문서
    - Valid XML Requirement
    - DTD를 가지고 있어야 한다.
    - DTD에서 정의한 문법을 따라야 한다

Well-Formed document이기 위해서 요구되어지는 제약조건들은 충분히 의미있고 유용한다. 
하지만 well-formed document내에 들어있는 데이터들을 정확하게 처리할 수 있다는 보장은 
없는 것이다. 이데 따라 XML 스펙상에 정의되어 있는 조건(validity constraints)를 이용하게 되는 
이 적합성검사에 DTD를 사용할 수 있다.

▶ Namespace의 필요성

프로그램을 많이 짜보았다면 프로그램상에서 같은 변수이름을 사용하여 컴파일 에러를 만났던
경험을 누구나 한번씩 가지고 있을 것이다. 가령 i, number, count등등의 변수이름이라면 그러할 
것이다.
그러한 경우가 XML document에서도 나타날 수 있는데 이는 XML이 가진 확장성의 특징 때문이다. 
작성자 나름대로의 태그를 정의하다보면 프로그램상의 오류를 충분히 만날 수 있는 것이다.
해결방안은 일반 자바프로그램을 생각해보면 될 것이다. 같은 count라는 변수라도 서로 다른 
클래스의 attribute로 속해 있다면 그것을 같은 이름으로 볼 것인가 하는 것이다. 
그것은 분명히 다르다. 자바에서 attribute scope를 이용하여 해결하는 것처럼 XML도 같은 이름에 
대하여 다른 scope를 할당함으로서 이름충돌을 피할 수 있게 하는 것이다

▶ Namespace Prefix

Namespace에 대한 유일성 보장
 : (colon)을 이용하여 구분
 <prefix:name>
(예) <person:leg>2</person:leg>
		  <horse:leg>4</horse:leg>

실제 XML문서의 작성규칙에 :을 사용할 수 없게 되어 있는데 이는 이 Namespace의 영역을 위한 
것이기 때문이다. 또한 namespace는 각각의 이름영역에 대한 유일성을 보장해야만 한다.
만약 보장이 안되다면 결국 또 다른 이름의 충돌을 피할 수 없기 때문이다.
 Namespace의 구분은 간단히 :을 이용하여 구분하여 위의 예제같은 경우 leg라는 기존의 
 이름 충돌을 만날 수가 있는데 이름 namespace의 접두어를 이용하여 해결하고 있다.

▶ Namespace Declaration

    - Namespace사용전 반드시 선언
    - Element의 attribute로 선언
    - Attribute name은 xmlns or xmlns:
    - xmlns: 의 경우 URI와 prefix로 구성
    - xmlns:prefix=“URI”

Namespace를 사용하기 위해서는 실제 namespace의 요소의 속성으로 반드시 선언하도록 한다. 
프로그램 코딩시 변수를 사용하기 전 선언을 하는 것과 같은 논리라고 보면 무방할 듯 하다.
 xmlns에는 폭포효과(waterfall effect)가 있는데 이는 어떤 prefix가 element나 attribute에서 사용되었고, 
 해당 요소에는 그 접두어에 대한 xmlns attribute가 사용되지 않았다면 자동으로 그 요소의 부모를 
 검사하며, 반복적인 방법으로 루트원소까지 찾아 올라가게 된다. 따라서 보통 xmlns attribute를 
 루트원소에 선언하는게 일반적이다.

간단하게 이번 글에서는 XML의 기본적인 내용을 살펴보았고 다음 글에서는 SAX파서 및 
DOM파서에 대한 설명을 하도록 한다. 
상당히 간략한 소개의 내용이었는데 다른 것은 다 그만두더라도 확실하게 알아두어야 할것은
tag, attribute, content에 대한 내용이면 추후 프로그램과의 연동으로 차차 익혀나가도록 하자.
        
Written by Carouser - 2002-08-05
 
1
References
 
http://www.w3c.org/TR/2000/REC-xml-20001006
Copyright ⓒ 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD