基本情報技術者 2018年 春期 午前(科目A) 問08
問題文
XML文書のDTDに記述するものはどれか。
選択肢
ア:使用する文字コード
イ:データ
ウ:バージョン情報
エ:文書型の定義(正解)
🔒 解説は解答すると表示されます
XMLの文書型定義【午前解説】
正解の理由
DTD(Document Type Definition)は「文書型定義」を意味し、XML文書が従うべき要素名、要素間の入れ子構造、属性、エンティティ、空要素や順序・発生回数の制約を記述するためのものです。したがって「文書型の定義」が正解であり、DTDは文書の構造と制約を明示して検証(バリデーション)を可能にします。
解法ステップ
- 選択肢を見て「DTD」が何を定義するか思い出す(Document Type Definition)。
- 各選択肢とDTDの役割を対照する:文字コード・バージョン・データ・文書型。
- DTDが構造(要素・属性・エンティティ)を定義する点に一致する選択肢を選ぶ。
- 残りの選択肢はXMLプロローグやXML本体の役割であることを確認して除外する。
選択肢別の誤答解説
- ア: 使用する文字コード
誤り。文字コードはXML宣言(例:<?xml version="1.0" encoding="UTF-8"?>)で指定します。DTDの役割ではありません。 - イ: データ
誤り。データ(要素やテキスト内容)はXML文書そのものに記述され、DTDはそれらの「構造規則」を記述します。 - ウ: バージョン情報
誤り。XMLのバージョンはXML宣言のversion属性で示します。DTDは文書のバリデーションルールを定義します。 - エ: 文書型の定義
正解。DTDは文書型(要素、属性、エンティティ、順序・出現規則など)を定義するためのものです。
よくある誤解
- 「文字コードもDTDで指定できる」と誤解する人がいますが、文字コード指定はXML宣言(プロローグ)の
encoding属性で行います。 - 「DTDはデータ本体を記述する」と考える人がいますが、DTDはデータの構造規則を記述するのみで、実際のデータはXML要素内にあります。
- 「バージョン情報をDTDに書く」と思う人がいますが、XMLのバージョンもXML宣言で指定します(例:
version="1.0")。
補足コラム
- DTDの記述例(内部DTD、外部DTDの宣言例):
<!-- 内部DTDの例 -->
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<!-- 外部DTDの参照 -->
<!DOCTYPE note SYSTEM "note.dtd">
- DTDの代替としてXSD(XML Schema)があり、データ型の詳細な定義や名前空間の扱いが優れています。
- バリデーションが必要ならDTDかXSDを用いてXMLの検証を行います。単に構文チェックだけならパーサのwell-formedチェックで十分です。
FAQ
Q1: DTDでデータ型(数値型や日付型)は定義できますか?
A1: 限定的です。DTDは基本的に文字列と #PCDATA、列挙型などしか扱えず、数値や日付の厳密な型チェックはXML Schema(XSD)が適しています。
A1: 限定的です。DTDは基本的に文字列と #PCDATA、列挙型などしか扱えず、数値や日付の厳密な型チェックはXML Schema(XSD)が適しています。
Q2: XMLファイルにバージョンと文字コードを書かないとどうなる?
A2: バージョン指定がないと規格のデフォルトが適用されますが、文字コードが不明確だとパーサが誤解する可能性があるため、通常は
A2: バージョン指定がないと規格のデフォルトが適用されますが、文字コードが不明確だとパーサが誤解する可能性があるため、通常は
<?xml version="1.0" encoding="UTF-8"?> のように明示します。Q3: DTDは必須ですか?
A3: 必須ではありません。DTDはバリデーションや文書の一貫性確保に有用ですが、必ずしも全てのXML文書で用いられるわけではありません。
A3: 必須ではありません。DTDはバリデーションや文書の一貫性確保に有用ですが、必ずしも全てのXML文書で用いられるわけではありません。
関連キーワード: XML、DTD、XML Schema、プロローグ、要素定義、属性定義、バリデーション、エンコーディング、エンティティ、文書型定義

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

