이 문서는 Mozilla가 strict 모드 대 호환(quirks) 모드를 결정하기 위해 DOCTYPE 선언을 쓰는 법을 기술합니다. 이를 결정하는 코드는 현재 nsParser.cpp의 DetermineParseMode()에 있습니다. 모드 결정의 역사 일부는 bug 1312와 bug 55264를 참조하세요. Mozilla 1.0 쯤에 새로 생긴 거의 표준(Almost-Standards) 모드는 bug 153032를 참조하세요. 다음이 이 행동(behavior)을 고르게 했던 목적들입니다:
- 바르게 표시되도록 호환 모드일 필요가 있는 현재 웹 상의 거의 모든
text/html
페이지는 호환 모드를 써서 표시되어야 합니다. (전부는 아니고 거의 모두가 다음 목적 역시 고려해야 함.) - 현재 표준에 따라 웹 페이지를 작성하는 제작자는 strict 모드를 일으킬 수 있어야 합니다.
- 장차 생길 DOCTYPE 선언에 공용 식별자를 써서 작성된 페이지는 strict 모드를 써서 표시되어야 합니다.
바꿔 말하면, 이 알고리즘이 Mozilla가 웹에서 알려진 중요 사용자 에이전트가 된 뒤로 작성되었던 페이지를 결정하는 경우에 우리가 찾을 수 있는 가장 좋은 접근법입니다.
완전 표준 모드
다음이 완전 표준(full standards) 모드를 일으킵니다:
text/xml
,application/xml
, 또는application/xhtml+xml
과 같은 XML MIME type으로 보낸 문서 (sniffing이 text/html로 보낸 문서에만 발생하기 때문에).- "DOCTYPE HTML PUBLIC"이 아닌 "DOCTYPE HTML SYSTEM"으로, 아래 언급된 IBM doctype은 뺌
- DTD 없는 DOCTYPE 선언, 즉, <!DOCTYPE HTML>.
- internal subset 있는 DOCTYPE 선언.
- 어떤 알려지지 않은 doctype으로 다음 (기술적으로 알려진) doctype을 포함합니다:
- 공용 식별자 "-//W3C//DTD HTML 4.01//EN".
- 공용 식별자 "-//W3C//DTD HTML 4.0//EN".
- 공용 식별자 "-//W3C//DTD XHTML 1.0 Strict//EN".
- 공용 식별자 "ISO/IEC 15445:2000//DTD HyperText Markup Language//EN".
- 공용 식별자 "ISO/IEC 15445:2000//DTD HTML//EN".
- 공용 식별자 "-//IETF//DTD HTML i18n//EN".
거의 표준 모드
다음은 거의 표준 모드를 일으킵니다. 거의 표준 모드는 1.0과 1.1 알파 뒤지만, 1.0.1과 1.1 베타 앞에 만들었습니다. 거의 표준 모드가 생기기 전에 이 doctype은 완전 표준 모드를 일으켰습니다.
- 공용 식별자 "-//W3C//DTD XHTML 1.0 Transitional//EN".
- 공용 식별자 "-//W3C//DTD XHTML 1.0 Frameset//EN".
- 공용 식별자 "-//W3C//DTD HTML 4.01 Transitional//EN"으로, 시스템 식별자 있음.
- 공용 식별자 "-//W3C//DTD HTML 4.01 Frameset//EN"으로, 시스템 식별자 있음.
호환 모드
다음은 호환 모드를 일으킵니다 (이 목록은 웹 상에 이미 존재하는 페이지가 호환 모드를 일으키게 하도록 포괄할 필요가 있습니다):
이 목록 준비에 다음 사이트가 유용했습니다: W3C HTML Validator, HTMLHelp HTML Validator.
- DOCTYPE 없음.
- doctype 없는 XML 선언 (pseudo-PI) (바꿔 말하면, XML 선언을 무시하고 DOCTYPE 사용). 1.0과 1.1 알파 이전에는 (하지만 1.0.1이나 1.1 베타에선 아님), XML 선언이 있으면 완전 표준 모드를 일으켰습니다.
- 이해할 수 없는 DOCTYPE 선언 (예, 일치하지 않는 따옴표).
- 시스템 식별자 "https://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" (1.5b와 1.4.2 이전에, 이는 거의 표준 모드를 일으켰습니다).
- 공용 식별자 "-//W3C//DTD HTML 4.01 Transitional//EN"으로, 시스템 식별자 없음.
- 공용 식별자 "-//W3C//DTD HTML 4.01 Frameset//EN"으로, 시스템 식별자 없음.
- 공용 식별자 "-//W3C//DTD HTML 4.0 Transitional//EN" (test with 시스템 식별자 같이 보기).
- 공용 식별자 "-//W3C//DTD HTML 4.0 Frameset//EN" (test with 시스템 식별자 같이 보기).
- 공용 식별자 "-//SoftQuad Software//DTD HoTMetaL PRO 6.0::19990601::extensions to HTML 4.0//EN".
- 공용 식별자 "-//SoftQuad//DTD HoTMetaL PRO 4.0::19971010::extensions to HTML 4.0//EN".
- 공용 식별자 "-//IETF//DTD HTML//EN//3.0".
- 공용 식별자 "-//W3O//DTD W3 HTML 3.0//EN//".
- 공용 식별자 "-//W3O//DTD W3 HTML 3.0//EN".
- 공용 식별자 "-//W3C//DTD HTML 3 1995-03-24//EN".
- 공용 식별자 "-//IETF//DTD HTML 3.0//EN".
- 공용 식별자 "-//IETF//DTD HTML 3.0//EN//".
- 공용 식별자 "-//IETF//DTD HTML 3//EN".
- 공용 식별자 "-//IETF//DTD HTML Level 3//EN".
- 공용 식별자 "-//IETF//DTD HTML Level 3//EN//3.0".
- 공용 식별자 "-//IETF//DTD HTML 3.2//EN".
- 공용 식별자 "-//AS//DTD HTML 3.0 asWedit + extensions//EN".
- 공용 식별자 "-//AdvaSoft Ltd//DTD HTML 3.0 asWedit + extensions//EN".
- 공용 식별자 "-//IETF//DTD HTML Strict//EN//3.0".
- 공용 식별자 "-//W3O//DTD W3 HTML Strict 3.0//EN//".
- 공용 식별자 "-//IETF//DTD HTML Strict Level 3//EN".
- 공용 식별자 "-//IETF//DTD HTML Strict Level 3//EN//3.0".
- 공용 식별자 "HTML".
- 공용 식별자 "-//IETF//DTD HTML//EN".
- 공용 식별자 "-//IETF//DTD HTML//EN//2.0".
- 공용 식별자 "-//IETF//DTD HTML 2.0//EN".
- 공용 식별자 "-//IETF//DTD HTML Level 2//EN".
- 공용 식별자 "-//IETF//DTD HTML Level 2//EN//2.0".
- 공용 식별자 "-//IETF//DTD HTML 2.0 Level 2//EN".
- 공용 식별자 "-//IETF//DTD HTML Level 1//EN".
- 공용 식별자 "-//IETF//DTD HTML Level 1//EN//2.0$.
- 공용 식별자 "-//IETF//DTD HTML 2.0 Level 1//EN".
- 공용 식별자 "-//IETF//DTD HTML Level 0//EN".
- 공용 식별자 "-//IETF//DTD HTML Level 0//EN//2.0".
- 공용 식별자 "-//IETF//DTD HTML Strict//EN".
- 공용 식별자 "-//IETF//DTD HTML Strict//EN//2.0".
- 공용 식별자 "-//IETF//DTD HTML Strict Level 2//EN".
- 공용 식별자 "-//IETF//DTD HTML Strict Level 2//EN//2.0".
- 공용 식별자 "-//IETF//DTD HTML 2.0 Strict//EN".
- 공용 식별자 "-//IETF//DTD HTML 2.0 Strict Level 2//EN".
- 공용 식별자 "-//IETF//DTD HTML Strict Level 1//EN".
- 공용 식별자 "-//IETF//DTD HTML Strict Level 1//EN//2.0".
- 공용 식별자 "-//IETF//DTD HTML 2.0 Strict Level 1//EN".
- 공용 식별자 "-//IETF//DTD HTML Strict Level 0//EN".
- 공용 식별자 "-//IETF//DTD HTML Strict Level 0//EN//2.0".
- 공용 식별자 "-//WebTechs//DTD Mozilla HTML//EN".
- 공용 식별자 "-//WebTechs//DTD Mozilla HTML 2.0//EN".
- 공용 식별자 "-//Netscape Comm. Corp.//DTD HTML//EN".
- 공용 식별자 "-//Netscape Comm. Corp.//DTD HTML//EN".
- 공용 식별자 "-//Netscape Comm. Corp.//DTD Strict HTML//EN".
- 공용 식별자 "-//Microsoft//DTD Internet Explorer 2.0 HTML//EN".
- 공용 식별자 "-//Microsoft//DTD Internet Explorer 2.0 HTML Strict//EN".
- 공용 식별자 "-//Microsoft//DTD Internet Explorer 2.0 Tables//EN".
- 공용 식별자 "-//Microsoft//DTD Internet Explorer 3.0 HTML//EN".
- 공용 식별자 "-//Microsoft//DTD Internet Explorer 3.0 HTML Strict//EN".
- 공용 식별자 "-//Microsoft//DTD Internet Explorer 3.0 Tables//EN".
- 공용 식별자 "-//Sun Microsystems Corp.//DTD HotJava HTML//EN".
- 공용 식별자 "-//Sun Microsystems Corp.//DTD HotJava Strict HTML//EN".
- 공용 식별자 "-//IETF//DTD HTML 2.1E//EN".
- 공용 식별자 "-//O'Reilly and Associates//DTD HTML Extended 1.0//EN".
- 공용 식별자 "-//O'Reilly and Associates//DTD HTML Extended Relaxed 1.0//EN".
- 공용 식별자 "-//O'Reilly and Associates//DTD HTML 2.0//EN".
- 공용 식별자 "-//SQ//DTD HTML 2.0 HoTMetaL + extensions//EN".
- 공용 식별자 "-//Spyglass//DTD HTML 2.0 Extended//EN".
- 공용 식별자 "+//Silmaril//DTD HTML Pro v0r11 19970101//EN".
- 공용 식별자 "-//W3C//DTD HTML Experimental 19960712//EN".
- 공용 식별자 "-//W3C//DTD HTML 3.2//EN".
- 공용 식별자 "-//W3C//DTD HTML 3.2 Final//EN".
- 공용 식별자 "-//W3C//DTD HTML 3.2 Draft//EN".
- 공용 식별자 "-//W3C//DTD HTML Experimental 970421//EN".
- 공용 식별자 "-//W3C//DTD HTML 3.2S Draft//EN".
- 공용 식별자 "-//W3C//DTD W3 HTML//EN".
- 공용 식별자 "-//Metrius//DTD Metrius Presentational//EN".
부정확한 대/소문자로 공용 식별자를 쓰는 상당수 페이지 때문에 모든 공용 식별자 비교는 대/소문자를 구별하지 않음을 주의하세요. (이는 엄밀히 말하면 틀린데, 문자열이 대/소문자를 구별하기 때문입니다.)
같이 보기
원본 문서 정보
- 제작자: David Baron
- 최근 업데이트 날짜: August 2, 2005
- 저작권 정보: Copyright (C) David Baron