XML 입문 | DTD를 사용하여 XML 구조의 정의 | DOCTYPE 선언 (XML 문서와 DTD를 연결)

XML의 구조를 정의한 DTD와 XML 문서를 연결할 시에는 문서형 선언(DOCTYPE 선언)를 사용한다. 내부 또는 외부에 기술된 DTD와 XML 문서를 연결할 수 있다. 여기에서는 문서형 선언을 작성 방법에 대해 설명한다.

먼저 DTD가 작성된 XML 문서에서 어느 부분이 문서형 선언인지를 보도록 하자.

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE 재고정보[
    <!ELEMENT 재고정보 (상품)>
    <!ELEMENT 상품 (이름, 개수)>
    <!ELEMENT 이름 (#PCDATA)>
    <!ELEMENT 개수 (#PCDATA)>
]>

<재고정보>
    <상품>
        <이름>자전거</이름>
        <개수>20</개수>
    </상품>
</재고정보>

<!DOCTYPE에서 ]>까지의 부분이 문서형 선언이다. 문서형 선언에서 DTD를 내부에 직접 작성할 수도 있고 외부에 있는 DTD의 위치를 지정할 수도 있다. 지금까지 나온 예제들 전부 DTD를 내부에 작성(내부 subset이라고 한다)한 문서형 선언은 다음과 같은 형식이다.

<!DOCTYPE 루트요소[
    <!-- 내부 서브셋 작성 -->
]>

DTD 작성은 외부 파일으로 저장하여 연결할 수도 있다. 외부 DTD와 XML 문서를 연결하는 경우에는 다음과 같은 형식이다.

<!DOCTYPE 루트요소 SYSTEM "URI"[
    <!-- 내부 서브셋 작성 -->
]>

URI 부분은 외부로 공개되는 DTD의 URI (예 : http://www.devkuma.com/sample.dtd)을 작성한다. 외부 DTD와 연결할 수 있는 경우에도 추가로 DTD을 내부 서브셋 작성할 수도 있다.

자세한 내용은 다른 페이지에서 설명하겠지만, 외부 DTD와 연결 시키려면 내부 서브셋이 없는 경우의 문서형 선언은 다음과 같다.

<? xml version = "1.0"encoding = "UTF-8"?>

<! DOCTYPE 재고정보 SYSTEM "http://www.devkuma.com/sample.dtd">

<재고정보>
    <상품>
        <이름>자전거</이름>
        <개수>20</개수>
    </상품>
</재고정보>

또한 널리 공개되어 불특정 다수의 사람에게 사용되는 같은 외부 DTD와 관련 연결하는 경우에는 다음과 같은 형식이 된다.

<! DOCTYPE 루트요소 PUBLIC 공개식별자 "URI"[
    <!-- 내부 서브셋 작성 -->
]>

Web 사이트를 만들 때 사용되는 XHTML 등이 여기에 해당된다. 예를 들어 XHTML 1.0의 경우에는 3 개의 DTD가 있으며, 그 중 하나인 Strict DTD를 준수한 Web 페이지를 작성하는 경우에는 문서형 선언을 다음과 같이 작성한다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

이 경우에는 공개 식별자가 "-//W3C//DTD XHTML 1.0 Transitional//EN"로 URI가 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"로 되어 있다.


지금까지 문서형 선언 작성 방법에 대해 설명하였다. 다음 페이지에서는 XML의 구조를 정의하는 방법에 대해 살펴 보도록 하겠다.




최종 수정 : 2019-10-07