2009-07-30 11 views
0

ウェブ標準とページの検証が行われる限り、DOCTYPEの目的を知っています(そして、その行の各URL /識別子は何ですか)が、実際には何かについてはわかりませんXML文書の一般的なXMLのDOCTYPEの役割

<?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文書でも使用されていますか?

答えて

6

DOCTYPEはSGMLから継承されています(ファイルを解析する方法を説明しているDTDファイルを指していたはずです)。しかし、わかりやすいXML構文と名前空間ではほとんど無関係です。 XMLにおけるDOCTYPE/DTDの唯一の実際の使用は、許可された名前付きエンティティ(例えば&nbsp;)を定義することです。

XML仕様では、XMLパーサーがまったく使用されていないtext/htmlトラップに入っていない限り、DTDファイルを完全に無視する「検証しない」パーサーも許可されています(Webブラウザーではそのようなパーサーを使用します)。

DTDはquite poor for purpose of validationです(複数のレベルのネストの場合はルールを指定するのが難しく、あらかじめ定義されたタイプを超えるタイプの属性を指定する方法はありません)。 Schema、RelaxNGははるかに正確です。

DTDは名前空間を完全にサポートしていないため、XHTMLplusMathMLplusSVG DOCTYPEのようなばかばかしい回避策につながります。

特定のDOCTYPEは、望ましい副作用(triggering standards-compliant rendering mode)を持っています。これは、目的とするDOCTYPEの使用以上のハックです。

  • あなたは本当のXHTML(application/xhtml+xml - 全くIEで開かないもの)を使用している場合は、(つまり、XHTML 5からの推薦です)すべてのDOCTYPEを使用しないでください。 XMLモードは、DOCTYPEに関係なく、標準準拠のレンダリングをトリガーします。

  • text/htmlモードを使用している場合は、<!DOCTYPE html>を使用してください。これはHTML 5 DOCTYPEであり、すべてのブラウザで最高のレンダリングを実現する最短のものです。ブラウザは他の目的のためにDOCTYPEを使用しないので、あなたは何かを逃すことはありません。

  • あなたはXMLパーサ(外のブラウザ)とXHTMLファイルを処理している場合は、は、そうでない場合は、あなたのパーサがDTDを毎回フェッチしようとしているDoS-ing w3.orgであってもよいし、適切にDTDカタログを設定することを忘れないでください。あなたはDTDカタログを使用できない場合は、パーサに「見た目」を無効にするか、DOCTYPEを省略して、名前付きエンティティを使用していない(すなわち&#160;ではなく&nbsp;を使用)

+0

Real XHTML == application/xhtml + xml?今日のXHTMLはまだ1.1なので、DOCTYPEが必要です。 – xyz

+0

@frou:はい、XHTMLはapplication/xhtml + xmlでのみXMLとして扱われます。 「厳密に準拠している」XHTML 1.1では実際にDOCTYPEが必要です。 – Kornel

2

DOCTYPEは(XML仕様の一部であります関連するサブセクションhereを参照)、DTDへのリンク、「内部」DTD宣言、またはその両方を含めることができます。多くの "現代的な" XMLの使用では、DOCTYPEはまったく使用されません.porneLに言及するように、XML SchemaとRelaxNGの両方が文書の構文を指定する強力な方法です。少し背景については、this Tim Bray blog postを参照してください。

+1

これはSGMLの一部であり、XMLはSGMLの一種であるため、XMLの一部です。 –

+0

私はいくつかの重大な重複があったと考えました(私はWeb以外のものでXSDを使用しました) – xyz

関連する問題