-
Notifications
You must be signed in to change notification settings - Fork 4
/
594.txt
202 lines (153 loc) · 11.9 KB
/
594.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
[25] [DFN[[RUBYB[[[文書型定義]]]@en[document type definition]]]] ([DFN[[[DTD]]]])
は、 [[SGML]] や [[XML]] において[[文書型]]を定義する[[マーク付け宣言]]等の集合体です。
[26] [[DTD]] には歴史的にいくつかの版があります。
[FIG(short list)[
- [[SGML]] [[DTD]]
- [[Web SGML]] [[DTD]]
- [[XML DTD]]
- [[データ型・名前空間対応DTD]]
- [[SGML]] [[LPD]]
- [[ISO/IEC 10744]] [[体系的DTD]]
]FIG]
[27] [[DTD]] は[[マーク付け言語]]に関する[[スキーマ言語]]の1つですが、
現在では[[スキーマ言語]]自体が旧時代の遺物と考えられています。
* 文書型定義 (SGML)
[17] [[文書型定義]]は、[[文書型]]の定義。 Document type definition。 [[DTD]]。
[16]
>
:3.24 [RUBYB[文書(型)定義][document (type) definition]], DTD:
[[応用]]によって決定される[[規則]]であって、
[[SGML]] を特定の型の[[文書]]の[[マーク]]に適用するもの。
[[文書型定義]]は[[文書型宣言]]で表現された[[要素型]],
[[要素]]の関係, [[属性]]の形式的な仕様と[[マーク]]で[[表現]]することができる[[参照]]を含む。
[[文書型定義]]は [[SGML]] が構文を定義している[[マーク]]の[[語彙]]を定義する。
出典: [[ISO/IEC 10744]]:1997 [CSECTION[3 Definitions]]
<http://www.y12.doe.gov/sgml/wg8/docs/n1920/html/clause-3.html#def-3.24>
[15]
>[[共通識別子]]は、その[[要素]]がどの種類 ([Q[型]])
のものであるかを表している。
その特定の型のすべての[[文書]]に適用する[[マーク宣言]]の集合を、
文書型定義という。 [SRC[[[JIS X 4151]]‐1992 参考3 4.1]]
意味不明なのは [[JIS]] の翻訳が悪いと思われ。
> 何度も同じことを繰り返さないで済むように、[[文書型定義]]は、
普通、別個の[[実体]]として蓄えてある。それぞれの[[文書]]では、
その[[文書型]]を指定しその[[実体]]を[[参照]]できるようにした[[文書型定義]]を書くことで、
その中に取り込んで利用する。 [SRC[[[JIS X 4151]]‐1992 参考3 4.1]]
[14] SGML では種々の[[マーク宣言]]を使って、[[文書型宣言]]によって文書型を定義します。
[7] 文書型定義と[[文書実現値]]は、 [[class]] と [[instance]] のような関係にあります。
- [2] [CODE(SGML)[[[DOCTYPE]]]] 宣言 ([[文書型宣言]]) により明示される。直接記述される[[内部部分集合]]と、[[識別子]]により参照される[[外部部分集合]]に大別できる。
- [3] DTD の明示は旧来の SGML では必須であったが、 [[WebSGML]] では省略 (暗示) することができる。
- [4] 本来の SGML よりも非常に機能を制限したものながら、 [[XML]] でも DTD を使用することが出来る。 (というか[[妥当]]であるためには DTD の明示が必須である。)
- [5] しかしながら、 XML では妥当性検証が optional であるがために DTD は本来の実力をほとんど発揮できないばかりか、むしろ前時代の遺産として嫌われる傾向にある。
- [6] 嫌われる原因としては、 (1) XML が[[文書実現値]]本体の記述では捨てた記述の自由性が比較的 DTD には残されている (よって実装が比較的面倒である) こと、(2) 拡張性のある DTD にするためには超人的トリック(謎)が必要であること、(3) (2) に [[XML名前空間]]が加われば DTD との相性は最悪で、使い物にならなくなる場合さえあること、辺りに集約できよう。
[12] [[SGML]] では[[文書型定義]]/[[DTD]] と似たものとして、[[連結処理定義]]/[[LPD]]
を規定していますが、こちらは [[SGML]] の必須の機能ではなくあまり使われておらず、
[[XML]] にも含まれていません。
[11] [[ISO/IEC 10744]] は[[体系]]の定義のための[[体系的DTD]] を規定しています。
また、 [[DTD]] 風の[[マーク宣言]]の集合体として[[字句型定義]]も規定されています。
* 文書型定義 (XML)
** 定義
[19]
>
:DTD:
DTD ([[文書型定義]]) は [[XML]] [[マーク宣言]]の[[集成]]であり、
[[DTD]] に適合する[[文書]]で使うことができる合法的な構造、
[[要素]]、[[属性]]を[[集成]]として定義するものです。
仕様書:
- [[XHTML 1.0]]
-- [CITE[2.2. General Terms]]
<IW:XHTML10:"general">
[20]
>
:[RUBYB[文書型定義][document type definition]] (DTD):
特定の[[文書型]]の[[文書実現値]]が適合する [[XML]]
の構造と構文の規則の[[形式的]]で[[機械可読]]な表現。
[[XML 1.0]] で[[文書実現値]]を宣言された[[文書型]]に関して[[妥当性検証]]するために使われる
[[scheme]] の種類。同じ[[マーク付け模型]]が複数の [[DTD]]
で表現できます。
[SRC[XHTML m12n Term]]
仕様書:
-[[XHTML m12n]]
--[XHTML m12n Term] [CSECTION[2. Terms and Definitions]]
<IW:XHTML1m12n:"terms.html#a_terms">
** 物理構造
[28] [[XML DTD]] は、[[文書実体]]中の[[文書型宣言]]に直接記述する[[内部部分集合]]と、
[[文書型宣言]]によって[[参照]]する[[外部部分集合]]によって構成されます。また、
[[内部部分集合]]や[[外部部分集合]]における[[引数実体参照]]から[[参照]]する[[引数実体]]もその一部を構成します。
** MIME 型
[29] [[外部部分集合]]の [[MIME型]]については、[[外部部分集合実体]]を参照。
[30] [[外部引数実体]]の[[MIME型]]については、[[外部引数実体]]を参照。
** XML DTD 入門編
[21] XML では著者が自由に要素や属性を使えるわけですが、
その自由さはともすれば無秩序を招くことになります。
たとえば「段落」要素の子供に「章」要素があるとか、
「人名」要素の子供に「電話番号」要素があるとか、
「本」要素に「敬称」属性がついているとかいうようなことは、
普通は認められるべきではないでしょう。しかし XML
の構文自体はこのような意味的判断とは独立していますから、
ここで挙げた例もすべて認められてしまいます。
そこで、要素や属性の関係の制約を記述する方法が幾つも
考えられています。その記述を一般に「schema (スキーマ)」
と呼びまして、特に XML 用のものとして「XML DTD」や「XML Schema」
などがあります。このような schema を使って文書の正当性を検査することを
「妥当性検証 (validation)」といいます。検査に合格すれば
「妥当 (valid)」、不合格なら「非妥当 (invalid)」です。
データの入力を人間が行う場合には特に間違いが起こりやすいですから、
schema を用意して機械的に検証することは非常に重要です。
今回取り上げるのはそのうちの XML DTD です。「DTD」は「文書型定義
(document type definition)」の略です。 DTD
は設計が古いので既に色々な問題点がわかっています
(から他の schema 言語が色々と考案されたのです) が、比較的単純で簡単ですし、
現時点で他の schema 言語よりもずっと広く使用・実装されています。
今後の予定
2. 要素型宣言
3. 内容モデル
4. 属性定義並び宣言
5. 実体宣言
6. 補足
各回の最後には演習問題を用意する予定です。
** メモ
[8]
[CITE[Designing document type definition (DTD) in SGML/XML]] <http://www.chimaira.org/docs/On-DTD.A2.html>
[9]
[CITE@en[DTDs Don’t Work on the Web]] ([[Henri Sivonen]] 著, [CODE[2007-01-19 00:24:34 +09:00]] 版) <http://hsivonen.iki.fi/no-dtd/>
([[名無しさん]] [WEAK[2007-01-24 12:40:59 +00:00]])
[10]
[CITE@ja[DTD は役に立たない]] ([[わかば]] 著, [TIME[2007-05-25 09:21:54 +09:00]] 版) <http://suika.suikawiki.org/~wakaba/d/d200705#d25-1>
([[名無しさん]] [WEAK[2007-06-03 14:33:00 +00:00]])
[13] [[ISO/IEC]] [[JTC1]]/[[SC34]] は[[名前空間・データ型対応DTD]]
の標準化作業を行っていますが、作業はかなり[[ゆっくりしっていってね]]な感じのようです。
[18] [CITE@en[Ending DTD proliferation at the W3C]]
( ([[Michael'''['''tm''']''' Smith]] 著, [TIME[2014-01-14 04:22:05 +09:00]] 版))
<http://lists.w3.org/Archives/Public/www-tag/2014Jan/0033.html>
[23] [CITE[Don’t call me DOM » Generating HTML documentation from DTD]] ([CODE[2007-08-04 11:19:37 +09:00]] 版) <http://people.w3.org/~dom/archives/2007/07/generating-html-documentation-from-dtd/>
([[名無しさん]] [WEAK[2007-08-04 02:21:17 +00:00]])
[24] [CITE[Don’t call me DOM » DTD comparison]] ([TIME[2007-09-13 21:14:26 +09:00]] 版) <http://people.w3.org/~dom/archives/2007/09/dtd-comparison/>
* メモ
[1] 俗に、 [[DTD]] によって記述される対象である[[マーク付け言語]]のことを [[DTD]]
と言うこともあります。場合によっては [[DTD]] が存在しない[[マーク付け言語]]のことすら
[[DTD]] ということすらあります。
[31] [[DTD]] は歴史的に[[マーク付け言語]]の[[形式的]]定義とみなされており、
特に [[SGML]] 時代は ([[XML DTD]] よりも表現力が高かったこと、
他に[[スキーマ言語]]がなかったこと、一般に現在よりも仕様(書)に求められる厳密度が低かったことから)
[[DTD]] による[[妥当性検証]]を通過することが[[文書]]への[[マーク付け言語]]への[[適合]]
([[SGML]] 用語である「[[妥当]]」) と考えられていました。
[32] しかし現在では [[DTD]] によって記述できるのは仕様のごく基本的な部分のみであること、
にも関わらず [[DTD]] による[[妥当性検証]]を通過することが[[適合]]と誤解されることが多いことなどから、
[[DTD]] はむしろ有害と見なされるようになっています。
;; [33] [[W3C]] は長年 [[Validator]] と称して [[HTML4]] への適合性を検証するサービスを提供していましたが、
実態はほぼ [[DTD]] による[[妥当性検証]]を行っているに過ぎず、自身の[[勧告]]である
[[HTML4]] 仕様書の記述に従っているかどうかのチェックは実装していませんでした。
当時 [[W3C Validator]] で検査したことを根拠に [[HTML4]] や [[XHTML1]]
の正しい文書であると主張する [[Webページ]]は世界的に相当数ありましたが、
そのうちのどれだけが [[HTML4]]/[[XHTML1]] の仕様上の要件にすべて従っていたのか大変怪しいところです。
(その [[HTML4]]/[[XHTML1]] 仕様書の方も、一体どれが[[適合性]]の要件なのかはっきりしない低品質の仕様書ではあったので、
それ以上のものを実装するのも難しかったでしょうが...)
;; [34] [[W3C]] の [[XHTML2 WG]] が本文と [[DTD]] と [[XML Schema]] と
[[RELAX NG]] とで矛盾する内容の仕様書を発行し続けていたように、
複数の異なる「正式」な定義が併存しているとその整合性を保つのは事実上不可能です。
[[DTD]] で適合性の要件を記述できないのは明白ですし、 [[XML Schema]]
は複雑で理解困難にも関わらずやはりすべての適合性の要件を記述できるわけではないので、
[[スキーマ]]による定義を正式な仕様の一部としない近年の傾向は自然な流れでしょう。
[22] [CITE[ANN: Web 2.0 Mashup Ajax JavaScript Json Web Standards Validator Poniez <3 from Bjoern Hoehrmann on 2006-11-01 (www-qa@w3.org from November 2006)]] <http://lists.w3.org/Archives/Public/www-qa/2006Nov/0000.html>
([[名無しさん]] [WEAK[2006-11-12 09:59:34 +00:00]])