この文書はXMLの文書だ!
と、文字通り「宣言」するためのもの(言い過ぎかな、)です。こんな書き方するそうです。
<?xml version="1.0"?>
一見して分かるように、SGML宣言のような様々な定義はありませんというか、なくてもいい。
でも、厳密には、こう定義されてます。
XML宣言 は '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' と書く
S は空白(OX20,0x0a,0x0d,0x09)ね。
先頭の
<?と最後の?>とは
処理命令(の開始、終了)だということで、終了の方はともかく、まぁ、いわゆるSGMLで
よく使われる方法ですよね。
#PIの定義で、<? で始まり、?> で終わる と定義されちゃってる。理由は、、、?
それにxmlが続いて、「XMLの文書」と
宣言するわけなんですが、VersionInfoが必須になってます。
これは、「XMLのバージョンを明記しろ」ということで、現行は1.0
なので、
VersionInfo := S 'version' Eq ( 'VersionNum' | " VersionNum ")
(Eq ってのは = のこと。厳密には、その前後に0〜1個の空白が入っていい)
っていう書式にしたがってversion="1.0"って書きます。
このあたりまでは、いわゆるSGML宣言の先頭に<!SGML・・・・>
で、必要に応じて(ENR)(バージョンにあたるでしょ?)を記載するの
と同じようなもんかも知れませんね、、、
これだけなら何てことないんですけど、
EncodingDecl?
これが曲者。ここで文書のエンコード方法を記載するんです。そういう意味では、
XML宣言は SGML宣言に似ていなくもない。でも、いちいち文字のマッピングなんか書かない。
で、?が付いてるから、別に書かなくてもいい。でも、ここで特になにもいわないと「異議無き時は沈黙を持って答えよ」じゃないけど、
ISO 10646というか、同じじゃないけど
Unicode 2.0だかなんだかになっちゃう。
#UTF-8だっけなんだっけ、、、全然わからん。
私の場合、ここにencoding="EUC-JP"って書く。 書式は、
EncodingDecl ::= S 'encodeing' Eq ('"' EncName '"' | "'" EncName "'")
個人的に、XMLで一番わかんないのが、このエンコードに関する話。 勉強したら、書いてみます。
で、そのあとの
SDDecl?
スタンドアロン文書宣言(Standalone Document Declaration)のことだそうで、、、 これもEncodeingDecl同様、別の機会にということで、勘弁。
というわけで、結論。
こんな感じで「決まり文句」として使いましょう。(^ ^;
<?xml version="1.0" encoding="EUC-JP" ?>
か
<?xml version="1.0" encoding="ISO-2022-JP" ?>
パソコンでお仕事してる人は、
<?xml version="1.0" encoding="Shift_JIS" ?>
かな、、、
そうそう、大文字・小文字の違いに気を付けてくだせぇ。