-
Notifications
You must be signed in to change notification settings - Fork 4
/
123.txt
210 lines (172 loc) · 10.8 KB
/
123.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
203
204
205
206
207
208
209
210
[1] [[グローブ]]は抽象データ表現であり、
グローブを処理するシステムは内部データ構造にグローブをそのまま反映させる必要はありません。
しかし、共通のグローブ表現形式があれば検証、虫取り、
応用間情報交換などに有用です。そのため、
グローブや[[ハイパーグローブ]]を一意に表現できる[DFN[[RUBYB[正準グローブ表現][canonical grove representation]]]]
([DFN[[[CGR]]]]) 文書型が定義されています。
正準グローブ表現文書型は [[HyTime]] [[体系]]から派生した [[SGML]]
の[[文書型]]です。ただし、[[節点]]の[[特性]]の値が異なる場合にのみ異なる文書となるような制約が加えられています。
ですから、正準グローブ表現文書は SGML 文書として扱うこともできますが、
単純な[[文字列]]として同一性を確かめることもできます。
また、多くのプログラム言語の標準の文字列構文解析機能を使って構文解析できるようにも配慮されています。
[2] 仕様書:
- [[ISO/IEC 10744]]:1997
-- [CSECTION[A.4.5 Canonical Grove Representation (CGR)]] <http://www.y12.doe.gov/sgml/wg8/docs/n1920/html/clause-A.4.5.html>
[[#comment]]
* 要素型
[3] 正準グローブ表現文書型では、次の[[要素型]]が定義されています
[SRC[ISO/IEC 10744:1997 A.4.5.1]]。
:[CODE(SGMLe)[[[grove]]]]:1つの[[グローブ]]を表します。
([CODE(SGML)[[CODE(SGMLe)[node]], [CODE(SGMLe)[urefloc]]*]])
:[CODE(SGMLe)[[[node]]]]:1つの[[節点]]を表します。
([CODE(SGML)[[CODE(SGMLe)[nodeprop]]*]])
[CODE(SGMLa)[[[id]]]] 属性 (必須, [CODE(SGML)[[[ID]]]])
は節点の識別子です。
[CODE(SGMLa)[[[class]]]] 属性 (必須, [CODE(SGML)[[[NAME]]]])
は節点の[[規格参照具象構文]]の[[級名]]です。
:[CODE(SGMLe)[[[nodeprop]]]]:節点の1つの[[特性]](値)を表します。
[[内容]]は特性値です。[[節点並び]]は節点の識別子を空白で区切った並びとして表現します。
([CODE(SGML)[(#[[PCDATA]] | [CODE(SGMLe)[slsep]] | [CODE(SGMLe)[node]])*]] [WEAK[([CODE(SGMLe)[node]] は [CODE(SGMLa)[noderel]] が [CODE(SGML)[subnode]] の場合のみ。)]])
[CODE(SGMLa)[[[datatype]]]] 属性 (必須, [CODE(SGML)[[[NAME]]]])
は特性のデータ型の規格参照具象構文名を、
[CODE(SGMLa)[[[rcsnm]]]] 属性 (必須, [CODE(SGML)[[[NAME]]]])
は特性の規格参照具象構文名を、
[CODE(SGMLa)[[[noderel]]]] 属性 (必須) は特性の[[節関係型]]
([CODE(SGML)[[[subnode]]]], [CODE(SGML)[[[irefnode]]]],
[CODE(SGML)[[[urefnode]]]], [CODE(SGML)[[[primitive]]]] のいずれか)
を表します。 [CODE(SGMLa)[[[isnull]]]] 属性 ([[真偽値属性]])
は特性値が [[null]] の時に指定します。
:[CODE(SGMLe)[[[urefloc]]]]:他のグローブの節点の[[番地]]を表します。
([CODE(SGML)[#[[PCDATA]]]])
正準グローブ表現文書がハイパーグローブとは独立に生成された場合は、
節点番地名不詳を表す文字列 [CODE(SGML)[[[UNKNOWN]]]]
を内容とします。ハイパーグローブ全体の正準グローブ表現文書生成過程でこの文書が生成された場合には、
参照された節点を含んでいる正準グローブ表現文書の節点の識別子を内容とします。
[CODE(SGMLa)[[[id]]]] 属性 ([CODE(SGML)[[[ID]]]]) は必須です。
[CODE(SGMLa)[[[locsrc]]]] 属性 ([CODE(SGML)[[[ENTITY]]]]) は必須です。
この要素型は特性位置番地要素形式 ([CODE(SGMLe)[[[proploc]]]] 要素形式)
から[[派生]]しています。
[CODE(SGMLa)[[[HyTime]]]] 属性は [CODE(SGMLe)[[[nmsploc]]]]
に固定です。 [CODE(SGMLa)[[[namespc]]]] 属性は [CODE(SGML)[[[elements]]]]
に固定です。 [CODE(SGMLa)[[[notname]]]] 属性は [CODE(SGML)[[[ignore]]]]
に固定です。
:[CODE(SGMLe)[[[slsep]]]]:文字列並びで文字列を分離します。
([[強制空要素]])
[[#comment]]
* 具象構文
[4] 正準グローブ表現文書は、[[名前]]の長さ制限が [CODE(SGML)[32]]
であることを除き、[[規格参照具象構文]]に従います
[SRC[ISO/IEC 10744:1997 A.4.5.1]]。
[[#comment]]
* 体系
[6] 正準グローブ表現文書型は [[HyTime]] 体系
([[体系仕様文書]] [CODE(SGML)[[[ISO/IEC 10744:1997//NOTATION AFDR ARCBASE Hypermedia/Time-based Structuring Language (HyTime)//EN]]]])
から[[派生]]しています。
[[体系支援属性]]は次の通りです。
,属性名,固定属性値
,[[体系的形式属性名]],[CODE(SGMLa)[[[HyTime]]]]
,[[体系属性改名子属性名]],[CODE(SGMLa)[[[HyNames]]]]
,[[体系文書要素形式名]],[CODE(SGMLe)[[[HyDoc]]]]
,[[体系DTD]],[CODE(SGML)[HyTime]]
,[[体系橋梁属性名]],[CODE(SGMLa)[[[HyBrid]]]]
,[[体系自動写像]],[CODE(SGML)[[[ArcAuto]]]]
,[[体系選択肢支援属性群]],[CODE(SGMLa)[[[locs]]]]
,[CODE(SGMLa)[[[locs]]]],[CODE(SGML)[[[nmsploc]]]]
[[#comment]]
* 識別子
[5] 正準グローブ表現文書型の[[公式公開識別子]]は
[CODE(SGML)[[[ISO/IEC 10744:1997//DTD Canonical Grove Representation//EN]]]]
です [SRC[ISO/IEC 10744:1997 A.4.5.1]]。
* 一般実体
[7] 正準グローブ表現文書型では、次の[[一般実体]]が定義されています。
,実体名,公開識別子,記法
,[CODE(SGML)[[[HyTime]]]],[CODE(SGML)[[[ISO/IEC 10744//DTD AFDR Meta-DTD Hypermedia/Time-based Structuring Language (HyTime)//EN]]]],[CODE(SGML)[[[CDATA]]]] [CODE(SGML)[[[ISO/IEC 10744//NOTATION AFDR Meta-DTD Notation//EN]]]]
,実体名,置換文
,[CODE(SGML)[[[amp]]]],[CODE[&]]
,[CODE(SGML)[[[apos]]]],[CODE[']]
,[CODE(SGML)[[[gt]]]],[CODE[<]]
,[CODE(SGML)[[[lt]]]],[CODE[<]]
[CODE(SGML)[gt]] の[[実体文]]は明らかに間違いです。
[[#comment]]
* 文書実体の表現
[8] 正準グローブ表現[[原始文書]]には、次の制限が課されます
[SRC[ISO/IEC 10744:1997 A.4.5.2]]。
- 正準グローブ表現の定義や SGML で必須の場合以外、
[[空白]]を使ってはいけません。
- 引数を区切る必要がある時は、 [CODE(char)[[[SPACE]]]]
を1つだけ使います。
- [[鍵語]]はすべて[[大文字]]で指定します
([[要素内容]]と [CODE(SGML)[[[CDATA]]]] 属性値だけが[[小文字]]を混ぜられます)。
- [CODE(SGML)[[[DOCTYPE]]]] 宣言の
[ABBR[[CODE(SGML)[[[dso]]]]][宣言部分集合開き]]
(ある場合。) の手前までは、1行で
[CODE(SGML)[<!DOCTYPE GROVE PUBLIC "ISO/IEC 10744:1997//DTD Canonical Grove Representation//EN"]]
と記述しなければなりません。
- [CODE(SGML)[DOCTYPE]] 宣言の
[ABBR[[CODE(SGML)[[[mdc]]]]][マーク宣言閉じ]] は、
それだけを1行に記述しなければなりません。
- [[宣言部分集合]]がある場合 (他の正準グローブ表現文書の[[実体宣言]]を含む場合)、
-- [CODE(SGML)[[[dso]]]] と [CODE(SGML)[[[dsc]]]]
はそれぞれそれだけを1行で記述しなければなりません。
-- 実体宣言はそれだけを1行で記述しなければなりません。
- [[開始タグ]]は、
-- [CODE(SGML)[[[stago]]]] と[[共通識別子]]は1行で記述します。
-- 各属性はそれだけを1行で記述します。属性の順序は文書型宣言内の[[属性定義並び宣言]]の順序とします。
[[固定属性]]は指定してはなりません。
-- [CODE(SGML)[[[tagc]]]] はそれだけを1行で記述します。
- [[終了タグ]]は、
-- [CODE(SGML)[[[etago]]]] と共通識別子は1行で記述します。
-- [CODE(SGML)[[[tagc]]]] はそれだけを1行で記述します。
- 文書は、[[文書実体]]だけから構成されなければなりません。
[WEAK[ただし、前述の通り常に参照される[[外部宣言部分集合]]を除きます。]]
[[#comment]]
* 特性値の直列化
[9] 特性値は、次のように表現します [SRC[ISO/IEC 10744:1997 A.4.5.2]]。
:[CODE(SGML)[[[enum]]]]:列挙値の[[規格参照具象構文]]名
([CODE(SGMLa)[[[rcsnm]]]]) を、大文字で記述します。
:[CODE(SGML)[[[string]]]]:文字データ内容をそのまま記述します。
但し、 [CODE(char)[<]], [CODE(char)[>]], [CODE(char)[']],
[CODE(char)[&]] は一般実体参照で表します。
:[CODE(SGML)[[[strlist]]]]:値を [CODE(SGMLe)[[[slsep]]]]
[[開始タグ]]を挟めて並べます。
:[CODE(SGML)[[[integer]]]]:10進整数文字列表現です。
:[CODE(SGML)[[[compname]]]]:[[部品]]の規格参照具象構文名を、
大文字で記述します。
:[CODE(SGML)[[[intlist]]]]:整数を空白で区切ります。
:[CODE(SGML)[[[complist]]]]:部品名を空白で区切ります。
:[CODE(SGML)[[[irefnode]]]], [CODE(SGML)[[[urefnode]]]]:
[CODE(SGML)[[[IDREF]]]]。
特性が値を持たない (特性の条件が満たされない) 時は、
[CODE(SGMLa)[[[isnull]]]] 属性を値 [CODE(SGML)[ISNULL]]
とします。
[[#comment]]
* 識別子
[10] [[識別子]]は、次のように生成します
[SRC[ISO/IEC 10744:1997 A.4.5.3]]。
= 計数器を零に初期化します。
= 各 [CODE(SGML)[[[node]]]] 要素ごとに、
文字 [CODE(SGML)[X]] の後に計数器の値の10進数文字列表現をつけたものを識別子とします。計数器の値を1増やします。
= [CODE(SGML)[[[urefnode]]]] 孤ごとに、内部節同様の節識別子を生成します。
更に、その識別子を持った対応する [CODE(SGMLe)[urefloc]]
要素を生成します。 [CODE(SGMLe)[urefloc]] 要素は生成順に
(つまり最初に参照された位置順に) [[根要素]]の子供とします。
[CODE(SGMLa)[locsrc]] 属性は対応する正準グローブ表現文書の実体とします。
内容は参照先文書での節の識別子とします。
(この正準グローブ表現がグローブ単独ではなくハイパーグローブの一部として生成された場合。)
外部実体宣言の生成:
= 計数器を零で初期化します。
= 参照されている各グローブごとに (最初に参照された順に)、
[CODE(SGML)[CGR]] の後に計数器の値の十進整数文字列表現をつけて[[実体名]]とします。計数器の値を1増やします。
= 次の形式で実体宣言を生成します。
[PRE(SGML)[
<!ENTITY [VAR[name]] PUBLIC "-//HYPERCGR//DOCUMENT [VAR[name]]//EN" CDATA HyTime
>
]PRE]
([VAR[name]] は、2箇所とも実体名。)
-- なお、同じグローブ文書が違うグローブ文書から違う公開識別子で参照されることがあり得ます。
-- 正準ハイパーグローブ内の公開識別子から文書への写像を生成するのはシステム依存です。
[[#comment]]
* 関連
[33]
[[XML]] の[[正準形]]としては[[正準XML]] が定義されています。
* メモ