回答:
standalone
宣言は、のいずれかのマークアップ宣言を無視するパーサを伝えるための方法ですDTDを。その後、DTDは検証にのみ使用されます。
例として、控えめな<img>
タグを考えます。あなたが見ればXHTML 1.0 DTD、あなたはそのパーサを伝えるマークアップ宣言参照<img>
タグが空であると持たなければならないsrc
とalt
属性を。ブラウザはXHTML 1.0文書を通過し、見つかっている場合は<img>
、タグを、それはDTDが必要であることに気づくはずですsrc
し、alt
属性、それらが存在しない場合は、それらを追加します。また、<img>
EMPTYであるため、タグは自動的に閉じられます。これは、「マークアップ宣言がドキュメントのコンテンツに影響を与える可能性がある」というXML仕様の意味です。次に、standalone
宣言を使用して、これらのルールを無視するようにパーサーに指示できます。
パーサーが実際にこれを実行するかどうかは別の問題ですが、標準に準拠した検証パーサー(ブラウザーなど)が実行する必要があります。
DTDを指定しない場合、スタンドアロン宣言は「意味がない」ため、DTDも指定しない限り、それを使用する理由はありません。
standalone=yes
、マークアップ宣言は無視されず、代わりにドキュメントが無効なXMLになります。それを編集して答えにしてもよろしいですか?
yes
and no
で、no
はデフォルト値です。standalone="yes"
つまり、XMLプロセッサは検証にのみDTDを使用する必要があります。その場合、次の場合には使用されません。
standalone="yes"
文書が外部DTDを使用する場合、妥当性制約が追加される場合があることに注意してください。文書は、そのような属性のデフォルト値としてXMLの変更を必要とするものを、含まれている、とするときstandalone="yes"
に使用され、その後、文書は無効です。standalone="yes"
ドキュメント処理のパフォーマンスを最適化するのに役立ちます。standalone
現在のXMLドキュメントが外部マークアップ宣言に依存しているかどうかを説明します。
W3Cはその目的を「Extensible Markup Language(XML)1.0(Fifth Edition)」で説明しています。
マークアップ宣言は、XMLプロセッサからアプリケーションに渡されるときに、ドキュメントのコンテンツに影響を与える可能性があります。例は属性のデフォルトとエンティティ宣言です。スタンドアロンドキュメント宣言は、XML宣言のコンポーネントとして表示される場合があり、ドキュメントエンティティの外部またはパラメータエンティティに表示されるような宣言があるかどうかを示します。[定義:外部マークアップ宣言は、外部サブセットまたはパラメーターエンティティで発生するマークアップ宣言として定義されます(外部または内部、後者は非検証プロセッサーがそれらを読み取る必要がないため含まれています)。
standalone=yes
宣言の目的は、ドキュメント内の情報が内部DTDのみに基づいて忠実に取得できることを保証することです。つまり、ドキュメントは外部参照なしで「スタンドアロン」であることができます。スタンドアロンドキュメントを検証すると、検証を行わないプロセッサが、ドキュメントを正しく解析するために利用できるすべての情報を確実に利用できるようになります。
スタンドアロン宣言は、ドキュメントに外部DTDがなく、内部DTDにパラメータエンティティ参照がない場合、これらのドキュメントはすでに暗黙的にスタンドアロンであるため、意味がありません。
を使用した実際の効果は次のとおりstandalone=yes
です。
文書に内部DTDで宣言されていないエンティティへの参照が含まれている場合、外部DTDまたはパラメータエンティティ参照を使用して文書を解析するときに、プロセッサにエラーをスローさせます(非検証プロセッサは必要ないため、パラメータエンティティの置換テキストを除きます)これを解析する); amp
、lt
、gt
、apos
、そしてquot
唯一の例外です
スタンドアロンとして宣言されていないドキュメントを解析する場合、非検証プロセッサは、パラメータエンティティ参照に遭遇するとすぐに、内部DTDの解析を停止できます。ドキュメントをスタンドアロンとして宣言すると、1つ以上のパラメーターエンティティの参照を無視した後でも、検証されていないプロセッサが内部DTDのマークアップ宣言を解析します。
ドキュメントで次のいずれかが見つかり、それぞれの宣言が外部DTDまたはパラメーターエンティティの置換テキストにある場合、検証プロセッサーにエラーをスローさせます。
amp
、lt
、gt
、apos
、及びquot
)非検証プロセッサは、スタンドアロンではないドキュメントの外部DTDを取得し、すべてのパラメータエンティティ参照を展開することを検討する場合があります。ただし、スタンドアロンではないため、設定standalone=yes
によって非検証プロセッサのパフォーマンスが理論的に向上する可能性があります(ネタバレ警告:おそらく違いはありません)。
ここでの他の答えは不完全または不正確です。主な誤解は、
スタンドアロン宣言は、DTD内のマークアップ宣言を無視するようにパーサーに指示する方法です。その後、DTDは検証のみに使用されます。
standalone = "yes"は、XMLプロセッサーが検証のみにDTDを使用する必要があることを意味します。
まったく逆に、ドキュメントをスタンドアロンとして宣言すると、実際には検証されないプロセッサが通常無視する必要がある内部宣言(つまり、無視されたパラメーターエンティティ参照の後の宣言)を解析するよう強制されます。これは検証とは独立しているため、非検証プロセッサーは、内部DTDの情報を使用して、デフォルトの属性値を提供し、トークン化された属性を正規化する必要があります。