728x90
3. XML의 구성요소

  벌써 세 번째 강좌네요. 강좌라고 하기에는 초라하기 그지없지만...~~

기초강좌를 마치고 나서는 MSSQL에서의 XML을 사용하는 방법을 할까 하네요. 예전에도 있었던 거죠.. 그리고 나서, 최근에 나온 Oracle의 XML DB에 대해서도 해볼까 하네요.. 아무래도 미니는 DB쪽에 좀더 호기심이 있네요.. ^^



오늘은 지난번에 간단하게 살펴본 XML 문서내에서 사용되는 구성요소들을 하나하나 설명하려고 합니다.

이것은 XML 스펙에 보면 잘 나와 있습니다. 한글로 된 XML 스펙이 많이 돌아다니고 있으니까요..한번씩 살펴 보세요.

  <?xml version="1.0"?>

<html>

   <head>

      XML Developer

   </head>

   <body>

     <img src="xml.gif"/>

     <a href="http://www.word.pe.kr">Hello World</a>

   </body>

</html>



위와 같은 문서도 분명히 XML 문서입니다. 위의 예제를 가지고 XML의 구성요소를 살펴보도록 하죠.





엘리먼트 (Element)



어떤 책에는 요소라고 번역되어 있기도 하더군요. 엘리먼트와 루트 엘리먼트에 대해서는 지난 강좌에서 설명을 하였죠.

복습차원에서 다시 한번 알아보면 위 문장에서 루트 엘리먼트는 <html>이 되겠죠.

루트 엘리먼트는 다른 엘리먼트를 모두 포함하고 있는 것을 말하죠.



그밖에 <head>, <body>, <a>와 같은 태그를 시작 태그라 하구요.</head>, </body>, </a> 같은 태그를 닫는 태그라 하죠

그리고 이러한 <head>..</head>, <body>...</body>, <a>...</a>를 엘리먼트라고 하죠.

그런데 HTML에서는 닫는태그를 빼먹어도 별 문제가 안됐어요.. 하지만  XML에서는 이러한 태그가 빠진다면 에러로 인식하게 됩니다.

반드시 모든 엘리먼트는 쌍으로 이루어져야 한다는 것이지요.



그렇다면 <br>, <img>와 같이 혼자서 존재할 수 있는 엘리먼트는 어떻게 해야 할까요?

XML 스펙에 따르면 위와 같은 것들은 엘리먼트 내에 내용을 포함하지 않은 것으로서 빈 엘리먼트 (Empty Element)라고 합니다.

이러한 빈 엘리먼트의 표기법은 <br></br>

<br/>



와 같은 두가지 형태로 표현 가능합니다. 일반적으로는 두 번째 방식으로 표현을 많이 하더군요.

위의 예제에서도 <img src="xml.gif"/>와 같은 표현을 볼 수 있을 것입니다.



마지막으로 엘리먼트에서 고려해야 할 사항은 시작태그와 끝태그의 엘리먼트 이름이 같아야 한다는 것입니다.

만약 다음과 같이 엘리먼트가 사용되었다면 잘못된 것입니다. <head>XML Developer</tail>







속성 (Attribute)



위의 예에서 <img>태그를 살펴보면, <img>태그는 그림을 나타내고 그림의 소스는 xml.gif라는 것을 우리는 알 수 있습니다.

만약 <img/>와 같이 혼자만 사용되었다면 아무런 의미를 가질 수 없게 될 것입니다.

HTML에서 처럼 이와 같은 것을 속성이라고 부릅니다. 엘리먼트는 속성을 포함할 수 가 있는 거지요.



속성은 문서를 간결하고 해석하기 쉽도록 만들어줍니다.

만약 속성이 없었다면 <img>태그를 다음과 같이 표현할 수도 있을 것입니다. <img>

    <src>xml.gif</src>

    <align>center</align>

</img>





그러나 속성을 활용하면 <img src="xml.gif" align="center"/>



과 같은 형태로 나타낼 수 있습니다.



첫 번째 형태도 잘못된 것은 아닙니다.  그러나 두 번째의 경우가 보다 간결하고 해석하기도 용이한 형태로 이루어져 있지요..

실제로 DTD를 설계할 기회가 생긴다면 저렇게 자식 엘리먼트로 넣을 것인가? 아니면 속성으로 처리할 것인가를 가지고 많은 고민을 하게 됩니다.

MS-SQL의 경우 XML로 DB에서 데이터를 가져올 때 이 속성을 활용하고 있습니다.



속성에서 주의해야 할 것이 하나 있습니다. HTML에서는 다음과 같은 표기법도 허용되었습니다.

<img src=xml.gif>

그러나 XML에서 속성값은 반드시 " 나 '로 둘러쌓여 있어야 합니다. 만약 그렇지 않다면 Well-formed한 문서가 되지 못하죠.

즉, 이러한 형태로 사용되어야 한다는 것입니다. <img src="xml.gif">



<img src='xml.gif'>







처리명령 (Processing Instruction)



<? 와 ?>사이에 표현되고 특정 응용 프로그램에 대해 처리할 정보나 명령을 가리키는 역할을 합니다.

대표적으로 XSL을 선언하는 부분을 예로 들수 있습니다. <?xml:stylesheet type="text/xsl" href="메모.xsl"?>



위와 같이 적용되면 XML의 스타일쉬트를 지정하고 타입은 text/xsl이며 소스는 메모.xsl에 있다

라고 해석할 수 있는 것이지요. 이렇게 해석할 수 있도록 제공하는 것을 처리명령이라고 합니다.



<?xml version="1.0"?>

와 같은 것도 처리명령이라고 할 수 있습니다. 형태가 처리명령과 같지요. 여기서는 XML 버전 1.0을 사용한다라고 가리키고 있습니다.

그런데 XML에서는 이와 같은 것을 특별히 XML 선언이라고 부릅니다. 모든 XML 문서의 시작은 XML 선언으로 해야 하지요.



위 예제에서는 사용되지 않았지만 몇가지 중요한 XML의 구성요소를 추가로 설명하도록 하겠습니다.





엔터티 (Enitity)



< > & 와 같은 것들을 HTML에서 여러번 보았을 것입니다. 이것은 각각 < > &를 나타내지요.

이러한 것을 엔터티라고 합니다. 엔터티의 가장 일반적은 형태는 문자열을 특정 문자열로 대체하는 것이라고 할 수 있습니다.

예를 들어 만약 DTD문서에 다음과 같이 선언되어 있다면



<!ENTITY xml "eXtensible Markup Language">



이것을 XML 문서 내에서 사용할 때는 &xml;과 같이 사용합니다.

그럼 XML 프로세서는 &xml; 이 부분을 eXtensible Markup Lanaguage로 변환하여 사용하게 됩니다.



또한 엔터티는 이미지와 같은 Binary 데이터나 비 ASCII 문자를 대체하기 위해서도 사용된다고 합니다.

그리고 이러한 엔터티를 DTD에서도 사용할 수 있는데요. 그러한 것을 특별히 파라미터 엔터티라고 하기도 합니다.



대략적으로 엔터티에 대한 설명을 했는데요.. 솔직히 XML 구성요소에서 가장 설명하기가 난해한 것이라고 생각됩니다.

범위도 넘 넓구요.. 엔터티는 잘 사용하면 무지 편한데.. 개념이 도통 어려워서.. 제가 공력이 쌓이면 엔터티에 대한 글을 좀더 상세히 쓰도록 하죠..





주석 (Comment)



주석은 <!-- 와 --> 사이에 정의되고요. HTML에서와 같은 형태와 의미를 가지고 있습니다.

즉, 문서 자체에서 의미를 가지지 않고요. XML 프로세서가 문서를 해석할 때도 건너 뛰게 되지요.

그러므로 실제 XML 문서에 대한 설명을 위해서 주로 사용하게 되지요. <!-- 이부분은 <head>와 <body>를 위한 주석입니다. -->







CDATA 섹션 (CDATA Section)



모든 문자를 마크업이나 태그로 인식하지 않고 일반 문자로 인식하도록 할 수 있는 표기법입니다.

만약 <greeting>Hello World</greeting>



과 같은 형태로 사용하면 이것은 하나의 <greeting>이라는 엘리먼트가 되구요.. 그 엘리먼트의 내용이 Hello World가 되죠.

하지만 만약 전체를 문자열로서 사용하고 싶다면??

앞에서 엔터티란 것이 있었죠.. 엔터티를 활용해서 표현할 수도 있습니다.  그러나 모두 엔터티로 처리하게에는 좀 부담스럽죠.

그래서 등장한 것이 바로 CDATA섹션입니다.

  <![CDATA[

   <greeting>Hello World</greeting>

]]>



이렇게 사용하면 <greeting>Hello World</greeting>를 모두 문자열로 인식하게 됩니다.

XSL과 같은 문서에서 자바스크립트를 많이 사용하거든요.. 그때 이 CDATA 섹션을 많이 사용하게 됩니다.



여기까지 XML의 구성요소를 설명하였습니다. 함 정리 해 볼까요?

구성요소                                         설명

엘리먼트(Element)                        마크업 태그와 그안에 포함된 내용

빈 엘리먼트 (Empty Element)       데이터와 같은 내용을 포함하지 않은 엘리먼트

루트 엘리먼트 (Root Element)      문서내 모든 엘리먼트와 내용을 포함하고 있는 XML 문서의 엘리먼트

속성 (Attribute)                 엘리먼트에 포함되어 추가적인 정보를 제공

엔터티 (Entity)                  텍스트, Binary 데이터, 비 ASCII 문자를 저장하는데 사용

처리명령 (Processing Instruction) 전체 문서나 문서의 일부를 처리하는 응용 프로그램과 연결해 주는 명령어

주석 (Comment)                   XML 프로세서가 해석하지 않는 설명문

CDATA 섹션 (CDATA Section)       특수한 문자를 일반 텍스트로 인식하도록 하는 표기법



오늘은 여기까지입니다. 강좌를 올린다는게 참 어려운 작업인것 같네요.. ^^ 하지만 제 자료를 잘 정리해 놓는다는 기분으로 하면 될 것 같네요.. 그럼 2002/08/02  From 미니

출처 : 미니의 XML DeveloperGroup (http://www.word.pe.kr)

'프로그램언어 > XML' 카테고리의 다른 글

6. XSL & XML  (0) 2008.06.02
5. DTD & XML  (0) 2008.05.28
4. DTD란?  (0) 2008.05.14
2. XML의 시작  (0) 2008.05.14
1.1 XML 이란?  (0) 2008.05.14
728x90
1. XML 이란?

  참으로 오래간만에 사이트를 다시 열었네요.. 예전의 xmlis.pe.kr로 운영했었는데 사정상 이 사이트로 바꾸게 되었습니다. 지난번보다는 좀더 나은 강좌로 여러분을 찾아가고자 합니다. 그럼, 부족하지만 함 시작해 보기로 하겠습니다.

 

  이제는 SQL-2000은 보편화되어 많이 사용되고 있습니다. SQL-2000은 DB 차원에서 XML을 지원하기 시작한 거였죠.. 물론 그전에도 타미노나 엑서스였던가요? XML에서 출발한 DB는 있었지만-.- 그런데 얼마전 Oracle XML DB도 발표되었습니다. 자료를 보셨는지 모르겠군요.. 아마도 OTN 사이트에 가면 있을 겁니다.

 

  어쨌거나 XML은 1998년 2월 W3C에서 첨 XML 표준을 발표한 이래 정말 꾸준히 발전하면서 세인들의 관심을 끌어오고 있습니다. 엄청난 영향력인 셈이죠.. 아마도 이 사이트를 찾으신 분들도 그런 영향을 받지 않았을까 싶네요..



  우연찮게 저는 1998년 말부터 XML을 접하게 되었습니다. 그래서 XParser라는 XML파서도 개발하였구요. 각종 XML관련된 일을 하게 되었지요. 엥~~ 왠 지자랑!!

그래서 제가 알고 있는 조그마한 지식이나마 첨으로 XML을 시작하는 분들에게 도움을 줄 수 있으면~ 하네요.



에궁.. 서론이 넘 길었죠.. 자 이제부터 저랑 함께 XML의 세계로 접근해 보자구요!!



XML이 왜 필요하게 되었을까요?



웹에서 사용하기에 HTML은 지금도 잘 쓰이고 있습니다. 그죠.. 거기에 자바스크립트, DHTML, CGI, ASP, PHP...

을 통해서 이제는 동적인 페이지의 구성도 가능하죠.. 하지만 그 이면에는 우리도 느끼지 못하는 문제점이 있네요.



첫째로 NT-IIS-ASP-MSSQL, LINUX-Apache-PHP-MySQL 무얼 말하려는지 눈치 채셨나요?

바로 호환성입니다. 여기에 지금은 그나마 나아졌지만 초기에 IE와 넷스케이프의 호환도 엄청난 문제였죠.

즉, 정적인 HTML의 기능을 보완하다 보니 각 스크립트, 제품별로 상호호환이 안되는 거죠.



둘째로는 홈페이지를 새롭게 개편한다고 해보죠.. 디자인이 바뀌면 HTML페이지의 내용이 모두 바꿉니다.

그죠.. 물론 텍스트니까 복사&붙여넣기를 사용한다고 해도 넘 불편하죠..

즉, 디자인 부분만 바뀌면 되는데,, 데이터부분도 바꾸어야 하는 거죠..



셋째로 만약 악보를 웹에서 표현하고 싶다면 어떻게 할까요? 이미지로 그려야겠죠.. 그럼 그 그림을 다른 사람에게 보내면

그 사람이 그 악보를 해석해 낼 수 있을까요? 당연히 하죠.. 사람인데..

하지만 컴퓨터는 해석할 수 없죠... 이미지 프로세싱도 아니고 그림에서 어디가 '도''레''미'인지 컴퓨터가 어찌 알겠습니까?



이런걸 XML로 해결할 수 있다는 겁니다.



여기에서 잠시만 뻘소리를 좀 하자면, 제가 이렇게 막 XML이 좋다고 설명을 하면 마치 XML을 만병통치약 정도로 생각하는 사람들이 있습니다.

죄송하지만 아직 XML은 만들어지고 있는 언어입니다. 즉, 이론은 모두 나와 있지만 실제로는 제한된 부분만 구현이 되고 있습니다.

아마도 2~3년 내에는 실제로 모든 구현도 이루어 질수 있으리라고는 보지만,, 지금은 일단 추세를 따라가 주는 것이 중요할 듯합니다.

잠시.. 헛소리였습니다... 지송함다..



그렇다고 이러한 표준이 XML이 먼저는 아니었습니다. 아실분은 다 아시죠.. SGML(표준화된 일반 마크업 언어)라구요..

SGML은 실제로 정부 기관에서 많이 사용되었습니다. 하지만 넘 덩치가 큰 표준이었고요..

웹이 발달하기 이전에 나온 것이라 웹에 대한 지원이 미약했습니다. 하지만 이것이 바로 XML의 부모인 셈이죠..

XML은 SGML에서 사용되는 많은 기술들을 받아들여서 간소화하고 보완하면서 현재 발전해 나가고 있습니다.

아래 그림을 그걸 간단히 보여주고 있습니다.





                           <그림 : SGML과 XML의 관계>



자 이제 정리 해 보도록 하죠... 하~~ 역시 말로만 설명하는 건 넘 어렵죠.. 걱정 마세요. 담부터는 예제 중심으로 설명하도록 하죠.

지도 힘드네요.. 말도 잘 못하는 것이 주저리주저리 타이핑하려니 장난이 아니군요.. T__T



XML의 장점이 뭐죠?



1. 문서의 내용과 디자인이 완전히 분리 되어 있다는 겁니다. 즉, 문서의 구조와 프리젠테이션의 분리라 할 수 있죠.

문서의 구조는 XML문서를 통해서 트리구조의 구조적인 형태로 나타냅니다. 그리고 출력, 포매팅은 XSL 문서를 통해서 나타낼 수 있습니다.

   

2. 다양한 방식의 링크 기능을 제공합니다. XLink, XPointer를 이용하면 기존 HTML에서 이용하던 하이퍼링크 이상의 기능을 발휘할 수 있습니다.

자세한 내용은 강좌를 진행하면서 설명하도록 하죠.



3. 표준화된 DTD를 통해서 모든 분야에서 사용이 가능합니다. 요즘 많이 사용되는 WML, SMIL, SVG등이 모두 XML에 기반을 둔

언어입니다. 이것은 XML의 DTD를 선언하고 모든 사용자가 그 규칙에 맞추어 사용하면 컴퓨터나 사람이 모두 해석할 수 있는 메타 언어가 된다는 거죠.



야.. 갑작스럽게 어려운 용어가 많이 나왔네요.. 이론... 머리가 어지럽네요.. 앞으로 차근차근 제가 아는 것만큼 설명해 드리도록 하죠..



XML 문서의 구조와 포매팅의 구분



여기서는 참고로 XML의 구조와 포매팅의 분리에 대해서 설명을 좀 더 할까 합니다.

자동차를 하나 예로 들어서 설명을 해보죠.. 자동차 음~~ 현대 아반테의 엔진에 대한 설명서를 XML문서로 하나 가지고 있다고 해보죠.



그렇다면 지금 XML 문서는 준비가 되어 있는 겁니다. 그리고 포매팅을 할 수 있는 것이 없는 상태죠.

차 엔진 설명서에는 XML 형태로 아반테의 엔진에 대한 모든 내용이 포함되어 있습니다.



아반테를 생산하는 공장에서는 엔진을 조립하는 방법이 필요합니다.

그리고 차를 수리하는 카센타와 같은 곳에서는 엔진이 고장났을 때 수리하는 방법이 필요합니다.

마지막으로 차량 구입자에게는 아반테 엔진을 사용하는 방법의 설명서가 필요합니다.



이런걸 기존의 미디어라면 모두 각각 만들어야 합니다.

하지만 XML이라면 포매팅만 새롭게 해주면 기존의 XML문서를 이용하여 모두 만들어 낼 수 있습니다.

XML이라는 것이 좀더 매력으로 느껴지지 않으세요?? 안그런가? 쩝... 어쨌던~~



어떻게 그럴수 있을까요?? XSLT라고요.. XML을 변환하는 것에 대한 표준안이 W3C에서 이미 발표된 상태입니다.

각 벤더들이 그에 대한 솔루션을 각각 발표하겠죠..



또한 이 XSLT를 이용하면 다른 미디어로도 출판이 가능하다고 합니다.

즉, 위의 아반테 엔진을......



CD-ROM 버전으로 출판할 수 있구요.

웹에서 사용할 수 있는 형태로 출판할 수도 있구요..

요즘 많이 사용되는 PDA에서 사용할 있도록 나타낼 수도 있답니다.



실제로 제가 본 것은요.. XSL의 포매팅 객체 (Formatting Object)를 이용해서 PDF파일(아크로뱃리더)형식과 HTML과 WAP의

3가지 형태로 출력하는 외국의 사이트를 본적이 있네요.. (http://www.renderx.com/)



이제는 이런 형태의 XML이용이 점차 보편화 되고 있는 추세죠..



첫 강좌는 여기까집니다. 휴~~ 그럼.......   2002/08/01  From 미니

[출처 : 미니의 XML DeveloperGroup (http://www.word.pe.kr)]

'프로그램언어 > XML' 카테고리의 다른 글

6. XSL & XML  (0) 2008.06.02
5. DTD & XML  (0) 2008.05.28
4. DTD란?  (0) 2008.05.14
3. XML의 구성요소  (0) 2008.05.14
2. XML의 시작  (0) 2008.05.14
728x90

USE sample
GO

-- 시스템 테이블을 직접 수정할 수 있도록 설정
EXEC sp_configure 'allow updates', 1
RECONFIGURE WITH OVERRIDE
GO

-- 함수는 master 데이타베이스 생성, 소유자는 system_function_schema 지정
USE master
GO

CREATE FUNCTION system_function_schema.fn_greatest ( @x bigint, @y bigint )
 RETURNS bigint
AS
BEGIN
 RETURN ( CASE WHEN @x>@y THEN @x ELSE @y END )
END
GO

CREATE FUNCTION system_function_schema.fn_least( @x bigint, @y bigint )
 RETURNS bigint
AS
BEGIN
 RETURN ( CASE WHEN @x<@y THEN @x ELSE @y END )
END
GO

-- 시스템 테이블을 직접 수정할 수 없도록 0으로 변경(반드시 수행)
EXEC sp_configure 'allow updates', 0
RECONFIGURE WITH OVERRIDE
GO

-- 생성한 시스템 함수는 모든 데이타베이스에서 호출 가능
USE sample
GO

SELECT fn_greatest(989, 998), fn_least(989, 998)
GO

결과
998 989

/* 시스템 함수 조회하기 */
USE master
GO

SELECT name , OBJECTPROPERTY(id, 'IsScalarFunction'),  *
FROM sysobjects
WHERE uid = USER_ID('system_function_schema')
AND (OBJECTPROPERTY(id, 'IsScalarFunction')=1
 OR OBJECTPROPERTY(id, 'IsTableFunction')=1
 OR OBJECTPROPERTY(id, 'IsInlineFunction')=1 )
GO

[출처] 시스템 함수 생성|작성자 주디

+ Recent posts