General XML에서 Doctype의 역할
문제
웹 표준 및 페이지 검증이 진행되는 한 DocType (및 라인의 각 URL/식별자가 무엇인지)의 목적을 알고 있지만, XML 문서의 맥락에서 실제로 그것이 무엇인지에 대해서는 확신이 없습니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>My Page</title>
</head>
<body>
<p>Hello</p>
</body>
</html>
실제 XML 문서 구조의 일부입니까, 아니면 주석과 같은 종류의 "힌트"입니까?
"!"의 중요성은 무엇입니까? 이름보다 먼저? 이것은 "요소"의 특수 유형을 나타 냅니까? 그들은 무엇이라고 불렀습니까?
내가 게시 한 예제는 웹 용 xhtml이지만 DocType는 범용 XML 문서에서도 사용됩니까?
해결책
DocType는 SGML에서 "상속"(파일을 구문 분석하는 방법을 설명하는 DTD 파일을 가리켜 야 함)에서 자체 설명적인 XML 구문과 네임 스페이스로 인해 크게 관련이 없었습니다. XML에서 DocType/dtd에 대한 유일한 실제 사용은 허용 된 지명 된 엔티티를 정의하는 것입니다 (예 :
).
XML 사양은 DTD 파일을 완전히 무시하는 "비 검증"파서도 허용합니다 (웹 브라우저는 해당 파서를 사용합니다. text/html
트랩이 경우 XML 파서는 전혀 사용되지 않습니다).
DTD입니다 검증 목적으로는 상당히 가난합니다 (하나 이상의 중첩에 대한 규칙을 지정하기 어렵고, 사전 정의 된 유형 이외의 속성 유형을 지정하는 방법이 없습니다). 스키마, relaxng은 훨씬 더 정확할 수 있습니다.
DTD는 네임 스페이스를 완전히 지원하지 않으므로와 같은 말도 안되는 해결 방법으로 이어집니다. xhtmlplusmathmlplussvg doctype.
웹 브라우저에서 특정 DocTypes는 바람직한 부작용을 가지고 있습니다 표준 호환 렌더링 모드 트리거링. 이것은 DocTypes를 사용하는 것보다 해킹에 더 가깝습니다.
실제 XHTML을 사용하는 경우 (
application/xhtml+xml
- IE에서 전혀 열리지 않는 것), DocType를 전혀 사용하지 마십시오 (XHTML 5의 권장 사항). XML 모드는 DocType에 관계없이 표준 호환 렌더링을 트리거합니다.사용하는 경우
text/html
모드, 사용합니다<!DOCTYPE html>
. 그것은 HTML 5 DocType이며 모든 브라우저에서 최상의 렌더링을 유발하는 가장 짧은 것입니다. 브라우저는 다른 목적으로 DocType를 사용하지 않으므로 아무것도 놓치지 않습니다.XML 파서 (외부 브라우저)로 XHTML 파일을 처리하는 경우 제발 DTD 카탈로그를 올바르게 설정하는 것을 잊지 마십시오. 그렇지 않으면 파서가 dos-ing w3.org 매번 DTD를 가져 오려고합니다. DTD 카탈로그를 사용할 수없는 경우 파서에서 "외부"를 비활성화하거나 DocType를 생략하고 명명 된 엔티티를 사용하지 않습니다 (즉
 
보다는
)
다른 팁
DocType은 XML 사양의 일부입니다 (관련 하위 섹션 참조 여기) 및 a에 대한 링크를 포함 할 수 있습니다 DTD, "내부"DTD 선언 또는 둘 다. XML의 많은 "현대"용도는 DocType를 전혀 사용하지 않습니다. Pornel이 언급했듯이 XML Schema와 RelaxNG는 문서의 구문을 지정하는 더 강력한 방법입니다. 보다 이 Tim Bray 블로그 게시물 조금 더 배경.