문제

웹 표준 및 페이지 검증이 진행되는 한 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에 대한 유일한 실제 사용은 허용 된 지명 된 엔티티를 정의하는 것입니다 (예 : &nbsp;).

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를 생략하고 명명 된 엔티티를 사용하지 않습니다 (즉 &#160; 보다는 &nbsp;)

다른 팁

DocType은 XML 사양의 일부입니다 (관련 하위 섹션 참조 여기) 및 a에 대한 링크를 포함 할 수 있습니다 DTD, "내부"DTD 선언 또는 둘 다. XML의 많은 "현대"용도는 DocType를 전혀 사용하지 않습니다. Pornel이 언급했듯이 XML Schema와 RelaxNG는 문서의 구문을 지정하는 더 강력한 방법입니다. 보다 이 Tim Bray 블로그 게시물 조금 더 배경.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top