Mozilla's DOCTYPE sniffing
Mozilla's DOCTYPE sniffing
이 문서는 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 선언 (예, 일치하지 않는 따옴표).
- 시스템 식별자 "http://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".
부정확한 대/소문자로 공용 식별자를 쓰는 상당수 페이지 때문에 모든 공용 식별자 비교는 대/소문자를 구별하지 않음을 주의하세요. (이는 엄밀히 말하면 틀린데, 문자열이 대/소문자를 구별하기 때문입니다.)
Page last modified 08:56, 21 Feb 2007 by Netaras