4. ルート要素
ルート要素
XML文書はdocument生成規則に従う。
[1] document ::= prolog element Misc*
このときラベルprologで記述するものをXML宣言のみとし、ラベルMiscは任意だから記述しないと仮定する。 すると、残りはラベルelementのみとなる。これをルート(ルート要素)あるいは文書要素と言う。
ルートは、XML文書中にただ1つだけ存在し、他の要素の内容に含まれない要素である。
要素
要素の書き方は、次のように定義されている。
[39] element ::= EmptyElemTag
| STag content ETag [WFC: Element Type Match]
[VC: Element Valid]
要素は空要素(ラベルEmptyElemTagによる空タグ)と開始タグ(ラベルSTag)と終了タグ(ラベルETag)で 内容(ラベルcontent)を囲むタイプの2種類に分類される。 この定義で[WFC: ]の部分には整形式制約条件が、[VC: ]の部分には妥当性制約条件が記述されている。 要素の整形式制約条件は、開始・終了タグの名前が一致しなければならないことを意味する。 妥当性制約条件については、省略する。
- 要素は、空タグまたは開始・終了タグによって記述される。
- 開始・終了タグを記述する場合、その名前は同じである。
名前
XMLでは、要素名や属性名など「名前(ラベルName)」を記述する部分がある。この名前は次のように定義されている。
[4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':'
| CombiningChar | Extender
[5] Name ::= (Letter | '_' | ':') (NameChar)*
ラベルLetterの定義は使用できる文字コード(Unicode)が指定されている。主なものとしては半角英字、ひらがな、全角カタカナ、漢字などがある。 ラベルDigitは、数字が定義されている。ラベルCombiningCharとラベルExtenderでは、それ以外の文字が定義されている。
また、上記の定義には記述されていないが、仕様書では、大文字小文字の区別なく、 「xml」で始まる名前は予約されているため使うことができない。
- 先頭は字(Letter; 一般の文字、「_」、「:」)で始まる。
- 2文字目以降には字、数字、「・」、「.」、「−」、「_」、「:」を記述することができる。
開始タグの書き方
開始タグはラベルSTagで定義されている。
[40] STag ::= '<' Name (S Attribute)* S? '>' [WFC: Unique Att Spec]
開始タグを記述した場合、必ず対応する終了タグを記述する。 また、ラベルNameを要素名と呼ぶが、開始・終了タグの要素名は一致しなければならない。 なお、定義の中で属性に関する部分[(S Attribute)* と 整形式制約条件]については、後述するので今は無視している。
- 必ず終了タグとペアで使用する。
- 開始・終了タグの要素名は同じ名前になる。
- 記号<に続けて要素名を記述する。
- 最後は記号>で終わる。
- 要素名と記号>の間には空白文字を記述できる。
終了タグの書き方
終了タグはラベルETagで定義されている。
[42] ETag ::= '</' Name S? '>'
- 必ず開始タグとペアで使用する。
- 開始・終了タグの要素名は同じ名前になる。
- 記号</に続けて要素名を記述する。
- 最後は記号>で終わる。
- 要素名と記号>の間には空白文字を記述できる。
内容の書き方
開始タグと終了タグで囲まれた間に記述する内容はラベルcontentで定義されている。
[43] content ::= CharData? ((element | Reference
| CDSect | PI | Comment) CharData?)*
主なものとしてはラベルelementで定義された要素、ラベルCharDataで定義された文字を記述することができる。 文字を記述する場合、注意としては「<」、「>」、「&」、「”」、「’」の各記号はそのまま記述することができない そのため実体参照と呼ばれる方法を使って記号を表現する。
文字 | 実体参照 |
---|---|
< | &lt; |
> | &gt; |
& | &amp; |
” | &quot; |
’ | &apos; |
空タグの書き方
空タグはラベルEmptyElemTagで定義されている。
[44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'
[WFC: Unique Att Spec]
- 空タグは内容を持たない。
- 記号<に続けて要素名を記述する。
- 最後は記号/>で終わる。
- 要素名と記号/>の間には空白文字を記述できる。