3. XML宣言の書き方
サンプル
まずは、以下のようなサンプル(整形式XML文書)を、ファイル名「test.xml」として、テキストエディタで作成しよう。
<?xml version="1.0" encoding="utf-8"?>
<books>
<book>
<name>書名</name>
<author>著者名</author>
</book>
</books>
完成した整形式XML文書をブラウザ(ここではFirefoxを使用)で読み込み、以下のように表示されていれば、一応完成だ。
整形式XML文書の条件
以下の条件を満足するXML文書を整形式XML文書(Well-Formed XML Documents)という。
- 文書生成規則に合致する。
- 整形式制約条件に従う。
- 文書内で参照される解析対象実体が整形式となる。
文書生成規則とは、XML構文のルールのことで、ここでは、以下のルールに従うことを言う。
[1] document ::= prolog element Misc*
XML文書は、1つのprolog、1つのelement、0個以上のMiscから構成される。Miscは0個以上なので必要なければ省略可能だ。 では、このページでは、prolog部分のうちXML宣言(サンプルの1行目)と呼ばれるものを具体的に見てみよう。
XML宣言
ラベルprologは以下のように定義されている。例によってMiscを無視し、括弧内も0回または1回なので、 無視すると残りはラベルXMLDeclのみとなる。実際には、これも記号?なのでオプショナル指定であるが、通常、省略しない。
[22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?
[23] XMLDecl ::= '<?xml' VersionInfo
EncodingDecl? SDDecl? S? '?>'
[24] VersionInfo ::= S 'version" Eq ("'" VersionNum "'"
| '"' VersionNum '"')
[25] Eq ::= S? '=' S?
[26] VersionNum ::= '1.0'
この定義により記述している部分が、以下の部分であり、これを「XML宣言」と呼ぶ。
<?xml version="1.0" encoding="utf-8"?>
XML宣言において、VersionInfo(version属性)は省略できない。また、指定できるバージョン番号は「1.0」のみである。 さらに記号=(ラベルEqで定義)の前後には空白を置くことができるが、空白はXML構文ルールで以下のように定義されている。
[3] S ::= (#x20 | #x9 | #xD | #xA)+
XML文書に置ける空白文字は、ブランク(間隔文字)以外に、タブ文字、改行文字、復帰文字が含まれる。 また、ラベルEncodingDecl(encoding属性)のルールは、以下のように定義されている。
[80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"'
| "'" EncName "'")
[81] Encname ::= [A-Za-z] ([A-Za-z0-9._] | '-')*
以上のことを一般化すると、XML宣言の書き方は以下のようになる。
<?xml version="1.0" encoding="エンコーディング名"?>