DTD | DTD 기본 문법

S·2024년 4월 1일
0

WEB

목록 보기
6/8

DTD


Document Type Definition

문서/데이터의 구조를 정의

XML 문서에서 사용 가능한 markup들의 집합과 사용 규칙을 정의한다.

예시

<!ELEMENT Invoice (Header, Item+)>
<!ELEMENT Header (Date, BillTo)>
<!ATTLIST Header
		  invoidNumber CDATA #REQUIRED>
...

 

DTD 개요


특정 DTD에 따라 작성된 문서를 그 DTD에 대해 유효한 문서(valid document)라 함
예: HTML 문서는 HTML DTD에 대해 유효한 문서

유효성 검사

DTD를 이용하여 XML 문서가 유효한 문서인지 확인 가능하다.

 

DTD 사용 방법


문서 유형 선언

Document type declaration: DOCTYPE

XML 문서가 어떤 DTD에 의해 작성된 것인지를 문서 내에 명시한다.
DTD는 내부 DTD Subset과 외부 DTD Subset으로 구별된다.
외부 DTD subset을 정의한 문서를 DTD 문서라 한다.

 

DTD 사용 방법


내부 DTD Subset

마크업 언어에 대한 DTD가 XML 문서 내부에서 정의됨

내부 DTD Subset은 주로 외부 DTD Subset의 일부 내용을 XML 문서에서 재정의하여 사용할 목적으로 이용된다.

외부 DTD Subset

마크업 언어에 대한 DTD 문서가 별도의 문서(파일)로 정의됨
따라서 여러 XML 문서에서 공통적으로 이용이 가능하다.

DTD 문서는 확장자로 .dtd 사용

 

내부 DTD 문서 유형 선언


내부 분서 내에서 DTD 정의

<!DOCTYPE 루트 엘리먼트[ 
	새로운 dtd 정의
]>

<!DOCTYPE booklist[
	<!ELEMENT booklist (book+)>
    <!ELEMENT book (#PCDATA)>
]>

 

외부 DTD 문서 유형 선언


SYSTEM 식별자 이용

SYSTEM 키워드와 함께 DTD 문서의 경로나 URL을 기술

국제적으로 공인되지 않은 단체에서 정의한 외부 DTD subset 문서를 지정할 경우 사용됨

형식

<!DOCTYPE 루트엘리먼트 SYSTEM "SYSTEM 식별자">

 

PUBLIC 식별자 이용

PUBLIC 키워드와 함께 사용

공개적인 사용을 목적으로 기업이나 기관에서 정의한 외부 DTD subset 문서를 지정할 경우 사용됨

PUBLIC 식별자 형식
±//DTD 개발 단체명//DTD 이름 및 버전//사용 언어
✔︎ + : 국제 공인 단체에서 정의한 DTD의 경우
✔︎ - : 비공인 단체에서 정의한 DTD인 경우

PUBLIC 식별자를 이해하지 못하는 응용 프로그램을 위해 SYSTEM 식별자를 추가하여 DTD 문서의 URL 또는 파일 경로를 지정 가능

형식

<!DOCTYPE 루트엘리먼트 PUBLIC "PUBLIC식별자">

 

XML 문서의 유효성 검사


XML 문서 작성 시 유효성 검사 실시
➡ XML editor에 내장된 기능 사용

XML 문서 이용 시 유효성 검사 실시
➡ 응용 프로그램이 XML 문서를 처리하기 전에 유효성 검사 실시
➡ XML parser의 유효성 검사 기능 이용

 

DTD 구성요소


• 엘리먼트 (element)
• 속성 (attribute)
• 개체 (entity)
• 노테이션 (notation)
• 조건부 섹션 (conditional section)
• 주석 (comment)

 

엘리먼트 선언


엘리먼트

XML 문서를 구성하는 논리적 단위

선언 형식

<!ELEMENT 엘리먼트명 contents>

• 엘리먼트명: XML 엘리먼트의 이름
• contents: XML 엘리먼트의 구조(데이터 타입) 정의

Content 유형

Contents model
#PCDATA : 일반적인 문자 데이터만을 포함
children : 자식 엘리먼트들을 포함
mixed : 문자 데이터와 자식 엘리먼트들을 함께 포함

형식
PCDATA

<!ELEMENT 엘리먼트명 (#PCDATA)>

chlidren

<!ELEMENT 엘리먼트명 (child1, child2, child3, ...)>

★ 주의 ★
괄호 안에 포함된 자식 엘리먼트들도 DTD에서 각각 별도의 엘리먼트 선언을 해야 함

Contents category
empty : 내용을 갖지 않는 빈 엘리먼트 선언
any : 임의의 구조(타입)의 데이터를 포함할 수 있음

자식 엘리먼트들의 표현 방법

자식 엘리먼트들의 순서나 반복 횟수를 지정하기 위해 여러 가지 선언자 기호를 사용함

선언자 기호설명
,선언된 엘리먼트들을 순서대로 자식 엘리먼트로 사용
|선언된 엘리먼트들 중 하나를 선택해서 자식 엘리먼트로 사용
( )선언된 엘리먼트들을 하나의 그룹으로 선언
*선언된 엘리먼트가 0번 이상 사용될 수 있음 (0~n)
+선언된 엘리먼트가 1번 이상 사용될 수 있음 (1~n)
?선언된 엘리먼트가 0번 또는 1번 사용될 수 있음 (0~1)
무기호특별한 기호가 없으면 선언된 엘리먼트를 반드시 한 번만 사용

 

혼합형 선언

엘리먼트들의 content로 문자 데이터와 자식 엘리먼트를 동시에 선언할 때 사용

형식

<!ELEMENT 엘리먼트명 (#PCDATA | child1 | child2 | ... )*>

★ 주의사항 ★
• 문자 데이터(#PCDATA)를 먼저 선언
• 혼합 내용의 반복성은 0번 이상(*)으로 정의

EMPTY 선언

Content를 갖지 않는 빈 엘리먼트를 정의하기 위해 사용

빈 엘리먼트의 경우 content가 없으므로 일반적으로 속성을 가짐

형식

<!ELEMENT 엘리먼트명 EMPTY>

엘리먼트 사용 방법
시작 태그와 종료 태그 사이에 공백이 있으면 안 됨

<엘리먼트명></엘리먼트명>
<엘리먼트명 />

ANY 선언

엘리먼트의 content에 대해 조건을 두지 않을 경우에 사용

정의되는 엘리먼트는 임의의 구조를 가질 수 있음
➡ DTD 내에 선언된 모든 엘리먼트들을 자식 엘리먼트로 가질 수 있음

ANY content 유형은 XML 문서 처리를 위한 응용 프로그램 개발을 어렵게 하기 때문에 잘 사용되지 않는다.

형식

<!ELEMENT 엘리먼트명 ANY>

 

속성 선언


속성은 엘리먼트에 부가적인 정보를 제공한다.

엘리먼트와 관련된 속성 이름, 속성 유형, 속성 기본값 등을 정의

형식

<!ATTLIST 엘리먼트명
	속성명1 속성유형 속성기본값
	속성명2 속성유형 속성기본값
    ...
>

속성 기본값

엘리먼트 작성 시 속성을 생략할 수 있는지, 반드시 기술해야 되는지 등을 지정

속성이 생략될 때 속성이 갖는 디폴트 값 지정 가능

의미
#REQUIRED속성을 반드시 기술해야 함
#IMPLIED속성을 생략 가능
#FIXED value속성의 값을 미리 지정 (변경 불가)
value속성이 생략될 때 사용될 default 값 지정

속성 유형

문자열 타입(CDATA): 임의의 문자열을 속성 값으로 가짐
열거형 타입: 열거된 여러 값들 중 하나를 속성 값으로 가짐
토큰 타입: 다음과 같은 키워드를 사용하여 속성 값 유형을 정의

속성 유형설명
ID속성값은 엘리먼트들을 구별하기 위한 식별자로 사용되며,
XML 문서 내에서 유일한 값을 가져야 함
IDREF
IDREFS
속성값은 XML 문서 내에서 ID 속성으로 사용된 값만 사용할 수 있음
다른 엘리먼트의 ID 속성값을 참조하기 위해 사용됨
NMTOKEN
NMTOKENS
속성값은 XML 이름 작성 규칙을 준수하는 문자 데이터만 사용할 수 있음
NOTATION속성값은 DTD에 명시적으로 선언된 notation명만 사용할 수 있음
ENTITY
ENTITIES
속성값은 DTD에 명시적으로 선언된 entity명만 사용 가능함

 

문자열 타입 (CDATA)

속성 값에 대해 특수 문자를 제외하고 어떤 문자열도 사용 가능

특수 문자를 사용할 때는 개체 참조 이용

열거형 타입

DTD에 열거된 값들 중에서 하나를 사용하도록 함
✔︎ 괄호 안에 나열된 값 이외의 값은 사용 불가

ID 타입

XML 문서에서 엘리먼트들을 유일하게 식별해야 할 경우 사용

★ 주의 사항 ★
• 속성 기본 값은 #IMPLIED 또는 #REQUIRED만 사용 가능
• 각 엘리먼트에서 ID 타입 속성은 하나만 정의 가능
• 문서 내에서 ID 타입 속성의 값은 중복이 될 수 없음
• ID 타입 속성의 값은 반드시 XML 이름 작성 규칙을 따라야 함

IDREF(S) 타입

ID 타입으로 선언된 속성이 갖는 값들 중 하나를 가짐
✔︎ IDREF(S) 타입 속성의 값은 문서 내에 포함된 ID 속성 값들 중에 일치(참조)하는 것이 반드시 있어야 함

IDREFS: ID 타입으로 선언된 속성 값들 중 여러 개를 동시에 참조 가능
✔︎ 속성 값들은 공백 문자로 구분

 

개체 선언


개체의 개념

XML 문서를 구성하는 물리적인 저장 단위

종류
문서 entity: 일반적인 XML 문서
외부 DTD subset entity: DTD 문서
빌트인(built-in) entity
내부 일반 parsed entity
외부 일반 parsed entity
외부 일반 unparsed entity
내부 파라미터 entity
외부 파라미터 entity

개체 사용 목적

XML 문서에서 구성 요소의 공유 및 재사용

개체 분류

물리적 저장 단위에 따른 구분
내부(internel) : 같은 DTD 내에 정의
외부(external) : 별도의 파일로 정의

참조되는 위치에 따른 구분
일반(general) : XML 문서에서 참조하여 사용
파라미터(parameter) : DTD 문서에서 참조하여 사용

XML parser가 해석 가능한지 여부에 따른 구분
✔︎ 일반 개체만 해당됨
Parsed : XML parser가 해석할 수 있는 내용으로 구성
Unparsed : XML parser가 해석할 수 없는 비문자 데이터로 구성

빌트인 entity

미리 정의되어 있는 개체

참조 방법치환될 문자의미
&lt;<less-than
&gt;>greater-than
&amp;&ampersand
&quot;"double-quote
&apos;'single-quote

 

내부 일반 parsed entity

DTD 내에서 문자 데이터로 선언되고, 별도의 물리적인 파일 형태를 갖지 않는다.

형식 (DTD)
<!ENTITY entity명 "대체할 문자 데이터">

참조 형식 (XML)
&entity명;

외부 일반 parsed entity

XML 문서에서 자주 사용되는 엘리먼트들을 별도의 물리적인 파일로 저장한 것

형식 (DTD)
<!ENTITY entity명 SYSTEM "entity file의 경로">

참조 형식 (XML)
&entity명;

외부 일반 unparsed entity

비-문자 데이터로 이루어진 물리적인 저장 단위를 참조
ex 음악 파일, 그림 파일, 동영상 파일

선언 (DTD 문서)
Notation과 외부 일반 unparsed entity 선언
엘리먼트에 대해 ENTITY 타입의 속성 선언

참조 (XML 문서)
ENTITY 타입 속성으로 외부 일반 unparsed entity의 이름을 지정

내부 파라미터 entity

DTD 내용의 일부를 DTD 문서 내에서 참조하기 위해 선언
DTD 내에서 선언되고 참조되기 때문에 선언되는 위치는 반드시 참조되기 전에 와야 한다.

형식 (DTD)
<!ENTITY % entity명 "대치할 DTD 내용의 일부분">

참조 형식 (DTD)
%entity명;

외부 파라미터 entity

DTD 내용의 일부를 DTD 문서와 다른 물리적인 저장 단위로 저장한 것

여러 DTD 문서들에서 공통적으로 사용되는 부분을 별도의 파일로 저장하고, 외부 파라미터 entity를 선언한 후 각 DTD 문서에서 참조해서 이용한다.

형식 (DTD)
<!ENTITY % entity명 SYSTEM "entity 파일의 경로"

참조 형식 (DTD)
%entity명;

 

Notation 선언


Notation 선언과 사용

그림, 동영상, 음악 등 binary 파일의 포맷을 식별
➡ MIME type 이용 (ex text/html , image/jpeg)

XML parser가 해석할 수 없는 비-문자 데이터의 포맷과, 데이터를 처리할 응용 프로그램을 지정

형식

<!NOTATION notation명 SYSTEM "SYSTEM 식별자">
<!NOTATION notatoin명 PUBLIC "PUBLIC 식별자" "SYSTEM 식별자">

SYSTEM 식별자 : 응용 프로그램
PUBLIC 식별자 : MIME type

 

𝟏. NOTATION 타입의 속성 값으로 사용
NOTATION 타입의 속성 값으로 사용

형식

<!ATTLIST 엘리먼트명 속성명
		 NOTATION (notation명1|notation명|...) "기본값 선언">

★ 주의 사항 ★
• EMPTY 엘리먼트는 NOTATION 타입의 속성을 가질 수 없음
• 각 엘리먼트는 NOTATION 타입의 속성을 최대 하나만 가질 수 있음

 
𝟐. 외부 일반 unparsed entity의 포맷을 지정하기 위해 사용
외부 일반 unparsed entity를 정의하기 위해서는 그 entity가 어떤 포맷으로 저장되어 있는지를 선언해야 함

형식

<!ENTITY entity명 SYSTEM "entity 파일의 경로" NDATA notation명>

 

조건부 Section 선언


DTD 문서 내부에서 어떤 조건에 따라 DTD의 내용을 포함하거나 포함하지 않도록 하기 위해 사용

형식

<![INCLUDE[
	적용시킬 DTD 내용
]]>
<![IGNORE[
	무시할 DTD 내용
]]>

INCLUDE 키워드로 정의한 부분은 유효성 검사 대상
IGNORE 키워드로 정의한 부분은 XML parser가 읽기는 하지만 유효성 검사에서는 제외됨

profile
Someone has been here

0개의 댓글