[11] [[XML]] の[[文書実体]]の先頭に書くことができる [CODE(XML)@en[]] を [DFN[XML [RUBYB[宣言]@en[declaration]]]]、[[外部解析対象実体]]の先頭に書くことができる [CODE(XML)@en[]] を[DFN[[RUBYB[テキスト宣言]@en[text declaration]]]]といいます。 * XML 宣言 [12] [[XML宣言]]は[[文書実体]]の先頭に1つだけ指定することができます。 [13] [[XML宣言]]は必須ではありません。 [15] [[空白]]や[[注釈]]も含め、[[テキスト宣言]]より前に何かがあってはいけません。 ([[BOM]] はあってもOKです。) * テキスト宣言 [6] [[テキスト宣言]]は[[文書実体]]を除くすべての[[外部解析対象実体]] ([[外部一般解析対象実体]]、[[外部引数実体]]、[[外部部分集合実体]]) の先頭に1つだけ指定することができます。 [14] [[テキスト宣言]]は必須ではありません。 [7] [[空白]]や[[注釈]]も含め、[[テキスト宣言]]より前に何かがあってはいけません。 ([[BOM]] はあってもOKです。) [8] [[XML]] [[文書]]は [[SGML]] [[文書]]である、という建前からすると、[[テキスト宣言]]は [[SGML]] [[処理指令]]の一種として解釈されることになりますが、[[マーク付け宣言]]の中の[[引数実体参照]]が[[参照]]する[[外部引数実体]]に[[テキスト宣言]]が含まれていると、 [[マーク付け宣言]]の[[引数]]として[[処理指令]]が含まれることになって、好ましくないように思えます。 ;; [9] [[外部実体]]については[[リテラル実体値]]ではなく[[置換文]]が[[SGML実体]]に相当すると解釈すれば [[SGML]] 的には[[テキスト宣言]]は対応するものが何もない (システム側に属する何かである) ということになりますが、 そういう任意の解釈を導入してしまうと何とでも言えてしまうのでちょっと・・・。 ;; [10] [[属性値]]で使われる[[一般実体参照]]からは[[外部実体]]を[[参照]]してはいけないことになっているので、 この問題は生じません。 * 擬似属性 [16] [[XML宣言]]や[[テキスト宣言]]には、[[属性]]のように見える引数を指定することができます。 これは[[要素]]に指定される[[属性]]とは違った専用の構文を持っています。[[属性]]の順序が固定である、 特定の[[属性値]]しか使えず、[[実体参照]]も認められないなどの違いがあります。 [17] これらは[[擬似属性]]と呼ばれることがあります。ただし「[[擬似属性]]」という用語は [CODE(XML)@en[[[]]]] で導入されたもので、[[XML]] の仕様書では使われていません。 [FIG[ [FIGCAPTION[ [18] [[擬似属性]]の一覧 ]FIGCAPTION] ,[[擬似属性]]の名前,XML 仕様書での呼称,説明 ,[CODE(XMLa)@en[[[version]]]],,[[XML]] の版 ,[CODE(XMLa)@en[[[encoding]]]],[[符号化宣言]],[[実体]]の[[文字符号化]] ,[CODE(XMLa)@en[[[standalone]]]],[[単独文書宣言]],[[外部実体]]の有無 ]FIG] [22] [[擬似属性]]は >>16 に示した順序でのみ指定できます。 [19] [[XML宣言]]では [CODE(XMLa)@en[[[version]]]] [[擬似属性]]が必須です。 [20] [[テキスト宣言]]では [CODE(XMLa)@en[[[encoding]]]] [[擬似属性]]が必須です。 [21] [CODE(XMLa)@en[[[standalone]]]] [[擬似属性]]は [[XML宣言]]でのみ使えます。 * メモ [1] XML 宣言 (というか[[符号化宣言]]) って便利なんですよー。 [[NC]]4 って日本語の[[文字コード]]の判別が今ほど精度よくないんで、たまに[[シフトJIS]] と[[日本語EUC]] 間違っちゃうんです。でも、 NC4 にはもれなく XML 宣言 (や他の[[処理指令]]) をもれなく表示しちゃう機能がついてますから、それをみながら文字コードを手動で指定できますっ! [2] [PRE[ [INS[(略)]] ]PRE] こういうのを見てどう思います? 出力したのは例の [[WWWブラウザ]]。 [3] Q: XML 宣言って必須ですよね? A: いいえ。 XML 宣言は必須ではありません。 ;; XML 宣言必須説、あちこちで見かけるのですけど、お前は本当に仕様書読んだのかと問い詰めたいですよ。 ;; あ、 [[XML 1.1]] をお使いであれば、必須です。 ([[名無しさん]] [sage]) [4] 無料鯖とか広告のために内容を改竄する形の鯖のせいで XML 宣言が一番最初じゃなくなることがあるみたいです。 そういう鯖の利用者は XML 宣言つきにするべきではありませんね。むしろへんてこな XML 宣言はつけては'''ならない'''ですよね。 ([[名無しさん]] [WEAK[2004-07-10 09:05:38 +00:00]]) [5] [CODE(XMLa)@en[[[encoding]]]] [[擬似属性]]を[CODE(XMLa)@en[[[charset]]]]にしている人がいくらかいるみたいです。どうみても非[[整形式]]です。本当にありがとうございました。 ;; <IW:Google:"\"xml version 1.0 charset\"">