이글루스 API 를 설명드리기 전에 XML-RPC라는 용어에 대해 먼저 설명드리겠습니다.

XML-RPC는 서로 다른 OS, 서로 다른 프로그래밍 언어에서도 웹을 통해서 데이터를 주고 받을 수 있도록 해주는 표준 통신규약(protocol)을 의미합니다.527
(그림출처 : XML-RPC Home Page)

그림에서 보시다시피 XML-RPC의 표준 규약을 지원하는 곳이라면 어떤 환경이든 어떤 프로그래밍 언어든 상관없이 웹을 통하여 XML 형식으로 데이터 교환이 가능합니다.

XML-RPC 중 특히 블로깅과 관련된 기능을 지원하는 것을 blogging API 라고 말하며, 자신의 블로그에 접속하지 않고도 글을 등록하거나 등록된 글을 수정/삭제 등의 글 관리까지 가능합니다.

예를 들어 문서 제작을 위해 자주 사용하는 툴이 ‘MS Word’ 라면 워드에서 글을 작성하여 워드 내의 기능을 이용하여 이글루스로 글 등록이 가능해 지는 것입니다. 물론 워드에서 XML-RPC를 지원한다면 말이죠.

http://m.blog.naver.com/PostView.nhn?blogId=hopefuldream&logNo=140110566940 에서 참조

XML은 익히 많이 들어봐서 대충~ 무엇이다라는건 알고 있지만 확실히 무엇인지..
DTD는 무엇인지 스키마는 무엇인지 잘 모르는 분들이 계실겁니다.

XML은 정해진 데이터 표현법이라고 볼 수 있습니다. 생긴모습은
<booklist>
    <book id=“스트럿츠1”>
        <저자>홍길동</저자>
        <가격>10000원</가격>
    </book>
    <book id=“스프링”>
        <저자>김갑순</저자>
        <가격>20000원</가격>
    </book>
</booklist>
이렇게 생겼습니다.. HTML과도 비슷하게 생긴 도데체 이게 뭐 어쨌다는거냐…라고 물으신다면..
제가 상상한 다음과 같은 이야기를 해야할것 같습니다.

서로다른 업체 혹은 프로그램끼리 데이터를 주고받는 방법은 사실 매우 많습니다. 예를들어, 김개발씨가 통합서점프로그램을 만들면서
홍길동씨에게 이렇게 말합니다.
“야, 길동아. 나 이번에 통합서점프로그램 만드는 중이니까, 너네 서점 책목록좀 줘봐. 내가 정해준 형태로 줘야 프로그램에서
분석해 쓰거든? 내가 정한 형태로 메모장에 작성해서 텍스트 형태로 줘”
이렇게 말합니다. 김개발씨는 텍스트문서에

책=스트럿츠, 스프링, 아이바티스
가격=10000, 20000, 30000
저자=홍길동, 김갑순, 슈아

이런식으로 써서 주면, 프로그램에서 파일을 읽어와 데이터를 파싱해서 각각 알맞게 DB에 넣도록 프로그램을 짰던 것입니다.
그리고 이번엔 금당무씨에게 똑같이 말했습니다.
“당무야.. 나 이번에 통합서점프로그램 만드는 중인데…”
그런데 이 당무씨는 순순히 OK 하지 않고 반항을 합니다.
“야임마~ 나 이미 우리 서점프로그램에서 쓰는 데이터 형식 있으니까 그거 갔다가 니가 알아서해라”
그리고선
책{스트럿츠, 홍길동, 10000}
책{스프링, 김갑순, 20000}
이런 형식의 텍스트문서를 던져 줍니다…

무슨 이야기 하는지 아실겁니다. 데이터를 주고받을때 모두 똑같은 형식으로 주고받으면 … 각 프로그램마다 파싱하는 부분을
따로 만들 필요가 없겠지요. 그런데 데이터형식을 회사끼리도 아니고 전세계인이 똑같은 방식으로 만들어 주고받는다??
이게 가능한가?? 가능합니다. XML 이 그런 용도로 쓰입니다.

그렇다면 데이터 주고받을려고 XML만들었나? 저는 그렇다고 생각합니다. 데이터 주고받을일 없으면.. 나혼자 개발하고 혼자 지지고볶고
다 한다면 XML따위는 필요 없다고 생각합니다. 나 혼자 꼴리는대로 데이터 주고받게 만들면 그만이고..
실제 흔히 학원에서 자바 메신져 프로그램 만들기를 마지막 과제로 하는데…
이때 메신져간 데이터를 주고받는 형식을 보면 개발자 맘대로 정하는 경우가 많습니다.

그럼 그 XML 은 어떻게 만드냐??? 그냥 메모장 열어서 다짜고짜
<booklist>
    <book>
    </book>
</booklist>
이렇게 만들고 확장자 xml로 저장하면 그냥 XML문서가되는거냐?? 라고 한다면 네.. 그렇습니다…
특수문자에 대한 규칙이나.. “<” 다음에 공백이 와서는 안된다는 등의 기초적인 규칙만 지켜주면 그게 XML 입니다.
안에 들어가는 booklist 등의 문자를 내맘대로 만들수가 있는 겁니다.
<책목록>
  <책제목></책제목>
</책목록>
이렇게 만들어도 이것도 맞는 XML 인 겁니다.  이렇게 내 맘대로 만들어서 상대방한테 여기 맞춰 데이터 달라고 하면 되는거고
아니면 맘대로 이런 XML형식으로 데이터 줄테니까 맘대로 써라.. 할수도 있는 것입니다.

이렇게 간단하면 DTD는 뭐고 스키마는 뭐냐…
결론은 대중성이라고 생각합니다… 즉, 내가 만든 프로그램을 홍길동씨도 쓰고 김갑순씨도 쓰고 미국에사는 제임스씨도 쓴다는것이죠.
내가 분명
<책목록>
  <책제목></책제목>
</책목록>
이런식으로 데이터를 달라고 했는데, 오지마을에사는 김순덕씨는
<책리스트>
  <책타이틀></책타이틀>
</책타이틀>
이렇게 주는겁니다. 이런사람이 안생길까요? 절대로 생깁니다. 특히 공개된 대중적인 프로그램이라면..
예를들어 RSS 같은경우 RSS 형식에 맞게 데이터를 표현해야 RSS리더 프로그램에서 RSS를 읽습니다.
그런데 아랫층사는 박판돌씨는 그냥 멋대로 XML을 만들고 RSS리더 프로그램에서 RSS를 읽히려고 합니다.

그래서 아예 내가 원하는대로 XML을 표현하게 규제를 해합니다.. 그게 DTD, 스키마 입니다…
DTD 가 최초 XML 형식을 정의하는 언어였는데 그게 개선된것이 스키마 구요.. 둘다 목표는 같은겁니다…
데이터정의언어… 왜? 규제할라고.김순덕씨같은 사람들때문에…

에이..난 대중에 공개할일도 없고 개발자는 나 혼자인데요???
그럼 DTD고 스키마고 나발이고간에 만들필요 없습니다. 그냥 XML문서 내 맘대로 만들고 프로그램에서 돌리면 됩니다.

그럼 DTD나 스키마 쓴거랑 안쓴거랑 어떻게 구분하고 규제하고 하는가???

XML문서의 초기부분에..
<?xml version=“1.0” encoding=“euc-kr” ?>
<booklist>
    <book>….
이렇게만 쓰면.. 규제고 뭐고 하는거 없고 그냥 내맘대로 XML형식에만 어긋나지 않게 만들면 됩니다만…
<?xml version=“1.0” encoding=“euc-kr” ?>
<booklist xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
                      xsi:noNamespaceSchemaLocation=“test.xsd”>
이렇게 덧붙여서 시작하면..test.xsd 에서 선언한대로 xml 문서를 만들어야 합니다… 틀리면…
XML문서를 읽어들이는 프로그램의 파서가 에러를 내뱉습니다..
XML문서를 읽어들이는 프로그램으로 우리는 주로 인터넷 익스플로러를 사용하지요… 이 인터넷 익스플로러 안에
XML을 파싱하는 프로그램이 내장되어 있습니다.. 요놈이 “에러야!!크흑!!!!컥!!!” 하면서 에러를 뱉어냅니다..

http://office.microsoft.com/ko-kr/infopath-help/HA001106496.aspx 에서 참조

초보자를 위한 XML 설명

모두 표시모두 표시
작성자: Colin Wilcox

적용 대상
Microsoft Office 2003
XML(Extensible Markup Language)에 대해 들어 보았을 것입니다. 조직에서 XML을 사용해야 하는 여러 가지 이유에 대해서도 들어 보았을 것입니다. 그러나 XML이란 정확히 무엇일까요? 이 문서에서 XML의 기본 사항 즉, 정의와 작동 방법에 대해 설명할 것입니다. 이 문서를 읽은 후에는 IT 부서의 XML 전문가와 전문적인 수준의 대화를 나눌 수 있게 될 것입니다.

XML에 대한 자세한 내용은 이 문서 끝 부분의 링크를 통해 추가 정보를 볼 수 있습니다. 전문가가 아니더라도 XML의 정의, 작동 방법 그리고 XML로 무엇을 할 수 있는지 이해할 수 있습니다.

마크업과 태그에 대한 개요
사람들은 수세기 동안 문서를 만들어 왔으며 그 만큼 오랫동안 자신의 문서에 표시(mark up)를 해 왔습니다. 예를 들면 학교 선생님들은 항상 학생들의 시험지에 표시를 합니다. 이를 통해 학생들에게 단락을 옮기고, 문장의 명확하게 만들고, 틀린 철자를 고치라고 지시합니다. 문서에 표시함으로써 텍스트의 구조, 의미 및 시각적 모양을 조정하고 변경하게 됩니다. Microsoft Office Word의 변경 내용 추적 기능을 사용한 적이 있다면 컴퓨터를 이용한 표시 작업을 수행해 본 적이 있는 것입니다.

컴퓨터 작업에서 “문서에 표시하는 것"이 "마크업"으로 발전했습니다. 마크업이란 태그(때로는 토큰이라고도 함)라고 하는 코드를 사용하여 데이터의 구조와 시각적 모양 그리고 XML의 경우 데이터의 의미를 정의하는 프로세스를 말합니다.

이 문서의 HTML 코드도 현재 사용되고 있는 컴퓨터 마크업의 좋은 예입니다. Internet Explorer에서 이 페이지를 마우스 오른쪽 단추로 클릭하고 소스 보기를 클릭하여 이 문서를 탐색하면 일반 텍스트와 <p> 및 <h2>같은 HTML(Hypertext Markup Language) 태그가 혼합되어 있는 것을 보게 될 것입니다. HTML 문서와 XML 문서 안에 있는 태그는 꺽쇠 괄호로 둘러 싸여 있어 알아보기가 쉽습니다. 이 문서의 소스 코드에서 HTML 태그는 각 단락의 시작과 끝을 정의하고 각 이미지의 위치를 표시하는 등의 여러 가지 작업을 수행합니다.

XML 문서에도 태그가 들어 있지만 그 점만 빼고 나머지는 전혀 다릅니다. 다음과 같은 차이가 있습니다.

HTML은 데이터의 모양을 정의할 뿐입니다. 즉 표시 언어일 뿐입니다.
XML은 데이터의 구조와 의미를 설명합니다. 데이터의 구조와 의미를 설명하는 태그를 사용하면 다양한 방법으로 데이터를 재사용할 수가 있습니다. 예를 들어 많은 양의 영업 데이터를 갖고 있을 때 각 항목이 명확하게 식별되어 있으면 영업 보고서에 필요한 항목만 로드하고 다른 항목은 회계 데이터베이스로 로드할 수 있습니다.
HTML은 모든 사용자가 공유하는 미리 정의된 태그 세트만 사용합니다.
XML은 데이터와 그 데이터의 구조를 설명하는 데 필요하다면 어떠한 태그도 만들 수 있습니다. 예를 들어 애완 동물에 대한 정보를 저장하고 공유해야 할 경우에는 다음과 같은 XML 코드를 만들 수 있습니다.

<?xml version="1.0”?>
<고양이>
  <이름>나비</이름>
  <품종>샴</품종>
  <나이>6</나이>
  <중성화>예</중성화>
  <발톱 제거>아니요</발톱 제거>
  <등록 번호>Izz138bod</등록 번호>
  <소유자>이강주</소유자>
</고양이>
XML 태그를 사용하면 지금 보고 있는 것이 어떤 종류의 데이터인지 정확히 알 수 있습니다. 예를 들면 이것이 고양이에 대한 데이터임을 알게 되면 고양이의 이름과 나이 등을 쉽게 알 수 있습니다. 거의 모든 데이터 구조를 정의하는 태그를 만들 수 있다는 점이 XML을 “확장 가능(extensible)"하게 만들어 줍니다.

그러나 이 코드 예제의 태그와 HTML 파일의 태그를 혼동하지 마십시오. 예를 들어 이 XML 구조를 HTML 파일에 붙여 넣고 브라우저에서 이 파일을 보면 결과는 다음과 같습니다.

나비 샴 6 예 아니요 Izz138bod 이강주

브라우저에서는 XML 태그가 무시되고 데이터만 표시됩니다.

잘 구성된 데이터에 대한 참고 사항
IT 부서의 누군가가 "잘 구성된” XML에 대해 말하는 것을 들었을 것입니다. 잘 구성된 XML 파일은 XML을 제어하는 매우 엄격한 규칙 세트를 준수합니다. 파일이 그러한 규칙을 준수하지 않으면 XML이 작동을 중지합니다. 예를 들면 앞의 코드 예제에서 모든 여는 태그는 닫는 태그와 쌍을 이루고 있어 잘 구성된 데이터에 관한 규칙 중 하나를 준수하고 있습니다. 이 중 한 태그를 제거하고 Office 프로그램 중 하나에서 이 파일을 열려고 하면 오류 메시지가 나타나고 프로그램이 파일 사용을 중지시킵니다.

잘 구성된 XML을 만드는 규칙은 어렵지 않지만 반드시 알아야 할 필요는 없습니다. 그러나 데이터가 잘 구성된 경우에만 프로그램과 시스템 간에 XML 데이터를 공유할 수 있습니다. XML 파일을 열 수 없다면 파일이 잘 구성되지 않았기 때문일 수도 있습니다.

XML은 또한 플랫폼에 독립적입니다. XML을 사용하도록 구축된 프로그램은 하드웨어나 운영 체제에 관계없이 XML 데이터를 읽고 처리할 수 있습니다. 예를 들어 올바른 XML 태그를 사용한다면 데스크톱 프로그램을 사용하여 메인프레임 컴퓨터의 데이터를 열고 작업할 수 있습니다. 그리고 XML 데이터 본문을 누가 만들었는지에 관계없이 Access, Word, InfoPath™ 및 Excel 등 여러 가지 Microsoft Office 2003 프로그램에서 같은 데이터에 대해 작업할 수 있습니다. XML은 이렇게 이식성이 높기 때문에 데이터베이스와 사용자 데스크톱 간에 데이터를 교환하기 위한 가장 인기있는 기술 중 하나가 되었습니다.

다른 프로그램에서 사용하는 XML

XML 시스템은 일반적으로 태그가 지정되고 잘 구성된 데이터 외에 두 가지 추가 구성 요소인 스키마와 변환도 사용합니다. 다음 섹션에서 이러한 추가 구성 요소가 작동하는 방법을 설명할 것입니다.

스키마에 대한 개요
용어를 두려워 하지 마십시오. 스키마란 XML 데이터에 어떤 것은 상주할 수 있고 어떤 것은 상주할 수 없는지에 대한 규칙을 포함하고 있는 XML 파일일 뿐입니다. 스키마 파일은 보통 .xsd라는 파일 이름 확장명을 사용하는 반면에 XML 데이터 파일은 .xml이라는 확장명을 사용합니다.

프로그램에서는 스키마를 통해 데이터의 유효성을 검사할 수 있습니다. 스키마는 데이터를 구조화하고 데이터를 만든 이와 그 밖의 다른 사용자들이 데이터를 이해할 수 있도록 하는 기초가 됩니다. 예를 들어 사용자가 날짜 필드에 텍스트를 입력하는 것처럼 올바르지 않은 데이터를 입력하면 프로그램이 사용자가 올바른 데이터를 입력하라는 내용의 메시지를 표시할 수 있습니다. XML 파일의 데이터가 해당 스키마의 규칙을 준수하는 한 XML을 지원하는 모든 프로그램이 이 스키마를 사용하여 데이터를 읽고, 해석하고, 처리할 수 있습니다. 예를 들면 아래의 그림과 같이 Office Excel 2003과 Office Word 2003 모두 고양이 스키마와 비교하여 <고양이> 데이터의 유효성을 검사할 수 있습니다.

응용 프로그램은 스키마를 통해 XML 데이터를 공유합니다.

스키마는 복잡해질 수 있으며 스키마를 만드는 방법은 본 문서에서 다루지 않습니다. IT 부서를 통해 그 방법을 알 수도 있습니다. 그러나 스키마의 형태를 알면 도움이 될 것입니다. 아래의 스키마는 <고양이> … </고양이> 태그 세트에 대한 규칙을 정의합니다.

<xsd:element name=“고양이”> 
  <xsd:complexType> 
    <xsd:sequence>
      <xsd:element name=“이름” type=“xsd:string”/>
      <xsd:element name=“품종” type=“xsd:string”/>
      <xsd:element name=“나이” type=“xsd:positiveInteger”/>
      <xsd:element name=“중성화” type=“xsd:boolean”/>
      <xsd:element name=“발톱 제거” type=“xsd:boolean”/>
      <xsd:element name=“등록 번호” type=“xsd:string”/>
      <xsd:element name=“소유자” type=“xsd:string”/>       
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
예제에 나와 있는 것을 모두 이해할 필요는 없습니다. 다음 사항에 대해서만 유의하십시오.

예제 스키마에 나와 있는 직선 항목을 선언이라고 합니다. 동물에 대해 색상이나 표식 같은 추가 정보가 필요할 경우 IT 부서에서 스키마에 선언을 추가합니다. 업무 필요 사항이 발전함에 따라 XML 시스템을 변경할 수 있습니다.
선언을 사용하면 데이터 구조를 훨씬 잘 제어할 수 있습니다. 예를 들어 <xsd:sequence> 선언은 <이름> 및 <품종> 같은 태그가 앞의 예제에 나와 있는 순서대로 와야 함을 의미합니다. 선언은 또한 사용자가 입력할 수 있는 데이터 종류도 제어할 수 있습니다. 예를 들어 앞에 나와 있는 스키마는 고양이의 나이에 대해 양수를 필요로 하고 ALTERED 태그와 DECLAWED 태그에 대해서는 부울(TRUE 또는 FALSE) 값을 필요로 합니다.
XML 파일의 데이터가 스키마에서 제공하는 규칙을 준수하면 그 데이터를 유효하다고 말합니다. XML 데이터 파일을 스키마와 비교하여 검사하는 프로세스를 유효성 검사라고 합니다. 스키마를 사용할 경우 장점은 데이터 손상을 막는 데 도움이 된다는 것입니다. 또한 문제가 발생하면 XML이 즉시 중지되기 때문에 손상된 데이터를 쉽게 찾을 수 있습니다.
변환에 대한 개요
앞에서 설명한 것처럼 XML은 데이터를 사용하거나 재사용하기 위한 강력한 방법도 제공합니다. 데이터 재사용 메커니즘을 XSLT(Extensible Stylesheet Language Transformation)라고 하거나 줄여서 변환(Transform)이라고 합니다. 실제로 변환 떄문에 XML에 흥미를 갖게 될 수도 있습니다. 예를 들어 스키마와 비교하여 데이터 파일의 유효성을 검사한 후 Word 2003에서 데이터를 마케팅 브로슈어로 만드는 변환을 적용하고 Excel 2003에서 다른 변환을 적용하여 영업 보고서를 만들 수 있습니다.

또한 사용자나 IT 부서에서도 변환을 사용하여 데이터베이스 같은 백 엔드 시스템 간에 데이터를 교환할 수 있습니다. 예를 들어 데이터베이스 A가 영업 부서에 적합한 표 구조로 영업 데이터를 저장한다고 생각해 보십시오. 데이터베이스 B는 회계 부서에 맞게 조정된 표 구조로 수익 및 비용 데이터를 저장합니다. 데이터베이스 B는 변환을 사용하여 A로부터 데이터를 받아서 올바른 표에 이 데이터를 기록합니다.

데이터 파일, 스키마 및 변환의 조합이 기본 XML 시스템을 구성합니다. 아래의 그림은 이러한 시스템의 일반적 작동 방식을 보여 줍니다. 데이터 파일은 스키마와 비교하여 유효성이 검사된 다음 변환에 의해 여러 가지 유용한 방법으로 렌더링됩니다. 이 경우 변환은 데이터를 웹 페이지의 표로 배포합니다.

스키마와 변환이 적용된 기본 XML 파일

아래의 코드 예제는 변환을 작성하는 한 가지 방법을 보여 줍니다. 또한 <고양이> 데이터를 웹 페이지의 표로 로드합니다. 그 밖에 예제의 요지는 변환을 작성하는 방법을 보여 주려는 것이 아니고 변환이 사용할 수 있는 한 가지 양식을 보여 주려는 것입니다.

<?xml version=“1.0”?>
<xsl:stylesheet version=“1.0”>
<TABLE>
  <TR>
    <TH>이름</TH>
    <TH>품종</TH>
    <TH>나이</TH>
    <TH>중성화</TH>
    <TH>발톱 제거</TH>   
    <TH>등록 번호</TH>
    <TH>소유자</TH>
  </TR>
  <xsl:for-each select=“고양이”>
  <TR ALIGN=“LEFT” VALIGN=“TOP”>
    <TD>
      <xsl:value-of select=“이름”/>
    </TD>
    <TD>
      <xsl:value-of select=“품종”/>
    </TD>
    <TD>
      <xsl:value-of select=“나이”/>
    </TD>
    <TD>
      <xsl:value-of select=“중성화”/>
    </TD>
    <TD>
      <xsl:value-of select=“발톱 제거”/>
    </TD>
    <TD>
      <xsl:value-of select=“등록 번호”/>
    </TD>
    <TD>
      <xsl:value-of select=“소유자”/>
    </TD>
  </TR>
</xsl:for-each>
</TABLE>
이 예제는 한 종류의 변환이 코딩된 모습을 보여 주지만 일반 영어로 된 데이터에서 필요한 사항을 설명할 뿐입니다. 예를 들어 IT 부서로 가서 특정 지역에 대한 지난 2년 간의 영업 데이터를 인쇄해야 하는데 “이런 형태로 해주십시오"라고 말할 수 있습니다. 그러면 IT 부서에서는 그러한 작업을 수행하기 위한 변환을 작성(또는 변경)할 수 있습니다.

Microsoft와 숫자가 늘어나고 있는 기타 공급업체가 모든 종류의 작업에 대한 변환을 만들고 있기 때문에 더욱더 편리해지는 추세입니다. 앞으로는 사용자의 필요에 맞는 변환을 다운로드하거나 목적에 맞게 쉽게 조정할 수 있을 것입니다. 즉 시간이 지나면 더 저렴한 비용으로 XML을 사용할 수 있을 것입니다.

ENTITY

1) 엔티티 개념

– 사전적 의미로는 실체 또는 독립된 객체” 이다. XML 권고안에서는 XML문서를 구성하는 물리적인

저장 단위(Storage unit) 이라 정의하고 있다.

            

– ~.xml 파일의 경우 도큐먼트 엔티티라 부르고, 외부DTD서브셋 문서를 외부DTD서브셋 엔티티라

부른다.(XML 권고안)

– XML문서의 물리적인 저장단위로 기본이 되는 엔티티가 바로 도큐먼트 엔티티 이다. 모든 XML문서는

한 개의 도큐먼트 엔티티를 가져야 한다.

– 다음은 도큐먼트 엔티티를 포함해서 7가지의 엔티티를 정의하고 있다.(XML 권고안)

도큐먼트 엔티티                          외부 DTD 서브셋 엔티티                             Built_in 엔티티

내부 일반 파스드 엔티티             외부 일반 파스드 엔티티               

외부 일반 언파스드 엔티티          내부 파라미터 엔티티                                  외부 파라미터 엔티티

2) 엔티티 용도

– XML문서를 엔티티인 저장단위로 나누는 이유는 재사용성을 높이기 위해서이다.

– 여러 개의 XML문서에 특정부분에 동일한 내용을 작성할 경우를 생각해보자.

동일 내용을 매번 직접 작성시 시작적으로 오래 걸릴뿐 아니라, 오타의 위험성도 있다.

게다가 일부 내용의 수정이 있을 경우 모든 XML문서를 일일이 수정해야 할 것이다.

이 경우, 동일한 내용만을 가지는 외부 일반 파스드 엔티티를 하나 만들고, XML문서는 이를 참조사용

3) 엔티티 분류

– 다음은 물리적인 저장 단위 존재 여부에 따른 구분으로서 엔티티가 파일로 존재하는지 아닌지에 따라

다음과 같은 접두사가 붙는다.

 

구분        물리적 저장 단위

내부         없음. DTD내에서 특정 내용으로 선언될 경우

외부        파일 형태로 존재할 경우

 

– 사용되는 곳에 따른 구분

참조되는 곳             엔티티 명

일반           XML문서에서 참조하여 사용할 경우

파라미터      DTD내에서 참조하여 사용할 경우

– XML파서가 파싱할 수 있는 문자데이터로 이루어졌는지에 대한 여부

참조되는 곳            엔티티 명

파스드        XML파서가 해석할 수 있는 문자 데이터로 구성된 경우

언파스드          XML파서가 해석할 수 없는 비문자 데이터로 구성된 경우

            대표적인 언파스드 엔티티는 그림, 음악, 동영상파일 등이 있다.

4) Built-in 엔티티

– 미리 정의되어 있는 엔티티를 말하며, 별도의 엔티티 선언없이 XML에서 사용 가능한 엔티티.

XML 문서에서 참조방법

치환될 문자

의미

<

less-than

>

greater-than

&

&

ampersand

double-quote

&apos;

single-quote

5) 내부 일반 파스드 엔티티 – DTD문서 내에서 특정 문자 데이터값으로 선언되기 때문에 물리적 저장단위인 파일형태를 가지지

않는다. 선언 위치는 DTD내부 어디든지 상관없다. 일반적으로 텍스트 선언 바로 밑에 선언한다.

             <!ENTITY  엔티티명  “대치할 문자 데이터”

            

&엔티티명;

            

내부 일반 파스드 엔티티 예제)

ch3_1201.dtd

<?xml version=”1.0“ encoding="utf-8” ?>

<!– 내부 일반 엔티티 –>

<!ENTITY kr “대한민국”>

<!ENTITY fr “프랑수”>

<!ENTITY us “미국”>

<!ELEMENT booklist (book*)>

<!ELEMENT book (title, author, nation)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT author (#PCDATA)>

<!ELEMENT nation (#PCDATA)>

<!ATTLIST author nation CDATA #IMPLIED>

ch3_1201.xml

<?xml version=“1.0” encoding=“utf-8” ?>

<!DOCTYPE booklist SYSTEM “ch3_1201.dtd”>

<booklist>

           <book>

                     <title>슈퍼맨</title>

                     <author>누구</author>

                     <nation>&fr;</nation>

           </book>

           <book>

                     <title>배트맨</title>

                     <author nation=“&kr;”>나다</author>

                     <nation>&us;</nation>

           </book>         

</booklist>

6) 외부 일반 파스드 엔티티

– 파일명은 xml이 아닌 다른 이름을 사용해도 무방하다.

<!ENTITY   엔티티명  SYSTEM  “외부 일반 파스드 엔티티  URI 경로”

– 선언 위치는 어디든 상관없다. 일반적으로 텍스트 선언 바로 밑에 선언한다.

<!ENTITY  엔티티명  SYSTEM  “외부 일반 파스드 엔티티 파일명>

<!ENTITY  엔티티명  SYSTEM  “http://웹서버 주소/경로명/…/외부일반파스드엔티티명”>

– &엔티티명;

외부 파라미터 엔티티 예제)

ch3_1201_1.xml

<?xml version=“1.0” encoding=“utf-8” ?>

<kinds>

           <kind id=“k1”>소설</kind>

           <kind id=“k2”>수필</kind>

           <kind id=“k3”>컴퓨터</kind>

</kinds>

ch3_1202.dtd

<?xml version=“1.0” encoding=“utf-8” ?>

<!ENTITY kind SYSTEM “ch3_1201_1.xml”>  <!– 파일에 있는 kind를 가져다 쓰겠다. –>

<!ELEMENT booklist (kinds, book*)>

<!ELEMENT kinds (kind*)>

<!ELEMENT kind (#PCDATA)>

<!ELEMENT book (title, author)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT author (#PCDATA)>

 

<!ATTLIST kind id ID #REQUIRED>

<!ATTLIST book id ID #REQUIRED

                                          kind IDREF #REQUIRED>

                                          

ch3_1202.xml

<?xml version=“1.0” encoding=“utf-8” ?>

<!DOCTYPE book SYSTEM “ch3_1202.dtd”>

<booklist>

           &kind;

           <book id=“b1” kind=“k1”>

                     <title>하하</title>

                     <author>ㅋㅋㅋ</author>

           </book>

           <book id=“b2” kind=“k3”>

                     <title>XML</title>

                     <author>홍길동</author>

           </book>

</booklist>

7) 외부 일반 언파스드 엔티티

– 비문자 데이터로 이루어진 저장단위를 말한다.

– 음악파일, 그림파일, 동영상파일 등이 여기 속한다.

– 외부 일반 언파스드 엔티티를 XML문서에서 참조하기 위해서는 DTD내에서 NOTATION 선언이 필요.

8) 내부 파라미터 엔티티

– 한 개의 DTD문서 내에서 자주 사용되는 부분을 내부 파라미터 엔티티로 선언해 두고, DTD문서

내에서는 반복적인 코딩을 하는 대신 해당 엔티티명을 참조해서 직접 작성한 것과 같은 동일한 효과

<!ENTITY  %  엔티티명  “대치할 DTD 내용의 일부분”>

– 선언 위치는 반드시 참조되기 전에 와야한다. 일반적으로 텍스트 선언 바로 밑에 한다.

– %의 앞과 뒤에는 반드시 공백 문자열이 와야 한다.

– 다음은 DTD내에서 내부 파라미터 엔티티를 참조하는 문법이다.        %엔티티명;

내부 파라미터 엔티티 예제)

ch3_1203.dtd

<?xml version=“1.0” encoding=“utf-8” ?>

<!– 내부 파리미터 파스드 엔티티 –>

<!ENTITY % maninfo “(name, age, tel)”>

<!ELEMENT members (chief |manager|waiter)*>

<!ELEMENT chief %maninfo>

<!ELEMENT manager %maninfo>

<!ELEMENT waiter %maninfo>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT tel (#PCDATA)>

 

ch3_1203.xml

<?xml version=“1.0” encoding=“utf-8” ?>

<!DOCTYPE members SYSTEM “ch3_1203.dtd”>

<members>

           <chief>

                     <name>홍길동</name>

                     <age>20</age>

                     <tel>111-1111</tel>

           </chief>

           <manager>

                     <name>임꺽정</name>

                     <age>22</age>

                     <tel>122-1111</tel>

           </manager>

           <waiter>

                     <name>이순신</name>

                     <age>21</age>

                     <tel>221-1111</tel>

           </waiter>

</members>

 

9) 외부 파라미터 엔티티

<!ENTITY  %  엔티티명  SYSTEM  “외부 파라미터 엔티티 URI 경로”>

외부 파라미터 엔티티 예제)

ch3_1204_1.dtd

<?xml version=“1.0” encoding=“utf-8” ?>

<!ENTITY % maninfo “(name, age, tel)”>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT tel (#PCDATA)>

ch3_1204.dtd

<?xml version=“1.0” encoding=“utf-8” ?>

<!– 외부 파라미터 엔티티 선언 –>

<!ENTITY % maninfo_element SYSTEM “ch3_1204_1.dtd”>

<!– 외부 파라미터 엔티티 참조 –>

%maninfo_element;

<!ELEMENT members (chief |manager|waiter)*>

<!ELEMENT chief %maninfo>

<!ELEMENT manager %maninfo>

<!ELEMENT waiter %maninfo>

미니의 글은 다음과 같이 출처를 밝히시면 가져가서 활용할 수 있습니다.
[출처 : 미니의 XML DeveloperGroup (http://www.word.pe.kr)]

4. DTD란?

  요새 냉방병에 눈병이 심하다고 하네요.. 저도 어째 눈이 좀 안좋아서 안과에 다녀왔네요.. 모두들 뜨거운 여름에 몸 조심하세요.. 그리고 제가 여기에 올리는 강좌는 초보자를 위한 글입니다. 첨 홈페이지를 제작할 때는 XML에 관심이 많아서 많은 분들이 찾아왔었지만, 지금은 XML의 기본사항은 마치 HTML처럼 널리 알려진 내용이 되었네요.. 그래도 또 다시 새롭게 시작하는 분들을 위해서 이 글을 정리해 놓습니다. *^^*

자 그럼 시작해 볼까요?

DTD는 XML 문서에 사용될 구성요소를 정의해 놓은 것으로 생각하면 됩니다. Document Type Definition

그런데 생각보다 DTD는 좀 어렵습니다. 만약 DTD를 설계해야 한다.. 그러면 더욱이 어려워지죠.

제 생각에 초기 DB를 설계하기 위해서 DBA가 필요했던 것처럼 XML에서 DTD를 설계하는 사람도 필요해지겠죠..

그러나 차이는 조금 있습니다. DB를 사용하려면 누구나 DB의 스키마를 정의해야 하지만..

XML을 사용하기 위해서는 DTD를 정의하기 보다는 기존에 정의된 DTD를 가져다가 사용하는 경우가 많이 발생하겠죠.

당연하죠.. 왜냐면 만약 누구나 자기 DTD만 정의해서 사용한다면 그 DTD가 가치를 지닐수 있을까요???

실제로 보면 DTD는 W3C나 기타 XML 관련 기관에서 발표되고 있고 표준화되고 있습니다.

그렇다면 우리의 공부 방향은 어디냐?? 물론 지금 이글을 보시는 분중에서는 DTD를 설계할 필요가 있으신 분도 있겠죠.

그러나 대부분은 DTD를 이해만 하면 될 겁니다. 그래서 오늘은 DTD와 XML에서 가장많이 사용되는

엘리먼트와 속성의 선언에 대해서만 알아보도록 하겠습니다.

DTD의 필요성

HTML에서 <font>라는 태그를 사용했을 때 우리는 <font>가 글자의 글꼴, 색깔, 크기등과 관련이 있다는 것을 잘 알고 있습니다.

우리가 이걸 어떻게 이해하느냐? 그것은 HTML DTD에 <font>태그는 이러이러한 것이고 속성으로는 뭘 가질수 있고..

등등의 정보가 표현되어 있기 때문입니다.

앞에서 설명했듯이 한 공동체에서 이러한 태그를 공유해 특정 부분을 정보화 할 경우 해당 정보의 가치는 더욱 높아질 것입니다.

왜냐하면 그러한 문서는 사람뿐만 아니라 컴퓨터도 쉽게 해석할 수 있고 공동체 내에서 자유롭게 변환이나 이동이 가능하기 때문입니다.

그렇다면 이러한 태그정보를 어떻게 공유할 수 있는가? 계속되는 같은 질문이죠. ^^:;

바로 DTD를 이용해서입니다. DTD의 개념은 XML 이전인 SGML에서부터 존재했습니다.

SGML에서 사용되던 DTD를 간략화 해서 XML에서 사용하게 되었지요. 그래서인지 DTD는 몇가지 문제점을 가지게 되었습니다.

첫째로 DTD에서 정의된 엘리먼트나 속성의 값이 가지게 될 타입을 정의할 수 없습니다.

즉, 정수형, 문자형, 날짜형.. 등등의 변수의 타입을 지정할 수 없는 것입니다. 그래서 DTD가 수행하는 중요한 기능중의 하나인

Validation Check(유효성검사)에서 보다 더 정밀하게 검사할 수 없게 되는 거지요.

둘째로는 DTD문서가 XML문서의 형태가 아니므로 XML 에디터 이외에 또다른 DTD 에디터를 필요로 한다는 것입니다.

이것은 XML과 DTD를 따로 배워야 한다는 문제도 발생시키죠.

그래서… 새롭게 XML 형식의 DTD를 정의하면서 타입도 지정할 수 있는 것이 등장했습니다.

그게 바로 XML Schema입니다. 참 공부하기 어렵죠.. 하나 해두면 또 하나 나오고.. 윽~~~

관심있으신 분은 W3C의 홈페이지에 가서 확인해 보시길 바랍니다. 여기서는 그냥 DTD 이야기만 하죠.

여러분이 알고 있는 HTML, WML, SMIL등등이 각각 자신의 DTD를 가지고 있는 XML 문서라고 보면 됩니다.

그럼 DTD의 구성요소를 하나씩 살펴보도록 할까요? 그러기 위해서 지난번 예제를 다시 사용하도록 하죠. <?xml version=“1.0”?>

<html>

   <head>

      XML Developer

   </head>

   <body>

     <img src=“xml.gif”/>

     <a href=“http://xmlis.pe.kr”>Hello World</a>

   </body>

</html>

엘리먼트의 선언

DTD에서 엘리먼트를 선언하는 형식은 다음과 같습니다. <!ELEMENT 이름 내용>

이름은 사용될 엘리먼트의 이름을 나타내고요. 내용은 자식으로 나타날 수 있는 것들을 적어주면 됩니다.

자 그럼 위의 예에서 <body>태그를 DTD에서 정의한다고 해보죠..

이름은 당연히 body가 되겠죠. 그리고 내용은 <body>와 <body>사이에 나타나는 것을 적어주면 됩니다.

그것이 바로 자식으로 나오는 것이죠.. 위에서 보면 <img>태그와 <a>태그가 나타나고 있죠.

그런데.. <img>나 <a>태그는 순서가 바뀌어도 되고, 또 여러번 나올수도 있다고 합시다.

<body><img…><img…><a…><img…></body>

뭐 이런형태로 나올수 있다고 가정해보죠.. 그런 경우 DTD 선언은 다음과 같이 할 수 있습니다.

이름 : body

내용 : img 또는 a가 여러번 발생 <!ELEMENT body (img|a)*>

위와 같은 형태로 작성이 가능합니다. 휴~~ 어렵죠.. 좀만 더 참고 보세요..

여기에서 어렵게 느끼는 이유는 못보던 것이 나와서입니다. |나 *같은 기호죠.. 다음 표를 참고하세요.

|

 엘리먼트 내용이 선택적으로 나타날 수 있다.

,

 엘리먼트 내용이 순서대로 나타나야 한다.

?

 엘리먼트 내용의 출현회수가 생략되거나 한번 나타난다.

*

 엘리먼트 내용의 출현회수가 생략되거나 여러번 나타난다.

+

 엘리먼트 내용의 출현회수가 최소 한번 이상 나타난다.

 엘리먼트 내용의 출현회수가 한번만 나타난다.

무슨 이야긴지 아시겠어요?? 혹 추가적인 설명이 필요하면 Q&A를 이용하시거나 저한테 멜 주세여..

자 이해하기 쉽도록 몇 개 더 해보죠.

<head>와 같은 걸 선언을 한다고 해보죠.. 이름은 head 내용은 어라?? 그냥 문자열이죠.

XML에서는 이러한 것을 #PCDATA라고 부릅니다. 파싱된 문자 데이터라나요?? 단순한 문자열로 인식하면 됩니다.

다만 그 문자열이 XML 문서을 읽을 때 파싱된다는 의미를 가지고 있습니다.

이름 : head

내용 : #PCDATA 가 한번만 출현한다. <!ELEMENT head (#PCDATA)>

뒤에 아무런 기호도 안 붙었죠. 위의 표에서 맨 마지막 것입니다.

그런데.. XML에서 <img>와 같은 태그는 내용을 포함하지 않는 엘리먼트라고 지난번에 설명했죠..

그걸 뭐라고 했죠??? 빈 엘리먼트(Empty Element)라 그랬죠.

문제는 그겁니다. 내용이 없는데 <img>는 어떻게 정의할 수 있을까?? <!ELEMENT 이름 EMPTY>

이렇게 하면 되겠죠.?? 적용시켜 보면

  <!ELEMENT img EMPTY>

휴~~ 엘리먼트에 대해서 이정도로 해두죠.. 어렵나요? 아마 첨 보는 분은 어려울 겁니다.

우리가 무엇이든 시작하려 할 때 가장 어려운 것은 용어라고 생각합니다. 머리에 들어오지 않는 용어가 문제죠.

그런 경우라면 자주 보세요.. 그 방법밖에는 달리 추천할 방법이 없네요.. T__T

속성의 선언

DTD에서 속성을 선언하는 형식은 다음과 같습니다. <!ATTLIST 엘리먼트이름 속성이름 속성형 (속성기본값)>

엘리먼트이름은 속성을 포함할 엘리먼트의 이름을 나타내고요. 속성이름은 속성의 = 왼쪽에 나타나는 이름이고요.

속성형은 속성이 가질수 있는 타입이고, 속성기본값은 속성의 필요여부등을 나타냅니다.

속성형과 속성기본값은 아래와 같이 정리할 수 있습니다.

속성형

선언형태

설명

문자열 속성

 CDATA

 일반적인 문자열

토큰 속성

 ID

 엘리먼트의 ID

 IDREF

 엘리먼트의 ID를 가리키는 포인터

 IDREFS

 하나이상의 IDREF들

 ENTITY

 외부 엔터티를 가리키는 포인터

 ENTITIES

 하나 이상의 엔터티 값들

 NMTOKEN

 토큰 문자열

 NMTOKENS

 하나 이상의 토큰 문자열들

열거 속성

 (값1 | 값2 | 값3 | …)

 선택 가능한 값을 목록으로 나타냄

속성의 기본값

설명

 #REQUIRED

 속성값이 반드시 필요한 속성이다.

 #IMPLIED

 속성값이 지정되지 않은 경우 XML 프로세서가 암시적으로 할당한다.

 #FIXED

 속성값이 DTD에 지정된 값과 반드시 같아야 한다.

여기까정입니다. 휴!~ 내가 읽어봐도 몬 소린지 하는지.. 쩝.

예를 하나만 들어보죠. 위에서 <img>태그가 있었습니다. <img>태그의 src 속성을 선언한다고 해보죠..

엘리먼트이름 : img

속성이름 : src

속성형 : 문자열 속성 (CDATA)

속성기본값 : 필요함

  <!ATTLIST img src CDATA #REQUIRED>

이런형태로 사용됩니다.

속성과 관련된 선언도 이정도로만 하겠습니다.

DTD에는 더 많은 구성요소가 있습니다. 하지만 일단 현 강좌가 기초이고 저의 실력도 삐리리 한 만큼 여기까지만 하겠습니다.

대신에 다음 강좌에서는 MS사이트에 예제로 나와있는 음반과 관련된 아주 간단한 DTD가 있습니다.

오늘 배운 엘리먼트와 속성만 나와 있죠. 그걸 가지고서 XML 문서를 만들어 가는 예제를 해보려구 합니다.

그것이 DTD와 관련된 구성요소를 계속 설명하는 것보다는 훨씬 나을 것 같아서요..