본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

DTD(Document Type Definition, 문서 형식 정의)는 XML 문서에 어떤 요소와 속성이 어떤 순서·횟수로 나올 수 있는지를 <!ELEMENT>, <!ATTLIST> 같은 선언으로 정해 두고, 문서가 그 구조를 지키는지 검증하게 하는 XML 1.0 표준의 스키마 정의 방식이다.

XML 문서는 태그가 바르게 열리고 닫히기만 하면 형식에 맞는(well-formed) 문서가 된다. 그러나 응용 프로그램이 문서를 자동으로 처리하려면 어떤 요소 아래 무엇이 와야 하는지도 정해져 있어야 한다. DTD 는 이 구조 규칙을 적어 두는 선택적인 부분이고, DTD 에 맞는 문서를 유효한(valid) 문서라고 한다. 검증하는 파서가 DTD 에 어긋나는 문서를 만나면 유효성 오류를 낸다.[1]

DTD 는 XML 의 뿌리인 SGML 에서 물려받은 것이라 XML 이 아닌 독자 문법을 쓰고, 데이터 타입은 사실상 문자열뿐이다. 이를 보완한 후속 스키마 언어가 XML 스키마(XSD)이다.[2]

<!ELEMENT 요소이름 내용모델> 꼴로 쓴다. 내용모델은 다음 중 하나이다.[1]

  • EMPTY - 내용이 없는 요소
  • ANY - 아무 내용이나 올 수 있는 요소
  • (#PCDATA) - 문자 데이터만 오는 요소. (#PCDATA | b | i)* 처럼 쓰면 문자와 지정한 자식 요소가 섞여 올 수 있다(혼합 내용)
  • 자식 요소 모델 - 자식 요소의 순서와 횟수를 아래 기호로 적는다
기호 뜻 예
, 나열한 순서대로 모두 나와야 한다(순차) (a, b, c) - a, b, c 가 이 순서로 하나씩
| 나열한 것 가운데 하나만 나온다(선택) (b | c) - b 나 c 중 하나
기호 없음 정확히 1번 a
? 0번 또는 1번 a?
* 0번 이상 (a, b)*
+ 1번 이상 a+

괄호로 묶은 묶음에 횟수 기호를 붙이면 묶음 전체가 그 횟수만큼 되풀이된다.

예: 묶음의 되풀이

편집 원본 편집
<!ELEMENT x (a, (b | c), d)*>
<!ELEMENT a (#PCDATA)>
<!ELEMENT b (#PCDATA)>
<!ELEMENT c (#PCDATA)>
<!ELEMENT d (#PCDATA)>

x 의 내용은 "a, 그다음 b 나 c 중 하나, 그다음 d" 라는 세 요소 묶음이 0번 이상 되풀이된 것이다.

x 의 내용 판정 이유
(비어 있음) 유효 * 는 0번도 허용한다
a, b, d 유효 묶음 1번
a, c, d, a, b, d 유효 묶음 2번. 묶음마다 b·c 선택을 따로 한다
a, d 오류 묶음 안의 (b | c) 는 횟수 기호가 없어 정확히 1번 나와야 하는데 빠졌다
a, b, c, d 오류 선택은 하나만이다. b 와 c 가 둘 다 올 수 없다
b, a, d 오류 순차(,)는 순서를 지켜야 한다

<a /> 처럼 빈 요소 태그로 쓴 a 도 (#PCDATA) 선언에 맞는다. 문자 데이터가 0자인 것으로 보기 때문이다.

속성·엔티티 선언

편집 원본 편집
  • <!ATTLIST 요소 속성 타입 기본값> - 속성. 타입은 CDATA, ID, IDREF, 열거값 등, 기본값은 #REQUIRED(반드시), #IMPLIED(선택), #FIXED(고정값) 등이다
  • <!ENTITY 이름 "값"> - 문서 안에서 &이름; 으로 불러 쓸 치환 텍스트
  • DTD 는 문서 안 <!DOCTYPE 루트 [ ... ]> 에 넣거나(내부 DTD), 별도 파일로 두고 <!DOCTYPE 루트 SYSTEM "파일.dtd"> 로 가리킨다(외부 DTD)

XML 스키마와 구별하기

편집 원본 편집
구분 DTD XML 스키마(XSD)
문법 XML 이 아닌 독자 문법 XML 문법
데이터 타입 문자열 중심(#PCDATA, CDATA) 정수·날짜 등 내장 타입과 사용자 정의 타입
횟수 지정 ?, *, + 만 minOccurs·maxOccurs 로 정확한 수
네임스페이스 지원하지 않음 지원
  1. ↑ 1.0 1.1 「Extensible Markup Language (XML) 1.0 (Fifth Edition)」 3.2 Element Type Declarations, W3C, https://www.w3.org/TR/xml/, 확인일: 2026-11-04.
  2. ↑ 「Chapter 30: XML」 30.3.1 Document Type Definition, Database System Concepts 7th Edition 온라인 장, Silberschatz·Korth·Sudarshan, https://www.db-book.com/online-chapters-dir/30.pdf, 확인일: 2026-11-04.