5. まとめと例題(1)
ここでは、これまで説明した生成規則のまとめと簡単な例題のXML文書の作成を行います。
まとめ
まずは、生成規則をそのまま列挙します。
[1] document ::= prolog element Misc*
[3] S ::= (#x20 | #x9 | #xD | #xA)+
[4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':'
| CombiningChar | Extender
[5] Name ::= (Letter | '_' | ':') (NameChar)*
[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'
[39] element ::= EmptyElemTag
| STag content ETag [WFC: Element Type Match]
[VC: Element Valid]
[40] STag ::= '<' Name (S Attribute)* S? '>' [WFC: Unique Att Spec]
[42] ETag ::= '</' Name S? '>'
[43] content ::= CharData? ((element | Reference
| CDSect | PI | Comment) CharData?)*
[44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>' [WFC: Unique Att Spec]
[80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"'
| "'" EncName "'")
[81] Encname ::= [A-Za-z] ([A-Za-z0-9._] | '-')*
次に生成規則を日本語訳(ただし、私訳)で表現してみます。
[1] 文書 ::= 前書き 要素 その他* [3] 空白 ::= (#x20 | #x9 | #xD | #xA)+ [4] 名前文字 ::= 字 | 数字 | '.' | '-' | '_' | ':' | 結語文字 | 拡張文字 [5] 名前 ::= (字 | '_' | ':') (名前文字)* [22] 前書き ::= XML宣言? その他* (文書型宣言 その他*)? [23] XML宣言 ::= '<?xml' 版情報 符号化宣言? 非依存宣言? 空白? '?>' [24] 版情報 ::= 空白 'version" 等号 ("'" 版番号 '" | '"' 版番号 '"') [25] 等号 ::= 空白? '=' 空白? [26] 版番号 ::= '1.0' [39] 要素 ::= 空要素タグ | 開始タグ 要素内容 終了タグ [整形式制約: 要素型適合] [妥当性制約: 妥当な要素] [40] 開始タグ ::= '<' 名前 (空白 属性)* 空白? '>' [整形式制約: 一意な属性指定] [42] 終了タグ ::= '</' 名前 空白? '>' [43] 要素内容 ::= 文字データ? ((要素 | 参照 | CDATA節 | 処理命令 | コメント) 文字データ?)* [44] 空要素タグ ::= '<' 名前 (空白 属性)* 空白? '/>' [整形式制約: 一意な属性指定] [80] 符号化宣言 ::= 空白 'encoding' 等号 ('"' 符号化名 '"' | "'" 符号化名 "'") [81] 符号化名 ::= [A-Za-z] ([A-Za-z0-9._] | '-')*
例題
次のような個人情報を扱うアドレス帳のXML文書を作成します。
- 氏名(姓名を分けない)
- 住所情報
- 郵便番号
- 都道府県名
- その他住所
- 電話番号
- 自宅電話番号
- 携帯番号
- E-mailアドレス
最初にこのような情報の階層構造を考え、次に各情報を表現する要素名を決めます。
- 氏名(name)
- 住所情報(adrInfo)
- 郵便番号(zip)
- 都道府県名(division)
- その他住所(address)
- 電話番号(tel)
- 自宅電話番号(homeTel)
- 携帯番号(portableTel)
- E-mailアドレス(email)
各要素名を決めたので、最後にルート要素の名前と一人分の情報を表現する要素名、 そしてエンコーディング形式を決めます。
- ルート要素(adrBooks)
- 一人分の要素(adrData)
- エンコーディング形式(UTF-8)
それでは、以上の取り決めに従ってサンプルを作成してみます。 ファイル名は「adr.xml」として作成します。
<?xml version="1.0" encoding="utf-8"?>
<adrBooks>
<adrData>
<name>XML一郎</name>
<adrInfo>
<zip>999-9999</zip>
<division>東京都</division>
<address>XML区1丁目1番1号</address>
</adrInfo>
<tel>
<homeTel>999-999-9999</homeTel>
<portableTel>000-000-0000</portableTel>
<email>xml@xml.com</email>
</tel>
</adrData>
<adrData>
<name>XML二郎</name>
<adrInfo>
<zip>999-9999</zip>
<division>東京都</division>
<address>XML区1丁目1番2号</address>
</adrInfo>
<tel>
<homeTel>999-999-8888</homeTel>
<portableTel>000-000-9999</portableTel>
<email>xml2@xml.com</email>
</tel>
</adrData>
</adrBooks>