質問
DOCTYPEの目的(および行の各url / identifier)はWeb標準とページ検証に関する限り知っていますが、実際に何が!<!> quot; is <!> quot; 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ドキュメント構造の一部ですか、それともコメントのような<!> quot; hint <!> quot;気づいた後に剥ぎ取られますか?
<!> quot;!<!> quot;の意味は何ですか?名前の前に?これは<!> quot; element <!> quot;の特別なタイプを示していますか?彼らは何と呼ばれていますか?
私が投稿した例はWeb用のXHTMLですが、DOCTYPEは汎用のXMLドキュメントでも使用されていますか?
解決
DOCTYPEは<!> quot; inherited <!> quot;です。 SGMLから(ファイルの解析方法を説明するDTDファイルを指すように想定されていました)、しかし、自明のXML構文と名前空間は、それをほとんど無関係にしました。 XMLでのDOCTYPE / DTDの実際の唯一の用途は、許可された名前付きエンティティ(たとえば
)を定義することです。
XML仕様では、<!> quot; non-validating <!> quot;も許可されています。 DTDファイルを完全に無視するパーサー(Webブラウザーは、XMLパーサーがまったく使用されないtext/html
トラップに陥らない限り、このようなパーサーを使用します)。
DTDは検証の目的には非常に劣る(複数レベルのネストのルールを指定するのは難しく、定義済みのいくつかのタイプを超える属性のタイプを指定する方法はありません)。スキーマ、RelaxNGははるかに正確です。
DTDは名前空間も完全にはサポートしていないため、 XHTMLplusMathMLplusSVG DOCTYPE 。
Webブラウザーでは、特定のDOCTYPEには標準準拠のレンダリングモードのトリガーの望ましい副作用があります。これは、意図されたDOCTYPEの使用というよりもハッキングです。
-
実際のXHTML(
application/xhtml+xml
<!>#8211; IEでまったく開かないもの)を使用している場合は、DOCTYPEをまったく使用しないでください(XHTML 5の推奨事項です) )。 XMLモードは、DOCTYPEに関係なく標準に準拠したレンダリングをトリガーします。 -
<!DOCTYPE html>
モードを使用している場合は、 
を使用します。これはHTML 5 DOCTYPEであり、すべてのブラウザーで可能な限り最高のレンダリングをトリガーする最も短いDOCTYPEです。ブラウザは他の目的でDOCTYPEを使用しないため、見逃すことはありません。 -
XMLパーサー(ブラウザー外)でXHTMLファイルを処理している場合は、DTDカタログを適切に設定することを忘れないでください 、そうでない場合、パーサーは DoS-ing w3.org が毎回DTDを取得しようとしています。 DTDカタログを使用できない場合は、<!> quot; externals <!> quot;を無効にします。パーサーで、またはDOCTYPEを省略し、名前付きエンティティを使用しない(つまり、<=>ではなく<=>を使用)
他のヒント
DOCTYPEはXML仕様の一部です(関連するサブセクションこちら) DTD 、<!> quot; internalへのリンクを含めることができます<!> quot; DTD宣言、またはその両方。多くの<!> quot; modern <!> quot; XMLの使用はDOCTYPEをまったく使用しませんが、porneLが述べているように、XMLスキーマとRelaxNGの両方がドキュメントの構文を指定するより強力な方法です。 このTim Brayのブログ投稿をご覧ください。もう少し背景について。