基本情報技術者 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、プロローグ、要素定義、属性定義、バリデーション、エンコーディング、エンティティ、文書型定義

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

