'DTD'에 해당되는 글 1건

  1. 2018.06.17 DTD 란?

DTD 란?

XML 2018. 6. 17. 16:31

 - DTD 란?

문서의 구조를 정의하는 규칙의 집합.

문서의 구조화 원소 및 원소의 속성 등을 정의함으로써 작성된 XML 문서가 유효한지 여부를 판단하는데 사용

 

XML 문서에 내장되는 DTD의 목적은 문서 타입 정의(DOcument Type Definition : DTD)의 위치와 존재를 알리는 것이다.

 

 

 HTML DTD를 만든 것 처럼 XML은 사용자가 문서의 DTD를 정의할 수 있는데
정의된 DTD에 의한 문서를 만들 때 문서 인스턴트를 만든다고 말한다.
또, DTD를 따르는 문서를 '유효하다(Valid)'고 말하고, valid 문서라고 하는데
DTD를 해석할 수 있어서 문서가 DTD의 구조에 맞는지 검사할 수 있는 파서를 '검증용 파서(validating parser)'라고 부른다.

 

 

 

 

 - HTML의 DTD 선언


첫 번째 줄에 HTML DTD 선언이 있다.

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
......
</HEAD>
<BODY>
......
</BODY>
</HTML> 

 

위 내용은 이 문서가 HTML 4.0 DTD에 의한 문서라는 것을 의미함.
즉, 모든 태그들은 DTD에 정의가 되어있고 HTML 문서 작성자는 DTD에 정의되어있는 태그들을 사용한다는 것을 의미.
[참고 : HTML의 DTD는 W3C에 의해 정의되어 있다]


 


 - DTD 문서 구조에 적용되는 제약 조건들
1. 어떤 엘리먼트가 나타날 수 있는 상황을 제한한다.
2. 구체적인 엘리먼트와 연계될 수 있는 속성들을 제한한다.
3. 속성에 대입될 수 있는 값들을 제한한다.
4. 속성값에 기본값 혹은 고정값을 제공한다.
5. 특수 문자들을 식별하는데 사용될 수 있는 XML의 기본 엔티티 이름 집합을 확장한다.
6. 미리 정의된 표기법과 매치되는 특정 엘리먼트와 엔티티의 데이터형을 제한한다.


 DTD는 선언들의 집합으로 구성된다.
(엘리먼트 선언, 속성 선언, 엔티티 선언, 표기법 선언 그리고
DTD와 그것의 구성요소들의 역활에 대한 설명을 하는 주석을 포함할 수 있음)

 

 

 

 - DTD 종류
DTD는 XML 문서 내에 함께 있을 수도 있고, 다른 파일로 외부에 존재할 수도 있다.

즉, 내부 DTD와 외부 DTD가 각각의 파일로 정의되거나, 두 방법이 모두 사용될 수도 있다는 것이다.

 

 하나의 DTD에서 다른 DTD의 내용을 호출하여 사용할 수 있고, XML 문서에서

내부 DTD와 외부 DTD를 함께 사용할 수 있는데 내부 DTD가 외부 DTD보다 항상 우선 순위가 높다.

 

 

 

  - 내부 DTD
내부 DTD를 사용하려면 XML 선언과 루트 엘리먼트 사이에 DTD를 정의해야 함.

 

 <?xml version="1.0" ?>
<!DOCTYPE example [
......
]>
<example>
......
</exapmple>

 

위 예시에서 DOCTYPE은 문서 타입을 정의한다는 뜻의 키워드이며 반드시 그대로 써주어야 한다.

<!DOCTYPE 다음에는 DTD의 이름을 써주며, DTD 이름은 루트 엘리먼트의 이름이 같아야 한다.

 

 

 

 내부 DTD 형태 정리

>>> DTD 선언

<!DOCTYPE  name  [ 마크업 선언* ]>

 

>>> 마크업 선언

원소 선언, 속성 선언, 엔티티 선언, 노테이션 선언, PI , 주석

 

 

 

 

  - 외부 DTD

 DTD는 XML 문서 내부에 직접 선언될 수도 있지만, 일반적으로 외부에 별도 DTD를 선언하는 방법을 사용함.

외부 DTD 사용시 여러 개의 XML 문서에서 매번 DTD를 기술하지 않고,

공통된 DTD만 공유해서 사용할 수 있다는 장점이 있음


 

<?xml version="1.0" ?>
<!DOCTYPE example SYSTEM "exam.dtd">
<example>
......
</example> 

 


위 예시에서 SYSTEM이라는 키워드는 DTD가 공개 표준이 아닌 자체적으로 개발해서 사용하는 DTD임을 의미하고
SYSTEM 다음에 나타나는 것은 DTD가 존재하는 곳의 위치를 나타내는 URL이 된다.
example DTD는 현재 XML 문서와 같은 디렉토리에 있는 exam.dtd 라는 파일에 정의되어 있다는 것을 알 수 있다.

 

 

 

 외부 DTD 형태 정리

>>> DTD 선언

<!DOCTYPE  name  외부ID>

 

>>> 외부ID

SYSTEM URl  / PUBLIC  PubidLiteral  SystemLiteral

 

 

 

 

   - 외부 DTD 중 공개 표준으로 되어있는 경우

공개 표준이 아닌 DTD에서 사용했던 SYSTEM 대신

아주 유명한 DTD이거나 표준으로 정의된 DTD인 경우 PUBLIC라는 키워드를 사용한다.


 

<?xml version="1.0" ?>
<!DOCTYPE example PUBLIC "-//myCompany//DTD example//EN"
 "http://mycompany/exam.dtd" >
<example>
......
</example> 

 

PUBLIC 다음  SystemLiteral  부분에 DTD의 이름과 공개 식별자 구조를 기술하고,

DTD 이름을 이용하여 문서의 구조를 파악할 수 없는 경우

SystemLiteral 부분에 DTD 파일이 있는 곳의 URL을 기술하게 된다.

 


 공개 식별자 구조는 어떻게 되는가?
DTD가 ISO 표준이라면 식별자는 ISO로 시작함.
표준이 표준 단체에 의해 공식적으로 승인된 것이라면 첫 문자가 +이고, 아니면 -가 나온다.

 

 

간단하게 정리하자면
"-//myCompany//DTD example//EN"
 "http://mycompany/exam.dtd" >


라는 예시에서

 

-     = 공개 식별자
myCompany = DTD 식별자
example   = DTD 이름
EN    = ISO 639에서 지정한 언어 식별자(EN은 영어)
http://mycompany/exam.dtd = DTD를 찾을 수 있는 URL


라는 것이다.

 

 

 

단어 설명


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

 

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

 

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

 

 - 파서(Parser)

주어진 종단 기호의 열(列)이 특정의 문법에서 생성되는지를 판정하고,

초기 기호로부터 그 열에 도달하는 생성 규칙의 열을 발견하는 프로그램

 

 

 

참고 문헌 및 링크

 ADD-ON XML

 자바 개발자를 위한 XML

 

파서 설명 링크

https://terms.naver.com/entry.nhn?docId=832189&cid=42344&categoryId=42344

'XML' 카테고리의 다른 글

애트리뷰트  (0) 2018.06.19
엘리먼트  (0) 2018.06.18
XML의 응용들  (0) 2018.06.16
HTML과 XML의 차이점  (0) 2018.06.15
Markup의 설명과 XML의 탄생 배경(역사)  (0) 2018.06.15
Posted by Resian
,