DTD(Document Type Definition)

 

1. DTD(Document Type Definition) 선언

DTD (Document Type Definition)는 SGML (Standard Generalized Markup Language) 계열 마크업 언어의 문서 타입을 정의

– HTML –

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” “http://www.w3.org/TR/html4/strict.dtd”>
HTML 4.01 엄격한 모드다.
프레임과 링크타겟은 허용되지 않는다. 그리고 다음 요소도 사용할수 없다.
Element Style : basefont, center, font, s, strikr, u
Element : applet, dir, isindex, menu
HTML 4.01 Strict는 Mac용 Explorer 5이상 네스케이프 6과 같은 최신 브라우저에서 사용이 가능하다.
이 브라우저 이전의 버전은 쿽스 모드로 랜더링을 한다.
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
HTML 4의 모든 요소를 포함한다. 권장하지 않는 요소의 사용은 가능하나 frame은 사용할수 없다.
HTML 4.01 Strict는 Mac용 Explorer 5이상 네스케이프 6과 같은 최신 브라우저에서 사용이 가능하다.
쿽스 모드로 랜더링을 원할경우 URI를 생략하면 된다.
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Frameset//EN” “http://www.w3.org/TR/html4/frameset.dtd”>
HTML 4.01프레임셋으로 HTML 4.01 Transitional 과 유사하면서 frame을 사용가능할 수 있다.

– XHTML –

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>
HTML 4.01 Strict와 같이 허용되지 않은 요소는 사용할수 없는 HTML 4의 XML버전의 문서이다.

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
HTML 4의 모든 요소를 포함한다. 권장하지 않는 요소의 사용은 가능하나 frame은 사용할수 없다. HTML 4의 XML버전의 문서이다.

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Frameset//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd”>
HTML 4.01 Transitional 과 유사하면서 frame을 사용가능할 수 있다. HTML 4의 XML버전의 문서이다.

1) 사용 목적

– 브라우저마다 각기 다른 엔진을 가지고 있기 때문에 Cross browsing이 잘되지 않는다. 하지만 DTD를 선언하여 CSS코드를 작성하면 모든 브라우저에 동일한 표현효과를 줄 수 있다. 그리고 문서에 대한 정보를 내장하고 있기 때문에 표준형태의 문서에는 필수로 규정하고 있다.

 

2) 담겨진 정보

  • – 문서 버전
  • – 문서 기술 규칙
  • – 사용할 수 있는 속성
  • – 허용되는 속성 값
  • – 문서에서 사용되는 문자 코드 세트 지정

 

3) DTD 동작 및 선언 규칙

브라우저는 선언된 doctype에 따라 렌더링할 모드를 선택게 되는데 이 과정을 Doctype Sniffing(또는 Doctype Wwitching)이라고 하며 브라우저가 출력하고자 하는 문서가 최신이라고 판단을 하면 표준모드(Standard Mode)로 렌더링을 한다. 만약 브라우저가 예전 문서라고 판단을 하면 쿽스모드(Quirks Mode)로 렌더링을 한다.

Doctype sniffing은 MIME타입이 text/html인 문서에서만 적용이 되고 application/xhtml+xml을 포함한 XML MIME타입의 스펙은 자동적으로 표준모드로 동작하게 된다.

HTML과 XHTML에서 DTD에 대한 레퍼런스는 “PUBLIC”문자열과 Formal Public Idendtifier(FPI), Formal System Identifier(FSI) 순으로 기술이 된다. 이때 FSI는 Optional이며 DTD에 대한 URL이 됨.

 

다음은 FPI와 FSI 모두를 포함하는 doctype선언 예

<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01//EN” “http://www.w3c.org/TR/html4/strict.dtd”>

다음은 FPI에 대한 예

<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>

Doctype sniffing은 doctype선언에 이들 중 어떤 것이 기술되어 있느냐를 감지해내는 것이다. 만약 FPI가 기술되어 있고 FSI가 기술되어 있지 않다면 브라우저는 일반적으로 쿽스모드를 선택한다. 왜냐하면 예전에는 doctype선언할 때 일반적으로 사용된 방법이었기 때문이다. 또한 브라우저는 doctype선언부분 까지 기술되지 않았을 경우 또는 기술되더라도 doctype의 문법이 틀렸을 경우에도 쿽스모드를 선택한다.

 

4) 주의

IE6는 Doctype선언이 문서에서 첫 번째 줄에 존재하는 것으로 가정하고 Doctype Sniffing을 수행한다. 그로 인하여 DTD는 문서 제일 상단에 위치 하여야 하고 DTD문서 이전에는 어떤 문구도 작성하여서는 안 된다. (여백 무시)

FSI 기술되어있지 않으면 Quirks mode로 랜더링 된다.

다음은 Quirks Mode 랜더링 되는 예이다

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” >
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<?xml version=”1.0″ encoding=”utf-8″?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>

 

5) Standards Mode vs Quicks mode