[11] XML の文書実体の先頭に書くことができる <?xml?>
を
XML 宣言、外部解析対象実体の先頭に書くことができる <?xml?>
をテキスト宣言といいます。
本項は歴史的事項を説明しています。本項の内容の一部または全部は、現在の状況とは異なるかもしれません。
(なお本項の内容の一部または全部は、互換性または歴史的連続性のために現在も有効な場合もあります。しかし新たに利用することは避けるべきです。)
[6] テキスト宣言は文書実体を除くすべての外部解析対象実体 (外部一般解析対象実体、外部引数実体、外部部分集合実体) の先頭に1つだけ指定することができます。
[7] 空白や注釈も含め、テキスト宣言より前に何かがあってはいけません。 (BOM はあってもOKです。)
[8] XML 文書は SGML 文書である、という建前からすると、テキスト宣言は SGML 処理指令の一種として解釈されることになりますが、マーク付け宣言の中の引数実体参照が参照する外部引数実体にテキスト宣言が含まれていると、 マーク付け宣言の引数として処理指令が含まれることになって、好ましくないように思えます。
[16] XML宣言やテキスト宣言には、属性のように見える引数を指定することができます。 これは要素に指定される属性とは違った専用の構文を持っています。属性の順序が固定である、 特定の属性値しか使えず、実体参照も認められないなどの違いがあります。
[17] これらは擬似属性と呼ばれることがあります。ただし「擬似属性」という用語は <?xml-stylesheet?>
で導入されたもので、XML の仕様書では使われていません。
[22] 擬似属性は >>16 に示した順序でのみ指定できます。
[19] XML宣言では version
擬似属性が必須です。
[20] テキスト宣言では encoding
擬似属性が必須です。
[21] standalone
擬似属性は XML宣言でのみ使えます。
[29] DOM3中核では Document
に xmlVersion
、
xmlEncoding
、xmlStandalone
という属性があり、
XML宣言の情報がここに現れます。
[30] 同じくDOM3中核では Entity
に xmlVersion
、
xmlEncoding
という属性があり、テキスト宣言の情報がここに現れます。
[31] 現在の DOM Standard では >>29 も >>30 も削除されており、XML宣言やテキスト宣言の情報にはアクセスできません。 また DOM3 仕様上も、引数実体のテキスト宣言にはアクセスできません。
[27] XML の処理指令は構文上「xml
」が対象名となることを認めていません。
従って、XML宣言やテキスト宣言以外でこれらと似た処理指令を文書に含めることはできません。
[28] DOM の createProcessingInstruction
メソッドは対象名が
xml
かどうかチェックしません。ですからXML宣言やテキスト宣言であるかのような処理指令を含む
DOM 木を作ることはできます。
[23] (XHTML ではなく) HTML ではXML宣言を使うことができません。かつて XHTML を
text/html
で提供することが流行った時代には、XML宣言を含む HTML文書が数多く生み出されました。
しかしHTML構文解析器はXML宣言を壊れた注釈と解釈するので、XML宣言に含まれる情報が解釈されることはありません。
[24] かつてはXML宣言の有無が DOCTYPEスイッチに影響するWebブラウザーがありました。
[1] XML 宣言 (というか符号化宣言) って便利なんですよー。 NC4 って日本語の文字コードの判別が今ほど精度よくないんで、たまにシフトJIS と日本語EUC 間違っちゃうんです。でも、 NC4 にはもれなく XML 宣言 (や他の処理指令) をもれなく表示しちゃう機能がついてますから、それをみながら文字コードを手動で指定できますっ!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!-- saved from url=(0064)http://foo.example/ --> <?xml version="1.0" encoding="iso-2022-jp"?><html lang=ja xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"><head><title> (略)
こういうのを見てどう思います? 出力したのは例の WWWブラウザ。
[3] Q: XML 宣言って必須ですよね?
A: いいえ。 XML 宣言は必須ではありません。
(名無しさん [sage])
[4] 無料鯖とか広告のために内容を改竄する形の鯖のせいで XML 宣言が一番最初じゃなくなることがあるみたいです。 そういう鯖の利用者は XML 宣言つきにするべきではありませんね。むしろへんてこな XML 宣言はつけてはならないですよね。 (名無しさん 2004-07-10 09:05:38 +00:00)
[5]
encoding
擬似属性をcharset
にしている人がいくらかいるみたいです。どうみても非整形式です。本当にありがとうございました。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?xml version="1.0" encoding="euc-jp"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:fb="http://ogp.me/ns/fb#" lang="ja">
<head>
Every IODEF document MUST begin with an XML declaration, and MUST
specify the XML version used. If UTF-8 encoding is not used, the
character encoding MUST also be explicitly specified.
Every IODEF document MUST begin with an XML declaration and MUST
specify the XML version used. The character encoding MUST also be
explicitly specified. UTF-8 [RFC3629] SHOULD be used unless UTF-16
[RFC2781] is necessary. Encodings other than UTF-8 and UTF-16 SHOULD
NOT be used.
[38] Bogo-XML Declaration Returns to Gecko (Henri Sivonen, , ) https://hsivonen.fi/xml-decl/
[39] rfc3920, https://datatracker.ietf.org/doc/html/rfc3920#section-11.4
text declaration を使えと言っているが実際には XML宣言しか書けない。