>サイトトップへ >このカテゴリの一覧へ

X 4153 : 1998 (ISO/IEC 10179 : 1996)

(1) 

まえがき

この規格は,工業標準化法に基づいて,日本工業標準調査会の審議を経て,通商産業大臣が制定した日

本工業規格である。この規格は,JIS X 4151 に適合する SGML 文書のフォーマット処理指定及び変換処理

指定を行うために用いる,文書スタイル意味指定言語に必要となる規定を定めている。

JIS X 4153

には,次に示す附属書がある。

附属書 A(参考)  その他の情報


X 4153 : 1998 (ISO/IEC 10179 : 1996)

(1) 

目次

ページ

0.

  導入

1

0.1

  背景

2

1.

  適用範囲

2

2.

  適合性

3

3.

  引用規格

4

4.

  定義

5

5.

  記法及び規約

7

5.1

  構文規則

7

5.2

  手続き原型

7

6.

  DSSSL 概要

8

6.1

  標準化の領域

8

6.2

  概念モデル

9

6.3

  DSSSL 言語

9

6.3.1

  変換言語

9

6.3.1.1

  変換処理の構成要素

10

6.3.1.2

  符号化文字,文字及びグリフ識別子のモデル

11

6.3.2

  スタイル言語

12

6.3.2.1

  フォーマット処理の構成要素

12

6.3.2.2

  グローブ構築処理

12

6.3.2.3

  流し込みオブジェクト木

13

6.3.2.4

  流し込みオブジェクトクラス

13

6.3.2.5

  領域

14

6.3.2.6

  ページ及び段幾何構成

14

6.3.2.7

  式言語

15

6.3.2.8

  符号化文字,文字及びグリフ識別子のモデル

15

7.

  DSSSL 指定

15

7.1

  DSSSL 文書体系

16

7.1.1

  機能

21

7.1.2

  SGML グローブ設計

21

7.1.3

  文字レパートリ

21

7.1.4

  標準文字

21

7.1.5

  その他の文字

22

7.1.6

  符号化基本集合

22

7.1.7

  リテラル記述文字

23

7.1.8

  SDATA 実体対応

23


X 4153 : 1998 (ISO/IEC 10179 : 1996)

目次

(2) 

ページ

7.1.9

  分離文字

23

7.1.10

  名前文字

23

7.1.11

  組合せ文字

23

7.2

  公開識別子

23

7.3

  字句規約

23

7.3.1

  大文字と小文字との区別

23

7.3.2

  識別子

24

7.3.3

  トークン,空白類文字及び注釈

24

8.

  式言語

25

8.1

  式言語の概要

25

8.2

  基本概念

26

8.2.1

  変数及び領域

26

8.2.2

  真及び偽

26

8.2.3

  外部表現

26

8.2.4

  型の独立性

26

8.3

  式

27

8.3.1

  基本型の式

27

8.3.1.1

  変数参照

27

8.3.1.2

  リテラル

27

8.3.1.3

  手続き呼出し

28

8.3.1.4

  lambda 式

28

8.3.1.5

  条件式

30

8.3.2

  派生式の型

30

8.3.2.1

  cond 式

30

8.3.2.2

  case 式

31

8.3.2.3

  And 式

31

8.3.2.4

  Or 式

31

8.3.2.5

  束縛構成子式

31

8.3.2.6

  名前付き let

33

8.3.2.7

  クアジクォート

33

8.4

  定義

34

8.5

  標準手続き

35

8.5.1

  論理型

36

8.5.1.1

  否定

36

8.5.1.2

  論理型判定

36

8.5.2

  等価

36

8.5.3

  対及びリスト

37

8.5.3.1

  対型判定

38

8.5.3.2

  対構成手続き

38


X 4153 : 1998 (ISO/IEC 10179 : 1996)

目次

(3) 

ページ

8.5.3.3

  手続き car

38

8.5.3.4

  手続き cdr

38

8.5.3.5

  c...r 手続き

39

8.5.3.6

  空リスト型判定

39

8.5.3.7

  リスト型判定

40

8.5.3.8

  リスト構成

40

8.5.3.9

  リスト長

40

8.5.3.10

  リスト連結

40

8.5.3.11

  リスト反転

40

8.5.3.12

  部分リスト抽出

40

8.5.3.13

  リスト参照

41

8.5.3.14

  リスト要素

41

8.5.3.15

  関連リスト

41

8.5.4

  シンボル

41

8.5.4.1

  シンボル型判定

42

8.5.4.2

  シンボルから文字列への変換

42

8.5.4.3

  文字列からシンボルヘの変換

42

8.5.5

  キーワード

42

8.5.5.1

  キーワード型判定

43

8.5.5.2

  キーワードから文字列への変換

43

8.5.5.3

  文字列からキーワードへの変換

43

8.5.6

  名前付き定数

43

8.5.7

  数量及び数値

43

8.5.7.1

  数型

43

8.5.7.2

  正確性

44

8.5.7.3

  実装の制限

44

8.5.7.4

  数値定数構文

45

8.5.7.5

  数値型判定

46

8.5.7.6

  正確性判定

46

8.5.7.7

  大小判定

46

8.5.7.8

  数値特性判定

47

8.5.7.9

  最大・最小関数

47

8.5.7.10

  加算

47

8.5.7.11

  乗算

47

8.5.7.12

  減算

47

8.5.7.13

  除算

48

8.5.7.14

  絶対値

48

8.5.7.15

  整数除算

48

8.5.7.16

  実数から整数への変換

49


X 4153 : 1998 (ISO/IEC 10179 : 1996)

目次

(4) 

ページ

8.5.7.17

  e

n

及び自然対数

49

8.5.7.18

  三角関数

49

8.5.7.19

  逆三角関数

49

8.5.7.20

  平方根関数

50

8.5.7.21

  指数関数

50

8.5.7.22

  正確値変換

50

8.5.7.23

  数量から数値への変換

50

8.5.7.24

  数値から文字列への変換

50

8.5.7.25

  文字列から数値への変換

51

8.5.8

  文字

51

8.5.8.1

  文字特性

52

8.5.8.2

  言語依存操作

52

8.5.8.2.1

  言語定義

53

8.5.8.2.1.1

  照合

53

8.5.8.2.1.2

  文字の大小変換

54

8.5.8.3

  文字型判定

54

8.5.8.4

  文字比較判定

54

8.5.8.5

  大小無視の文字判定

54

8.5.8.6

  文字の大小変換

55

8.5.8.7

  文字特性

55

8.5.9

  文字列

55

8.5.9.1

  文字列型判定

55

8.5.9.2

  文字列生成

55

8.5.9.3

  文字列長

56

8.5.9.4

  文字列アクセス

56

8.5.9.5

  文字列等価性

56

8.5.9.6

  文字列比較

56

8.5.9.7

  部分文字列抽出

56

8.5.9.8

  文字列の付加

56

8.5.9.9

  文字列とリストとの間の変換

56

8.5.10

  手続き

57

8.5.10.1

  手続き型判定

57

8.5.10.2

  手続き適用

57

8.5.10.3

  リスト間対応手続き

57

8.5.10.4

  外部手続き

57

8.5.11

  日付及び時間

58

8.5.12

  誤り発生

58

8.6

  中核式言語

58

8.6.1

  構文

58


X 4153 : 1998 (ISO/IEC 10179 : 1996)

目次

(5) 

ページ

8.6.2

  手続き

59

9.

  グローブ

60

9.1

  ノード型 (nodal) 特性

61

9.2

  グローブ設計

62

9.3

  特性集合定義

63

9.3.1

  共通属性

63

9.3.1.1

  構成要素名

63

9.3.1.2

  規格文書

63

9.3.2

  モジュール

64

9.3.3

  データ型定義

64

9.3.4

  クラス定義

65

9.3.5

  特性定義

65

9.3.6

  正規化規則定義

66

9.4

  内在特性

66

9.5

  補助グローブ

68

9.6

  SGML 特性集合

68

9.7

  DSSSL SGML グローブ設計

108

10.

  標準文書照会言語 (SDQL)

108

10.1

  基本手続き

109

10.1.1

  応用束縛

109

10.1.2

  ノードリスト

109

10.1.3

  名前付きノードリスト

109

10.1.4

  エラー報告

110

10.1.5

  応用名変換

110

10.1.6

  特性値

110

10.1.7

  SGML グローブ構築

111

10.2

  派生手続き

111

10.2.1

  HyTime 支援

111

10.2.2

  リスト手続き

114

10.2.3

  共通特性操作

120

10.2.4

  核照会言語

126

10.2.4.1

  探査

126

10.2.4.2

  計数

127

10.2.4.3

  属性値のアクセス

127

10.2.4.4

  現所在の判定

128

10.2.4.5

  実体及び記法

128

0.2.4.6

  名前正規化

129

10.2.5

  SGML 特性操作

130

10.3

  補助解析

131


X 4153 : 1998 (ISO/IEC 10179 : 1996)

目次

(6) 

ページ

10.3.1

  単語検索

131

10.3.2

  ノード正規式

132

10.3.3

  正規式構築子

132

10.3.4

  正規式探索手続き

133

11.

  変換言語

133

11.1

  機能

134

11.2

  関連

134

11.3

  変換式

135

11.3.1

  部分グローブ指定

135

11.3.2

  生成指定

136

11.3.3

  結果ノードリスト

137

11.3.4

  変換グローブ指定

138

11.3.5

  SGML 前書き解析

138

11.4

  SGML 出力処理

139

11.4.1

  検証対応

139

11.41.2

  文字変換

140

12.

  スタイル言語

140

12.1

  機能

141

12.2

  流し込みオブジェクト木

142

12.3

  領域

142

12.3.1

  行外領域

143

12.3.2

  行内領域

145

12.3.3

  行内及び行外の流し込みオブジェクト

148

12.3.4

  添付領域

148

12.4

  流し込みオブジェクト木構成

149

12.4.1

  構成規則

149

12.4.2

  主要流し込みオブジェクト

151

12.4.3

  Sosofo

152

12.4.4

  並行処理機能

154

12.4.5

  型 style

154

12.4.6

  特質指定

155

12.4.7

  流し込みオブジェクトの同期

157

12.5

  共通データ型及び共通手続き

158

12.5.1

  レイアウト主導の生成テキスト

158

12.5.1.1

  間接 sosofo の構成

159

12.5.1.2

  レイアウト番号付け

159

12.5.1.3

  参照値

161

12.5.2

  長さ指定

162

12.5.3

  修飾領域

162


X 4153 : 1998 (ISO/IEC 10179 : 1996)

目次

(7) 

ページ

12.5.4

  空き

163

12.5.4.1

  行外空き

163

12.5.4.2

  行内空き

163

12.5.5

  グリフ識別子

163

12.5.6

  グリフ代替表

164

12.5.7

  フォント情報

164

12.5.8

  番地

165

12.5.9

  カラー

166

12.6

  流し込みオブジェクトクラス

167

12.6.1

  列流し込みオブジェクトクラス (Sequence)

167

12.6.2

  行外グループ流し込みオブジェクトクラス (Display-group)

167

12.6.3

  単純ページ流し込みオブジェクトクラス (simple-page-sequenoe)

168

12.6.4

  ページ列流し込みオブジェクトクラス (page-sequence)

170

12.6.4.1

  ページモデル (page-model)

171

12.6.5

  段集合列流し込みオブジェクトクラス (column-set-sequence)

173

12.6.5.1

  段集合モデル (column-set-model)

175

12.6.6

  段落流し込みオブジェクト (Paragraph)

183

12.6.6.1

  行間調整

189

12.6.7

  段落分割流し込みオブジェクト (paragraph-break)

189

12.6.8

  行フィールド流し込みオブジェクト (line-field)

190

12.6.9

  側線流し込みオブジェクト (sideline)

190

12.6.10

  びょう(錨)流し込みオブジェクトクラス (anchor)

191

12.6.11

  文字流し込みオブジェクトクラス (character)

192

12.6.11.1

  文字特性

196

12.6.12

  リーダけい(罫)流し込みオブジェクト (leader)

198

12.6.13

  埋込みテキスト流し込みオブジェクト (embedded-text)

199

12.6.14

  けい(罫)線流し込みオブジェクト (rule)

200

12.6.15

  外部グラフィック流し込みオブジェクトクラス (external-graphic)

203

12.6.16

  取り込みコンテナ領域流し込みオブジェクト (Included-container-area)

206

12.6.17

  傍線・抹消線 (score)

210

12.6.18

  囲みけい(罫)流し込みオブジェクト (box)

212

12.6.19

  並び流し込みオブジェクト (side-by-side)

216

12.6.20

  並び対象流し込みオブジェクト (side-by-side-item)

217

12.6.21

  グリフ修飾流し込みオブジェクト (glyph-annotation)

218

12.6.22

  そろ(揃)え点流し込みオブジェクト (alignment-point)

219

12.6.23

  そろ(揃)い段流し込みオブジェクト (aligned-column)

219

12.6.24

  複数行行内注釈流し込みオブジェクト (multi-line-inline-note)

221

12.6.25

  強調マーク流し込みオブジェクト (emphasizing-mark)

222

12.6.26

  数式用流し込みオブジェクトクラス

223


X 4153 : 1998 (ISO/IEC 10179 : 1996)

目次

(8) 

ページ

12.6.26.1

  数式列流し込みオブジェクト (math-sequence)

223

12.6.26.2

  数式解除流し込みオブジェクト (unmath)

223

12.6.26.3

  下付き流し込みオブジェクト (subscript)

224

12.6.26.4

  上付き流し込みオブジェクト (superscript)

224

12.6.26.5

  文字付き流し込みオブジェクト (script)

225

12.6.26.6

  マーク流し込みオブジェクト (mark)

226

12.6.26.7

  フェンス流し込みオブジェクト (fence)

226

12.6.26.8

  除算流し込みオブジェクト (fraction)

227

12.6.26.9

  根号流し込みオブジェクト (radical)

228

12.6.26.10

  数学演算子流し込みオブジェクト (math-operator)

228

12.6.26.11

  格子流し込みオブジェクト (grid)

228

12.6.26.12

  格子セル流し込みオブジェクト (grid-cell)

229

12.6.27

  表用流し込みオブジェクト

230

12.6.27.1

  表流し込みオブジェクト (table)

230

12.6.27.2

  表部部分流し込みオブジェクト (table-part)

233

12.6.27.3

  表列流し込みオブジェクト (table-column)

234

12.6.27.4

  表の幅の自動計算

236

12.6.27.5

  表行流し込みオブジェクト (table-row)

236

12.6.27.6

  表セル流し込みオブジェクト (table-cell)

236

12.6.27.7

  表けい(罫)線流し込みオブジェクト (table-border)

238

12.6.28

  オンライン表示用流し込みオブジェクトクラス

239

12.6.28.1

  スクロール流し込みオブジェクト (scroll)

239

12.6.28.2

  複数モード流し込みオブジェクトクラス (multi-mode)

240

12.6.28.3

  リンク流し込みオブジェクト (link)

241

12.6.28.4

  余注流し込みオブジェクト (marginalia)

241

附属書 A(参考)  その他の情報

242


日本工業規格

JIS

 X

4153

 : 1998

 (ISO/IEC

10179

 : 1996

)

文書スタイル意味指定言語

(DSSSL)

Information technology

−Processing Languages−

Document Style Semantics and Specification Language (DSSSL)

序文  この規格は,1996 年に第 1 版として発行された ISO/IEC 10179,Information technology−Processing

Languages

−Document Style Semantics and Specification Language (DSSSL)  を翻訳し,技術的内容を変更する

ことなく作成した日本工業規格である。

0.

導入

この規格は,SGML 文書のフォーマット処理指定及び SGML 文書の変換処理指定を行うために用いる文

書スタイル意味指定言語 (Document Style Semantics and Specification Language ; DSSSL) を規定する。

DSSSL

は,SGML 文書を異なる文書型定義 (DTD) に従ってマーク付けした SGML 文書へ変換すること,

並びに SGML 文書を紙及び電子媒体のためのフォーマット処理することを,第一の目標としている。

DSSSL

は,DTD に制約を加えたり修正を必要としたりすることなく,任意の SGML 文書とともに利用で

きる。

この規格の主な目的は,フォーマット処理指定及び他の文書処理指定を,形式的で厳密な方法によって

記述する言語を提供することにある。DSSSL を利用することによって,多様なフォーマタがそれらの指定

を直接実行でき,変換機構を用いても実行できる。

DSSSL

スタイル言語は,組み処理・レイアウト処理・ページ割りの際,多様なオブジェクトへの多種の

フォーマット処理の適用を,利用者指定可能にする。DSSSL 変換言語は,ある SGML 応用から他の応用

への変換を指定可能にする。

DSSSL

は,文書のクラスに適用する指定記述を目的として設計されている。その指定は,特定の文書に

適用できると同時に,その応用に適合するすべての SGML 文書に適用できる。

DSSSL

指定言語は宣言的であって,通常は完全なプログラム言語と関連する構成子を含んでいる。しか

し,完全なプログラム言語を意図して設計されていない。DSSSL 指定は,異なる処理系間であいまい(曖

昧)さなく構文解析でき,解釈できる。さらに,DSSSL 指定は,DSSSL 処理系及び翻訳処理系を前置する

ことによって,既存のフォーマット処理系においても利用できる。DSSSL は,バッフォーマット処理系に

も,対話フォーマット処理系にも偏らない。フォーマット処理アルゴリズムに関しては,規格では定義せ

ず,事前に記述もしない。

DSSSL

が規定するフォーマット処理の意味は,流し込みオブジェクトと呼ぶ基本構造の集合に基づき,

その流し込みオブジェクトに適用するフォーマット処理特質の集合に基づく。DSSSL は,意味構成子を新

規に定義する機構及び意味構成子を拡張する機構を提供して,

設計者の応用環境への最適化を可能とする。


2

X 4153 : 1998 (ISO/IEC 10179 : 1996)

0.1

背景

DSSSL

の背後にある概念は,共通符号化,特に標準一般マーク付け言語 SGML (ISO 8879)  の発展と関

連している。

歴史的には,電子原稿は,文書を特定の方法でフォーマットするための,制御コード又はマクロを含ん

でいた(現在の用語では,これを特定符号化と呼ぶ。)。それとは異なり,60 年代に始まった共通符号化で

は,記述的タグを用いる。例えば,

“3 行空き,14 ポイント,ボドニ書体”とは記述せず,その意味を表す

“見出し”という名のタグを用いて記述する。共通符号化の中心的概念は,文書の情報内容から,その内

容のフォーマット又は体裁を分離することにある。70 年代初期に,共通符号化の概念は明確になり,SGML

の開発として結実した。

SGML

は,文書のクラスをモデル化する言語であるが,その規格では特定のモデル又は定義済みのタグ

集合を規定していない。SGML を文書のクラスに適用する規則集合を SGML 応用と呼び,主に DTD 及び

その支援文書から成る。

SGML

は文書構造の表現法を標準化するが,フォーマタ及び他の一般目的の変換処理系とのインタフェ

ースを行うための技法を,利用者が独自に開発する余地を残している。DSSSL は,この第二のクラスの応

用を支援する。それは,標準化した枠組内において,利用者の指定の交換を可能としながら,フォーマッ

ト処理指定及び他の処理指定のための標準化した体系を提供することによって行う。

DSSSL

指定は,通常,その指定を適用する SGML 文書の外部にある。したがって,一つの SGML 文書

に対して複数の指定を適用でき,同一データの様々な表現が可能になる。

SGML

を用いることによって,一方では文書の本質的内容とその構造との区別が可能となり,他方では

構造に関する処理指定が可能となる。DSSSL を用いることによって,フォーマット及び他の処理指定を

SGML

文書とともに交換でき,標準化した文書表示指定を提供しながらも,内容とフォーマットとの本質

的な区別を保存できる。

1.

適用範囲

この規格は,適合 SGML 文書の処理指定を目的として設計されている。

DSSSL

は,文書の処理指定を目的とし,次に示す二つの言語に関して,その構文・意味・処理モデルを

定義する。

a)

変換言語。一つ以上の DTD に従ってマーク付けした適合 SGML 文書を,他の DTD に従ってマーク付

けした SGML 文書へ変換する処理のために用いる。この変換処理の指定は,この規格が完全に規定す

る。

b)

スタイル言語。フォーマット処理特質の集合をデータ部分に適用して結果を得る処理において使用す

る。したがって,この言語による指定は,応用が必要とする程度に正確だが,行末・段末などのフォ

ーマット処理上の決定は,組み処理及びレイアウト処理に任せている。

DSSSL

スタイル言語は,単純な一段組みから複雑な段組みに至る,広い範囲の様々な環境においての使

用を意図している。この規格は,フォーマタを標準化せず,組み処理又はその他の処理のアルゴリズムも

標準化しない。この規格は,SGML 文書にスタイル情報を関連させるための,“スタイル特質”の技法及

びその他の技法を,実装から外部化する手段を提供する。

DSSSL

は,データ操作の目的で“外部処理”使用の指定を行う機構を提供する。これらの外部処理は,

その性質から DSSSL の適用範囲外だが,整列・目次作成などの典型的なデータ管理機能,特化したハイフ

ネーションアルゴリズムなどの典型的な組み処理機能,非 SGML データのための画像処理又はマルチメデ


3

X 4153 : 1998 (ISO/IEC 10179 : 1996)

ィア処理を含んでよい。

フォーマット済み文書又は階層構造情報若しくは共通マークを含まない文書は,この規格の適用範囲外

とする。

DSSSL

指定は,入力文書を受け取り出力文書を生成する処理系が実行する処理を記述する。DSSSL は,

フォーマタの型,フォーマット処理系又は他の変換処理系の種別には依存しない。

DSSSL

は,次の六つの構成子を含む。

a) SGML

文書内のすべてのマークへのアクセス及び制御を行う機能を提供し,マーク付けされていない

データを操作する文字列処理の機構を提供する構成子。この構成子は,DSSSL の構成要素の標準文書

照会言語 (SDQL) が提供する。

備考  文字列処理は,表示の変更を示すだけの特殊なマークを入力文書に埋め込まずに済ますために

必要となる。行頭又は段落先頭において大きさを変えて行う大文字表示は,望ましい表示効果

実現のためには,最初の文字又は最初の文字グループを他から分離することを必要とし,文字

列処理が必要な場合の例となっている。

b)

変換処理への入力としての 1 個以上の SGML 文書と,その処理の出力としての 0 個以上の結果 SGML

文書との間の関係を指定するための規定。

c)

入力文書型定義によって記述される SGML 文書とフォーマット処理の結果との間の関係を指定する

ための規定。フォーマット処理は,標準ページ記述言語  (JIS X 4154)  を出力してもよく,それ以外の

固有の形式の文書を出力してもよい。

d)

文書の組版スタイル及びレイアウトを記述するための規定。

e) DSSSL

指定及び DSSSL 指定の構成要素を表現する,機械処理可能な構文の定義。

f)

新規の DSSSL 特質及びそれに関連する値,並びに新規の流し込みオブジェクトクラスを生成する機構。

それらは,DSSSL 指定のフォーマット処理指定言語の宣言部で宣言する。

この規格は,電子出版及び従来の印刷の両方を含む,様々な SGML 応用環境での使用を意図している。

2.

適合性

DSSSL

は二つの独立した言語,すなわち変換言語及びスタイル言語を含み,それらによって SGML 文

書の処理を指定する。DSSSL 指定には多くの処理指定を含めることができ,各処理指定はスタイル言語又

は変換言語を用いる。スタイル言語を用いる処理指定をスタイル指定と呼び,変換言語を用いる処理指定

を変換指定と呼ぶ。

この規格のすべての規定に従うスタイル指定を,適合 DSSSL スタイル指定とする。この規格のすべての

規定に従う変換指定を,適合 DSSSL 変換指定とする。

スタイル言語及び変換言語の両方において,幾つかの機能はオプションとする。各オプション機能は,

機能名称と関連付けられる。オプション機能を用いる処理指定は,要素型形式 features を用いて宣言し,

関連する機能を利用可能にしなければならない。

適合 DSSSL 処理系は,スタイル言語・変換言語をそれぞれ単独にサポートするか,又はスタイル言語及

び変換言語の両方をサポートしなければならない。

適合 DSSSL 処理系のための支援文書は,処理系が変換言語又はスタイル言語を単独にサポートするか,

その両方をサポートするかを明示しなければならない。さらに,処理系がサポートする言語ごとに,どの

機能をサポートするかを明示しなければならない。

スタイル言語をサポートする適合 DSSSL 処理系は,

その処理系の支援文書にサポートが記述されている


4

X 4153 : 1998 (ISO/IEC 10179 : 1996)

機能だけを利用可能にした任意の適合 DSSSL スタイル指定を用いて,任意の適合 SGML 文書を処理でき

なければならない。

変換言語をサポートする適合 DSSSL 処理系は,

その処理系の支援文書にサポートが記述されている機能

だけを利用可能とした任意の適合 DSSSL 変換指定を用いて,任意の適合 SGML 文書を処理できなければ

ならない。

3.

引用規格

次の規格に含まれる規定内容は,この規格の文中での引用によって,この規格の規定の一部となる。各

規格には,この規格の出版の際に有効であった版を表示してある。規格はすべて改訂の対象であり,この

規格に基づく合意の関係者は,次に示す規格の最新版の適用可能性を調べるのがよい。現在有効な国際規

格の登録維持は,ISO 及び IEC の構成員が行っている。

ISO 639 : 1988, Code for the representation of names of languages

JIS X 0304-1994

  国名コード

備考 ISO/IEC 

3166 : 1993, Codes for the representation of names of countries

が,この日本工業規格と

同等である。

JIS X 0211-1994

  符号化文字集合用制御機能

備考 ISO/IEC 

6429 : 1992, Information technology

−Control functions for coded character sets が,この

日本工業規格に一致している。

ISO 8601 : 1988, Data elements and interchange formats

−Information interchange−Representation of dates

and times

備考  JIS X 0301(日付及び時刻の表記)−1992 が,この国際規格に対応(元号に関する規定を追

加)している。

ISO 8879 : 1986, Information processing

−Text and office systems−Standard Generalized Markup Language

(SGML)

備考  JIS X 4151(文書記述言語 SGML)−1992 が,ISO 8879 : 1986 及び ISO 8879/Amendment 1 : 1988

の内容に,技術的追加及び編集上の変更を加えたものである。

JIS X 4172-1998

  SGML 公開テキスト所有者識別子

備考 ISO/IEC 

9070 : 1991, Information technology

−SGML support facilities−Registration procedures

for    public text owner identifiers

が,この日本工業規格に一致している。

JIS X 4161-1993

  フォント情報交換  第 1 部  体系

備考 ISO/IEC 9541-1 : 1992, Information technology − Font information interchange − Part 1 :

Architecture

が,この日本工業規格に一致している。

JIS X 4162-1993

  フォント情報交換  第 2 部  交換様式

備考 ISO/IEC 9541-2 : 1992, Information technology − Font information interchange − Part 2 :

Interchange Format

が,この日本工業規格に一致している。

ISO/IEC 9945-2 : 1993,  Information technology

−Portable Operating System Interface (POSIX) −Part

2:Shell and utilities

JIS X 4154-1997

  標準ページ記述言語 SPDL

備考 ISO/IEC 

10180 : 1995, Information technology

−Processing languages−Standard Page Description

Language (SPDL)

が,この日本工業規格に一致している。


5

X 4153 : 1998 (ISO/IEC 10179 : 1996)

ISO/IEC 10646-1 : 1993, Information technology

−Unversal Multiple−Octet Coded Character Set (UCS)  −

Part 1 : Architecture and Basic Multilingual Plane

備考  JIS X 0221[国際符号化文字集合 (UCS) −第 1 部体系及び基本多言語面]−1995 が,この

国際規格に対応(三つの附属書を付加)している。

JIS X 4155-1994

  ハイパメディア及び時間依存情報の構造化言語 (HyTime)

備考 ISO/IEC 

10744 : 1992, Information technology

−Hypermedia/Time-based Structuring Language

(HyTime)

が,この日本工業規格に一致している。

4.

定義

この規格には,ISO 8879 の定義及び次の定義を適用する。

4.1

領域 (area)   固定の幅及び高さをもつ四角形であって,流し込みオブジェクトをフォーマット処理

して生成する。領域を表示媒体に可視化することによって,

(図形,グリフ像などの)マークの集合を生成

する。

4.2

関連 (association)   照会式,変換式及び優先順位式から成る三つ組。優先順位式は,無指定時には

0

と解釈する。関連は,変換処理を制御するために用いる。

4.3

原子流し込みオブジェクト  (atomic flow object)    ポートをもたない流し込みオブジェクト。

4.4

補助グローブ (auxiliary grove)   他のグローブ内のノードを解析することによって生成したグロー

ブ。

4.5

特質 (characteristic)   流し込みオブジェクトがもつ名前付きパラメタ。

4.6

完全グローブ (complete grove)   特性集合からすべてのクラス及び特性を選択したグローブ設計を

用いて構築したグローブ。

4.7

構成要素名 (component name)   特性集合内で定義した名前であって,参照具象構文名・応用名・

完全名の 3 形式をもつ。

4.8

生成起点 (creation origin)    結果グローブ内のノード位置を指定する際に起点とするノード。

4.9

子孫 (descendants)   子ノードの部分木の和集合。

4.10

列挙値 (enumerator)   データ型 enumeration のとり得る値。

4.11

流し込みオブジェクト (flow object)   フォーマタが実行する処理の指定。流し込みオブジェクトは,

クラスをもつ。クラスは処理の種別を指定し,特質によって更にその詳細を指定する。

4.12

フォーマット処理系 (formatting process)   スタイル言語によって,その処理の一部を指定される処

理系。

4.13

グローブ (grove)   ノード型特性によってグラフ状に連結したノードの集合。グローブは,グロー

ブ設計を用いて構築する。

4.14

グローブ設計 (grove plan)   特性集合から選択したクラス及び特性の集合。

4.15

グローブ根 (grove root)   グローブ内において起点をもたない,一意のノード。

4.16

内在特性 (intrinsic property)   特性集合の中で定義されることなく,自動的に特性集合の部分とな

る特性。

4.17

行進行方向 (line-progression-direction)   行内領域に関連する方向。行進行方向は,行内領域の行内

進行方向に直交する。


6

X 4153 : 1998 (ISO/IEC 10179 : 1996)

4.18

ノード型特性 (nodal property)   ノード又はノードリストをその値とする特性。ノード型特性は,

その特性集合によって定義され,下位ノード (subnode) ・内部参照ノード (irefnode) ・非制限参照ノード

(urefnode)

に分類できる。

4.19

ノード (node)   特性割当ての順序付き集合。ノードは,グローブの要素であって,グローブ構築に

用いるグローブ設計において定義するクラスに属する。

4.20

起点 (origin)   ノード に関して,を含むノード集合を下位ノード (subnode) 特性として開示す

るノード。グローブ内のグローブ根以外の各ノードは,一意の起点をもつ。

4.21

起点下位ノード関係 (origin-to-subnode relationship)   ノードの起点がもつ下位ノード (subnode)

特性であって,そのノードを値に含む。

4.22

ポート (port)   流し込みオブジェクト木内の流し込みオブジェクト上の点であって,そこに流し込

みオブジェクトの順序付き集合を付加できる。ポートは,流し込みオブジェクトの主要ポートとなるか,

名前付きポートとなる。

4.23

基本データ型 (primitive data type)   上位型をもたないデータ型。データ型の基本データ型は,そ

のデータ型が上位型をもたない場合にはデータ型そのものとなり,上位型をもつ場合,そのデータ型の上

位型の基本データ型となる。

4.24

特性割当て (property assignment)   特性名への特性値の割当て。

4.25

特性集合 (property set)   関連した定義をもつクラス及び特性の集合。

4.26

処理指定 (process specification)   処理指定要素内の指定と,その処理指定要素の使用を宣言した他

のすべての処理指定要素との組合せ。

4.27

処理指定要素 (process specification element)   要素型形式 transformation-specification 又は要素型形

式 style-specification のインスタンス。

4.28

処理指定部  (process specification part)    単一の処理指定要素に基づく処理指定の部分。属性 use を

用いて参照しているすべての処理指定要素は,別の部とする。処理指定部は,それ以降のすべての処理指

定部に優先する。

4.29

(ノードの)兄弟  [siblings (of a node)]    ノードの,起点下位ノード関係特性の値に出現するグロー

ブ内の他のノード。

4.30

流し込みオブジェクト列指定 (sosofo)   流し込みオブジェクト列の(生成に関する)指定。A

specification of a sequence of flow objects

の短縮形。

4.31

入力グローブ (source grove)   構文解析の結果,補助グローブを生成するグローブ。

4.32

見開き (spread)   ページ列の中において連続する,裏ページ及び表ページの対。

4.33

ストリーム (stream)   流し込みオブジェクトのポートに付加した,流し込みオブジェクトの順序付

きリスト。

4.34

部分グローブ (subgrove)   ノードとそのノードの下位ノード (subnode) 特性の値との和。

4.35

部分木 (subtree)   ノードとその子の部分木との和。

参考  部分木は,ノード集合とその各要素の子の集合との和をとり,要素の重複を取り除く手続きを,

根ノードを一つだけ含む集合に適用して,手続きの入力となる集合の要素数と出力となる要素

数とが等しくなるまで,その出力への手続き適用を繰り返して得られるノード集合。

4.36

同期集合 (synchronization set)   異なるストリームに属しているが,相対位置を制約された流し込

みオブジェクトの集合。


7

X 4153 : 1998 (ISO/IEC 10179 : 1996)

4.37

変換処理系 (transformation process)   変換言語を用いて指定する処理系。変換処理は,1 個以上の

SGML

文書を 0 個以上の SGML 文書に変換する。

4.38

 (tree)   親をもたないノードの部分木。

4.39

検証グローブ (verification grove)   SGML 特性集合のすべてのクラス及び特性を含むグローブ設計

を用いて,結果グローブから生成した SGML 文書又は副文書を構文解析して構築したグローブ。

4.40

区域 (zone)   段を構成する 4 部分,つまり上部浮動区域(区域 top-float)

・本文区域(区域 body-text)

下部浮動区域(区域 bottom-float)

・脚注区域(区域 footnote)の一つとする。段集合領域コンテナに配置す

る領域の位置付けは,区域名でラベル付けることによって制御する。

5.

記法及び規約

5.1

構文規則

この規格は,次の例外を除き,ISO 8879 と同様の形式構文で記述する。

式の列は,式が示された順で出現することを表す。演算子 (,) は,用いない。

出現指示子 opt (?),出現指示子 plus (+)  及び出現指示子 rep (*)  は,式の並びより高い優先順位をもち,

並びは接続子 or (|)  及び接続子 (&) より優先する。したがって,次の二つの式は等価となる。

    a b|c d*

    (a b)|(c (d*))

構文リテラルは,等幅フォントを用いて次のとおりに示す。

    syntactic-literal

構文規則では,or グループを囲むために二重角括弧 ([[]]) を用いることができる。この二重角括弧の意

味は,and グループと同様とする。しかし,or グループの任意の要素が出現指示子 rep (*)  又は出現指示子

plus (

+)  をもつ場合,その要素は,そのグループの他の要素と入り交じって指示した回数だけ出現できる。

例えば,次の式は,a

b

c

d

だけから成る並びを意味し,任意の数の a,1 個以上の b,1 個だけの c

及び多くとも 1 個の を含むことを示す。

    [[a*|b+|c|d?]]

5.2

手続き原型

各手続きは,手続き原型によって定義する。

    (foo a b)

これは,識別子 foo が最上位環境において手続きに束縛されており,二つの引数をもつことを示す。引

数の名前が型の名前である場合,その引数はその名前が示す型でなければならない。次の引数の命名規則

は,型の制限を意味する。

a)

obj

:任意のオブジェクト

b)  list

:リスト

c)

q

:数量

d)  x

:実数

e)

y

:実数

f)

n

:整数

g)

k

:正確値非負整数

h) string

:文字列

手続きがキーワード引数を受け取る場合,原型は次の形式となる。


8

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    (foo a b #!key key1: key2:)

これは,さらに二つのキーワード引数を受け取る手続きを示している。キーワード引数の名前は,引数

の指定に用いるキーワードを示し,型の制限はない。

6.

DSSSL

概要

一般化マーク付けのかぎ(鍵)となる特徴は,文書に関連するフォーマット処理及び文書に附属するそ

の他の処理情報と,文書に埋め込んだ共通タグとを分離していることにある。

どの一般化マーク付け方式においても,処理指定を SGML マークに関連付けする方式が存在する。この

方式は,情報を要素の特定インスタンスに関連付けるだけでなく,一般の要素型,すなわちクラスにも関

連付けることができなければならない。DSSSL の主要な目的は,SGML 文書又は SGML 文書の一部の論

理マークに処理情報を関連付けするための,標準化した枠組み及び標準化した方式を提供することにある。

DSSSL

は,要素の階層として構造化した文書とともに用いることを意図している。以降では,DSSSL

の概念を詳細に記述するために SGML の用語を用いる。

DSSSL

は,フォーマット処理及び他の処理指定をこれらの論理要素に関連付け可能とし,その結果提示

のためのフォーマット済み文書を生成できる。例えば,設計者は,すべての章が新規の表ページで始まり,

表はページ幅規則に従うと同時にページの上又は下だけに位置付けると指定してよい。DSSSL の木構造変

換処理の際に,フォーマット処理情報を出力グローブに追加してよい。この情報は,SGML 属性として表

現してよい。これらの情報は,更にフォーマット処理によって特定の値をもつ特質に変換されてよい。

6.1

標準化の領域

DSSSL

は,次の四つの異なる標準化の領域を提供する。

a)

1

個以上の SGML 文書を 0 個以上の SGML 文書に変換するための,言語及び処理モデル。

この言語を変換言語と呼ぶ。この変換は,変換指定を用いて制御する。変換指定は,関連のリスト

を含む。一つの関連には,照会式,変換式及びオプションの優先順位式の最大三つの部分から成る。

機能的には,新規の構造の作成,既存の構造の複製,既存の構造の並べ変え及びグループ変えを,関

連指定によって利用者が指定可能にする。

b) SGML

文書にフォーマット処理特質の適用を指定するための言語。

フォーマット処理特質及び他のフォーマット関連処理特質を SGML 文書に適用する処理を,フォー

マット処理と呼ぶ。この処理は,スタイル指定によって制御する。スタイル指定は,構築規則の列を

含む。構築規則には,幾つかの種類がある。詳細は,12.4.1 を参照のこと。

備考 DSSSL スタイル言語は,処理自体を規定せず,処理の部分を制御する指定言語の意味及び形式

だけを標準化していることに注意されたい。残りのフォーマット処理機能・行分割・段分割・

ページ分割・他の様相スペースの配分などは標準化せず,フォーマタの制御に任せている。

c) SGML

文書の部分を識別するために用いる,SDQL と呼ぶ照会言語。

SDQL

は,DSSSL 変換言語及び DSSSL スタイル言語の両方の部分となっている。SDQL は,SGML

文書の階層構造を渡り歩き,処理を行う SGML マーク及び内容の重要な部分を識別するために用いる。

完全仕様の SDQL に加えて,この規格は中核照会言語  (core query language)  と呼ぶ SDQL の部分集合

を規定する。中核照会言語に関する詳細は,10.2.4 を参照のこと。完全仕様の SDQL に関する詳細は,

10.

を参照のこと。

d)

式言語  DSSSL 式言語は,DSSSL 変換言語及び DSSSL スタイル言語の両方の部分となっている。

DSSSL

式言語は,オブジェクトの作成及び操作のために用いる。完全仕様の式言語に加えて,この規


9

X 4153 : 1998 (ISO/IEC 10179 : 1996)

格は中核式言語  (core expression language)  と呼ぶ式言語の部分集合を規定する。中核式言語の詳細は,

8.6

を参照のこと。DSSSL 式言語は,IEEE Scheme 規格及び“Scheme に関する報告  改訂 4 版 (R

4

RS)

で定義するプログラム言語 Scheme に基づく。DSSSL は,Scheme の規定のうち十分に機能的で,副作

用のない部分集合を用いる。DSSSL 式言語の完全な記述については,8.を参照のこと。

6.2

概念モデル

DSSSL

概念モデルは,次の二つの異なる処理から成る。

a)

変換処理

b)

フォーマット処理

これら二つの処理は組み合わせて使用してよく,単独で使用してもよい。

DSSSL

概念モデルを,

図 に示す。

図 1  DSSSL 概念モデル

影付きの領域は,DSSSL によって標準化する処理モデルの部分を示す。

6.3

DSSSL

言語

各 DSSSL 処理は,適切な DSSSL 言語によって制御する。変換指定は,変換処理を制御する。同様に,

スタイル指定はフォーマット処理の様々な部分を制御する。

6.3.1

変換言語

変換処理は,変換指定及び SGML 文書型定義の制御の下で,SGML 文書を他の SGML 文書に変換する。

変換処理の結果の SGML 文書は,その後のフォーマット処理の入力として用いてよい。

変換処理において,

利用者は対応付け又は変換と呼ぶ処理の対象となる,

SGML

文書の部分を識別する。

指定に合致する内容及び構造をもつ SGML 文書の部分の各ノードについて,指定は新しく作成する構造を

記述し,それに基づいて変換を達成する。

変換処理で実行するすべての操作は,後のフォーマット処理とは独立している。変換処理の際には,次

の操作を含んでよい。

a)

構造の組合せ  SGML 構造を再配置及び再分類して,全く新しい構造を作成する。例えば,入力 DTD

に従い,脚注が脚注参照とともに本文中にある場合に,文書のフォーマットの際に脚注を集めて,章

の終わりに配置してよい。


10

X 4153 : 1998 (ISO/IEC 10179 : 1996)

b)

他の要素に対して利用者指定可能の関係をもつ,新しい要素の作成。

新しい構造又は属性を作成してよい。例えば,表において 3 ポイントのけい(罫)線が必要な場合

に,特殊なフォーマット記述を SGML 属性として表現し,視覚的な効果を得るために 5 行ごとに関連

付けてよい。

c)

特定の内容列に対する,新しい記述の関連付け。

入力中の要素列が,別個のフォーマット処理記述との関連の契機となる場合がある。例えば,警告

に続く段落は,他の段落とは区別して提示すると要求してよい。

d)

特定の内容構成要素に対する,新しい記述の関連付け。

関連指定を,入力文書中で特にマーク付けされていない特定のテキスト文字列に,特別なフォーマ

ット情報を関連付けるために用いてよい。一例として,文字列  “ISO”  を ISO のロゴに置き換えるな

どの処理がある。

DSSSL

は,フォーマット情報を前述の任意の組合せに基づいて関連付けできる。SGML 文書の構造及び

内容の両方を変更できる。

変換言語は,前述の例で示すとおりフォーマット処理を容易にするために用いることができ,時間の経

過に伴って変更された DTD に基づいて作成された文書を拡張又は変更するために用いることができる。

公開された DTD を用いた文書を,独自又は社内の DTD に基づく文書へ変換するためにも用いてもよい。

変換言語の重要性及びその使用の妥当性は,SGML 応用,DSSSL 応用,フォーマタの能力及び実装に依

存して変化する。多くのフォーマティング応用は,変換処理を全く必要としない。

6.3.1.1

変換処理の構成要素

構成要素となる処理を次に示す。

a)

グローブ構築処理系

この処理の入力は,SGML 文書とする。SGML 文書又は副文書は,構文解析の結果,グローブと呼

ぶノードの集合で表現される。グローブは,要素木に類似しているが,属性値の部分木などの他の部

分木を含んでよい。グローブ内での関係は,特性に基づいて表現する。グローブ及び SGML 特性定義

に関する詳細は,9.を参照のこと。

b)

変換子

変換子に対する入力は,変換指定及びグローブ構築処理系の段階で作成した入力文書グローブから

成る。

変換指定は,関連指定の集合から成る。各関連指定は,入力文書内の類似したオブジェクトから,

結果グローブのオブジェクトへの変換を指定する。この変換の重要な点は,オブジェクトが出力イン

スタンスの明示的な位置だけに対応可能ではなく,他の入力オブジェクトの変換結果を参照点として

用いた位置にも対応できることにある。

変換子の出力は,結果グローブとなる。変換子は,複数の SGML 文書を処理の入力として動作して

よく,同様に複数の SGML 文書を結果としてよい。変換子の詳細は,11.を参照のこと。

c)

SGML

出力処理

SGML

出力処理は,交換・検証・フォーマット処理系への入力を目的として,SGML 文書に転換す

るグローブを生成する。

SGML

出力処理は,

この目的で用いる。

SGML

出力処理の出力は,

適正な SGML

文書とする。SGML 出力処理の詳細は,11.4 を参照のこと。

変換処理のモデルを,

図 に示す。影付きの部分は,この規格が規定する DSSSL 指定の構成要素を

示す。


11

X 4153 : 1998 (ISO/IEC 10179 : 1996)

図 2  変換処理

6.3.1.2

符号化文字,文字及びグリフ識別子のモデル

このモデルには,次の三つの構成要素が存在する。

a) SGML

入力文書中の符号化文字

b)

グローブ内の文字

c)

最終結果文書のグリフ識別子

SGML

入力文書中の符号化文字は,通常,ISO 8859-1 (Latin-1)  などの特定の文字符号化規格に基づいて

符号化される。SGML 宣言は,記述形式で指定した文字集合又は一つ以上の標準化されているか若しくは

少なくとも登録されている符号化文字集合のコードポイントに関連して指定した文字集合を含む。しかし,

私用の符号化文字集合を参照することも,単に符号化文字に最小リテラルを用いて記述を与えることも許

容している。

文字符号化方式は,数多く存在する。文字符号化の幾つかは,送りのない文字を基底文字とともに用い

て,ダイアクリティカル記号付きの文字を表す。さらに,SGML はキー入力できない文字を表すために,

実体参照を許容している。例えば,アキュートアクセントの付いた小文字の e は,同じ文書中で次の四つ

の形式を用いて表現してよい。

a)

単一の文字

b)

送りのないダイアクリティカルマーク及び e(2 文字)

c)

e

及び組合せダイアクリティカルマーク(2 文字)

d)

実体参照&eacute ;

この多様性は,正規表現を用いた検索において問題を起こす。

DSSSL

においては,入力文字を文字列に正規化し,それぞれが特定の意味を表す。この方式では,もと

もとの文字が,一つの文字,特定の文字集合内の複数の文字又は実体参照のどの符号化を使っているかに

依存しない。各 DSSSL 指定は,単一の文字のレパートリを定義する。文字レパートリは,DSSSL 指定,

入力グローブ及び流し込みオブジェクト木で用いるすべての文字を含む。したがって,それらの文字だけ

を使用してよい。各文字の宣言は,語の区切りを示す文字などのフォーマット処理に意味のある特性の集

合も含む。

DSSSL

指定は,入力文書とは異なる符号化文字集合を用いて符号化されてもよく,DSSSL 木で用いた文

字と同じレパートリの文字の並びに翻訳される。要素名の合致などすべての比較は,もとの SGML 文書の


12

X 4153 : 1998 (ISO/IEC 10179 : 1996)

符号化文字ではなく,この翻訳後の文字の比較で行う。

入力グローブの文字の並びは,文字から文字への対応の制御の下で,変換処理によって他の文字の並び

に変更される場合がある。この技法は,典型的には入力文書の一部が,字句変換したテキストを含む場合

に用いる。

フォーマタへの入力グローブ内の文字は,フォーマット処理の間にグリフ識別子に変換される。この変

換は文字からグリフへの対応及びリガチャからグリフへの対応によって制御され,一つ以上の文字を一つ

以上のグリフ識別子に対応する。使用する対応は文書に固定したものではなく,フォーマット特質として

表現でき,領域又は入力グローブの一部に対して指定してよい。リガチャは,一つ以上の文字を一つのグ

リフに対応させることによって指定する。

付加的な特性によって,使用するフォントを指定する。この情報は,グリフ識別子とともに用いて,可

視化に用いる実際の形状を選択する。ハイフネーション点は,文字に基づいて決定する。しかし,幅の計

算は,実際に可視化する形状のメトリク情報,つまりグリフに基づく。

6.3.2

スタイル言語

この規格において“フォーマット処理”という言葉は,次の四つ処理の任意の組合せを意味する。

a)

入力文書内容に表示スタイルを適用し,それらの表示媒体上における位置を決定する処理。

b)

入力文書の位置と関連して行う,結果文書内の内容の選択及び並べ変え。

c)

新しい素材の生成などの,入力文書には明示的には存在しない素材の取り込み。

d)

入力文書にある素材の出力文書からの除去。

DSSSL

においては,フォーマット済み文書のスタイルを,フォーマット特質を用いて定義する。フォー

マット特質は,流し込みオブジェクト木と呼ぶ中間的な木構造に付加する。DSSSL は,スタイル指定に十

分な柔軟性を備えており,行分割・ページ分割・スペース配分アルゴリズムなど,特定のフォーマット処

理系で用いる組版又はフォーマティングアルゴリズムの集合には束縛されていない。これらのフォーマッ

ト処理の様々な部分は,各実装に固有である。この規格では,行分割規則及びページ分割規則は,制約及

び他のフォーマット処理系を支配するフォーマット処理特質との関連を用いて表現してよい。フォーマタ

の出力は,この規格では定義しない。それは,印刷又は可視化に適したフォーマット済み文書となる。

フォーマット処理は,スタイル指定を用いる。スタイル指定は,構築規則,ページモデル定義,段集合

モデル定義,他の一般の宣言及び定義並びに応用定義の宣言及び定義を含む。

6.3.2.1

フォーマット処理の構成要素

フォーマット処理は,概念的には次の四つの処理から構成される。

a) SGML

文書からグローブを構築する。

b)

構築規則を入力グローブ内のオブジェクトに適用して,流し込みオブジェクト木を作成する。

c)

ページ及び段の幾何構成を,ページモデル及び段集合モデルを参照しながら,ページ列流し込みオブ

ジェクト (page-sequence) 及び段集合流し込みオブジェクト (column-set) の特質によって定義する。

d)

流し込みオブジェクトクラスの意味及びその流し込みオブジェクトに関連する特質の値が指定する規

則に基づいて,組処理及びレイアウト処理を行う。各流し込みオブジェクトは,流し込みオブジェク

トクラスのインスタンスであって,フォーマットによって流し込みオブジェクト木の上における親が

位置付けを行い,明示的な大きさをもつ領域列を生成する。

6.3.2.2

グローブ構築処理

フォーマット処理は,変換処理と同じグローブ構築処理を用いる。グローブ構築処理は,入力 SGML 文

書をグローブに,つまり階層的に構造化したオブジェクトの集合に変換する。グローブの詳細は,9.を参


13

X 4153 : 1998 (ISO/IEC 10179 : 1996)

照のこと。

6.3.2.3

流し込みオブジェクト木

グローブは,構築規則を用いて更に処理され,適切なフォーマット処理特質及びページレイアウト特質

をもった流し込みオブジェクトから成る木を生成する。構築指定の形式的定義は,12.4.1 を参照のこと。

原子流し込みオブジェクト以外の各流し込みオブジェクトは,一つ以上の流し込みオブジェクト列を子に

もつ。各子の流し込みオブジェクト列は,その流し込みオブジェクトのポートと呼ぶ点に附属する。ポー

トは,主要ポート又は名前付きポートのどちらかとなる。

流し込みオブジェクトクラスは,ある分類の流し込みオブジェクトに適用するフォーマット特質の集合

を定義する。各流し込みオブジェクトクラスは,ポート名集合も定義する。子流し込みオブジェクトのク

ラスは,附属する流し込みオブジェクトのクラス及び附属するポートの名前によって決定するクラスに適

合していなければならない。特定のポートに附属した流し込みオブジェクトは,順序付けられている。し

かし,同じ流し込みオブジェクトであっても,異なるポートに附属する流し込みオブジェクトの場合,そ

れらのオブジェクト間では,順序は定義されない。

流し込みオブジェクト木の生成処理は,次の二つから成る。

a)

フォーマット特質を,各流し込みオブジェクトに関連付ける。

b)

グローブ内のデータ文字を示すノードを,文字流し込みオブジェクトに変換する。各文字流し込みオ

ブジェクトは,グリフ選択と,フォントファミリ・フォント重みなどのスタイル指定とを制御する特

質をもっている。

流し込みオブジェクト木の構築の際,特定のフォーマット特質をもつ SGML 文書の一部及び同じ段又は

ページに流し込むために一緒に扱うことのできる SGML 文書の一部の識別などのために,SDQL を用いて

よい。共に流し込む内容は,流し込み木内の親のもつ同一のポート内の流し込みオブジェクト列に配置す

る。

備考  例えば,文書が幾つかの標準的な段落及び脚注段落から成る場合に,脚注段落はまとめられて

脚注を表す親流し込みオブジェクトのポートの内容となり得る。同様に,普通の段落はまとめ

られ,段列を表す流し込みオブジェクトのポートの内容となり得る。

6.3.2.4

流し込みオブジェクトクラス

流し込みオブジェクトクラス及びそれに適用する特質は,文書内容のフォーマット上の外見及び振舞い

を定義する。

次の流し込みオブジェクトクラスを,この規格で定義する。

a)

列流し込みオブジェクトクラス (sequence)

b)

行外グループ流し込みオブジェクトクラス (display-group)

c)

単純ページ列流し込みオブジェクトクラス (simple-page-sequence)

d)

ページ列流し込みオブジェクトクラス (page-sequence)

e)

段集合列流し込みオブジェクトクラス (column-set-sequence)

f)

段落流し込みオブジェクトクラス (paragraph)

g)

段落区切り流し込みオブジェクトクラス (paragraph-break)

h)

行フィールド流し込みオブジェクトクラス (line-field)

i)

側線流し込みオブジェクトクラス (sideline)

j)

びょう(錨)流し込みオブジェクトクラス (anchor)

k)

文字流し込みオブジェクトクラス (character)


14

X 4153 : 1998 (ISO/IEC 10179 : 1996)

l)

リーダけい(罫)流し込みオブジェクトクラス (leader)

m)

埋込みテキスト流し込みオブジェクトクラス (embedded-text)

n)

けい線流し込みオブジェクトクラス (rule)

o)

外部グラフィック流し込みオブジェクトクラス (external-graphic)

p)

取り込みコンテナ流し込みオブジェクトクラス (included-container)

q)

傍線・抹消線流し込みオブジェクト流し込みオブジェクトクラス (score)

r)

囲みけい流し込みオブジェクトクラス (box)

s)

横並び流し込みオブジェクトクラス (side-by-side)

t)

グリフ注釈流し込みオブジェクトクラス (glyph-annotation)

u)

そろ(揃)え点流し込みオブジェクトクラス (alignment-point)

v)

そろえ段流し込みオブジェクトクラス (aligned-column)

w)

複数行行内注釈流し込みオブジェクトクラス (multi-line-inline-note)

x)

強調マーク流し込みオブジェクトクラス (emphasizing-mark)

y)

表用流し込みオブジェクトクラスグループ

1)

表流し込みオブジェクトクラス (table)

2)

表部分流し込みオブジェクトクラス (table-part)

3)

表列流し込みオブジェクトクラス (table-column)

4)

表行流し込みオブジェクトクラス (table-row)

5)

表セル流し込みオブジェクトクラス (table-cell)

6)

表けい線流し込みオブジェクトクラス (table-border)

z)

オンライン表示用流し込みオブジェクトクラスグループ

1)

スクロール流し込みオブジェクト (scroll)

2)

複数モード流し込みオブジェクトクラス (multi-mode)

3)

リンク流し込みオブジェクト (link)

4)

余注流し込みオブジェクト (marginalia)

さらに,DSSSL 応用は,独自の流し込みオブジェクトクラス集合を定義してよく,同様に応用独自の流

し込みオブジェクトクラス又は DSSSL が定義する流し込みオブジェクトクラスに適用する応用独自の特

質を定義してよい。

6.3.2.5

領域

流し込みオブジェクトのフォーマット結果は,領域列となる。領域は,四角形であって,固定の幅・高

さをもつ。領域には,行内,行外の二つの種別がある。行内領域は行の一部となり,行外領域は直接には

行の一部とならない。

どちらの種別の領域も,流し込みの処理によって位置決めされる。流し込み処理の正確な性質は,領域

の種別によって異なる。領域の流し込みについての詳細は,12.3 を参照のこと。

行外領域は,領域コンテナに流し込むことによって位置決めする。領域コンテナの大きさは,流し込み

方向に成長してよいが,他の方向には固定されている。

6.3.2.6

ページ及び段幾何構成

DSSSL

におけるページレイアウトは,ページ列流し込みオブジェクト上のページモデルに関連する特質

及び段集合列流し込みオブジェクト上の段集合に関連する特質を用いて指定する。

ページ列流し込みオブジェクトは,フォーマットの結果として,ページ領域列を生成する。ページモデ


15

X 4153 : 1998 (ISO/IEC 10179 : 1996)

ルは,ページ内の領域階層の可能な構造と位置決めを指定する。構造には,ページの幅及び高さ,並びに

ページ区画の指定を含んでいる。ページ区画は,固定の大きさをもつ領域コンテナであって,そこにフォ

ーマット済み内容を,ページ区画流し込み対応  (page region flow map)  の指定どおりに配置する。ページ区

画流し込み対応は,ポート名とページ区画との結合を行う。各ページ区画は,ヘッダ指定及びフッタ指定

をもってよい。ページ列流し込みオブジェクト及び関連するページモデルの詳細は,12.6.4 及び 12.6.4.1

を参照のこと。

段集合列流し込みオブジェクトは,フォーマットの結果段集合領域列を生成する。段集合領域は,平行

な段の集合から成る。各段集合領域の構造及び位置決めは,その段集合が従う段集合モデルによって制御

する。段集合モデルは,各段集合について領域の可能な階層構造を指定する。段集合は,入れ子になって

よい。段集合領域は,流し込み方向に平行な方向に,幾何的に幾つかの段に分割される。各段集合と関連

して,流し込み方向において他の領域との相対位置を制約する区域が存在する場合がある。許容される区

域として,区域 top-float,区域 text,区域 bottom-float 及び区域 footnote がある。

段集合モデルは,段集合の可能な構造及び位置決めの指定を提供する。段集合モデルは,段部分集合,

流し込み方向指定,幅指定,高さ指定などから成る。段部分集合指定は,段部分集合流し込み対応を含む。

段部分集合流し込み対応は,指定した区域に内容を流し込むポートを指示する。段集合モデルは,段抜き

の概念にも対応している。段集合列流し込みオブジェクトの詳細は 12.6.5 を,段集合モデルの詳細は

12.6.5.1

を参照のこと。

6.3.2.7

式言語

フォーマット処理は,8.6 で定義する中核式言語を用いるか,又はオプション機能として 8.に記載の完全

仕様の式言語を用いる。

図 に,フォーマット処理のモデルを示す。

図 3  フォーマット処理

6.3.2.8

符号化文字,文字及びグリフ識別子のモデル

フォーマット処理は,符号化文字,文字及びグリフ識別子に関して,6.3.1.2 に示すモデルを使用する。

7.

DSSSL

指定

DSSSL

指定は SGML 文書であって,DSSSL の文書体系に適合する。DSSSL 文書体系は,JIS X 4155 

体系形式定義要求に適合する文書体系となっている。

SGML

文書は DSSSL 文書体系へ適合していることを,SGML 宣言の APPINFO パラメタに ArcBase トー

クンを含め,DTD に次の記述を入れることで宣言してよい。


16

X 4153 : 1998 (ISO/IEC 10179 : 1996)

<?ArcBase DSSSL>

<!NOTATION DSSSL  PUBLIC "ISO/IEC 10179: 1996//NOTATION

DSSSL Architecture Definition Document//EN"

--

国際規格 ISO/IEC 10744 の体系形式定義要

求に適合する文書体系--

>

<!ATTLIST #NOTATION DSSSL

--

すべての体系のための支援属性--

ArcFormA   -- Attribute name: architectural form --

NAME     #FIXED  DSSSL

ArcNamrA   -- Attribute name: attribute renamer --

NAME     #FIXED  DNames

ArcBridA   -- Attribute name: bridge functions --

NAME     #FIXED  DBrid

ArcDocF   -- Architectural form name: document element --

CDATA     #FIXED  dsssl-specification

ArcVer

 -- Architecture version identifier --

CDATA    #FIXED  "ISO/IEC  10179:1996"

>

<!ENTITY DSSSL SYSTEM CDATA DSSSL>

参考  この規格の 7.及び 9.の記述には,SGML 文書の一部が含まれている。理解を容易にするために,

HyTime

の注釈規約に基づいた解釈を行わない注釈部分を,日本語に訳してある。 

7.1

DSSSL

文書体系

DSSSL

文書体系を,次のメタ DTD で定義する。

<!--DSSSL 文書体系-->

<!ENTITY % declarations

"features | baseset-encoding | literal-described-char | add-name-chars |

add-separator-chars | standard-chars | other-chars | combine-char |

map-sdata-entity | char-repertoire | sgml-grove-plan"

>

<!element dsssl-specification - O

 ((%declarations;)*

(style-specification | transformation-specification |

external-specification)

+)>

<!attlist dsssl-specification

dsssl NAME dsssl-specification

version CDATA #FIXED "ISO/IEC 10179:1996"

>

<!element transformation-specification – O

 ((%declarations;)*,

transformation-specification-body*)>


17

X 4153 : 1998 (ISO/IEC 10179 : 1996)

<!attlist transformation-specification

dsssl NAME transformation-specification

id ID #IMPLIED

desc CDATA #IMPLIED

 --

指定の可読な記述--

partial (partial | complete) complete

 --

完全な指定か,他の指定で利用する指定の部分かを表す。--

 use

-- reftype (transformation-specification | external-specification)

--

    IDREFS #IMPLIED –- Default: none --

 entities

 --

結果文書を検証するための DTD として指定可能な実体グループ--

    ENTITIES #IMPLIED – Default: none --

>

<!element style-specification – O

 ((%declarations;)*,

style-specification-body*)>

<!attlist style-specification

dsssl NAME style-specification

id ID #IMPLIED

desc CDATA #IMPLIED

 --

指定の可読な記述--

partial (partial | complete) complete

 --

完全な指定か,他の指定で利用する指定の部分かを表す。--

use   -- reftype (style-specification | external-specification) --

IDREFS #IMPLIED – Default: none --

>

<!--他の文書内の指定に局所的な識別子を割り当てる。-->

<!element external-specification - O EMPTY>

<!attlist external-specification

dsssl NAME external-specification

id ID #REQUIRED

 document--

指定を含む文書--

        ENTITY #REQUIRED

 specid--

文書内における指定の識別子--

        NAME #IMPLIED –- Default: first spec in document --

>

<!--指定が利用する機能を宣言する。-->

<!element features - O (#PCDATA)

  --lextype(featurename*)-->


18

X 4153 : 1998 (ISO/IEC 10179 : 1996)

<!attlist features

dsssl NAME features

>

<!--基本文字集合内の文字番号を文字名に対応させる。処理系が文字集合を知っており,文字集合

内のすべての文字が国際符号をもつ場合には不要となる。-->

<!element baseset-encoding - O (#PCDATA)

  --lextype ((number,charname)*) -->

<!attlist baseset-encoding

dsssl NAME baseset-encoding

name CDATA #REQUIRED -- public identifier of baseset --

>

<!--SGML 宣言内で最小リテラルを用いて記述した文字を文字名に対応させる-->

<!element literal-described-char – O (#PCDATA)

-- lextype (charname) -->

<!attlist literal-described-char

dsssl NAME literal-described-char

desc CDATA #REQUIRED--

リテラル記述--

>

<!—DSSSL 記法内で許容される追加の文字を宣言する。-->

<!element add-name-chars - O (#PCDATA)

  --lextype (charname*)-->

<!attlist add-name-chars

dsssl NAME add-name-chars

>

<!—DSSSL 記法内で分離子として許容される追加の文字を宣言する。-->

<!element add-separator-chars - O (#PCDATA)

  -- lextype (charname*) -->

<!attlist add-separator-chars

dsssl NAME add-separator-chars

>

<!--名前と国際符号とに関連のある文字を定義する。-->

<!element standard-chars - O (#PCDATA)

  -- lextype ((charname, number))*)  -->

<!attlist standard-chars

dsssl NAME standard-chars

>

<!--国際符号と関連しない文字を定義する。-->

<!element other-chars - O (#PCDATA)

  -- lextype (charname*) -->

<!attlist other-chars


19

X 4153 : 1998 (ISO/IEC 10179 : 1996)

dsssl NAME other-chars

>

<!--SDATA 実体を文字に対応する。-->

<!element map-sdata-entity - O (#PCDATA)

  -- lextype (charname) -->

<!attlist map-sdata-entity

dsssl NAME map-sdata-entity

name CDATA #IMPLIED--Default: mapping uses replacement text only--

text CDATA #IMPLIED--Default: mapping uses name only-->

>

<--文字組みを宣言する。-->

<!element combine-char - O (#PCDATA)

  -- lextype (charname, charname, charname+) -->

<!attlist combine-char

dsssl NAME combine-char

>

<!--文字レパートリを宣言する。-->

<!element char-repertoire – O EMPTY>

<!attlist char-repertoire

dsssl NAME char-repertoire

 name

--

レパートリの公開識別子--

        CDATA #REQUIRED

>

<!--SGML 特性集合のためのグローブ設計を宣言する。-->

<!element sgml-grove-plan - O EMPTY>

<!attlist sgml-grove-plan

dsssl NAME sgml-grove-plan

 modadd

--

無指定時のグローブ設計に追加するモジュール名--

        NAMES #IMPLIED –- Default: none added --

>

<!element style-specification-body - - CDATA

 --

内容は DSSSL スタイル言語を記法として用いる。-->

<!attlist style-specification-body

dsssl NAME style-specification-body

content ENTITY #CONREF –- Default: syntactic content --

>

<!element transformation-specification-body - - CDATA

 --

内容は DSSSL 変換言語を記法として用いる。-->

<!attlist transformation-specification-body

dsssl NAME transformation-specification-body


20

X 4153 : 1998 (ISO/IEC 10179 : 1996)

content ENTITY #CONREF –- Default: syntactic content --

>

要素型形式 dsssl-specification は,一つ以上の処理指定要素型形式を含む。要素 dsssl-specification 内の宣

言要素は,DSSSL 指定要素内のすべての処理指定要素に適用する。

処理指定要素型形式には,二つの種別がある。要素型形式 transformation-specification は,変換処理の指

定を行う。要素型形式 style-specification は,フォーマット処理の指定を行う。これらの要素型形式のイン

スタンスを処理指定と呼ぶ。各処理指定要素はそれ自体だけで指定を構成してよく,同じ型の別の処理指

定要素を使用してもよい。処理指定要素は,SGML 一意識別子を用いて識別する。ある SGML 文書中の処

理指定要素は,要素型形式 external-specification を用いて局所的な一意識別子を割り当てることによって,

他の SGML 文書中の処理指定要素を使用できる。処理指定要素と,それが使用する処理指定要素とを併せ

て,処理指定と呼ぶ。

利用者は,SGML 文書の処理を処理指定要素を識別することによって指定する。これらの要素を識別す

る方法は,処理系依存とする。

備考  処理系は,文書をシステム識別子によって識別し,オプションの一意識別子によって文書内の

要素を識別して,処理指定要素を識別してよい。一意識別子が全く指定されていない場合は,

その文書内の最初の処理指定要素を用いる。

各処理指定要素は,本体要素と呼ぶ要素を含んでよい。本体要素は,処理に固有な記法に従う処理指定

を内容とする。要素型形式 transformation-specification の場合,この記法は DSSSL 変換言語であって,要素

型形式 style-specification の場合,この記法は DSSSL スタイル言語とする。さらに各処理指定要素は,その

記法の構文解析に必要な情報をもつ宣言要素を含んでよい。

処理指定要素列で記述した処理指定を,指定部列とみなす。各指定部は,要素型形式で表現した複数の

宣言及び指定部の本体と呼ぶ処理固有記法を用いた一つの指定から成る。処理指定要素列を解析した結果

の指定部列は,指定要素の順にその内部の指定部を並べた指定部列となる。一つの処理指定要素を解析し

た指定部列は,処理指定要素の内容の指定部に続き,その処理指定要素が使用する処理指定要素列を解析

し た 指 定 部 列 か ら 成 る 。 最 初 の 指 定 部 の 宣 言 は , 処 理 指 定 要 素 内 及 び そ の 指 定 要 素 を 含 む 要 素

dsssl-specification

内に含まれる宣言から成る。最初の指定部の本体は,処理指定要素に含まれる本体要素

を結合したものとなる。

処理指定は,最初にすべての指定部の宣言を処理し,その後に本体を順に処理する。一つの指定部内で

は,競合する宣言があってはならない。二つの異なる指定部内の宣言が競合する場合,先行する指定部の

宣言を優先する。同様に,一つの指定部の本体内では,競合する指定が存在してはならない。しかし,異

なる指定部に属する二つの指定が競合する場合,先行する指定部の指定を優先する。

処理指定の宣言は,指定部の本体及びすべての入力 SGML 文書内に出現するすべてのビット組みが,ど

のように文字に変換されるかを指定する。宣言は,任意の順に出現してよい。特に,宣言前に文字名を使

用してよい。

宣言又は本体要素内で使用する各文字名は,要素型形式 standard-chars,要素型形式 other-chars 又は要素

型形式 char-repertoire のいずれかを用いて宣言しなければならない。

要素型形式 char-repertoire,要素型形式 features 及び要素型形式 sgml-grove-plan 以外のすべての宣言要素

型形式は,機能 charset を必要とする。


21

X 4153 : 1998 (ISO/IEC 10179 : 1996)

7.1.1

機能

要素型形式 features は,指定で用いる機能の宣言を行う。処理指定は,使用するすべての機能を宣言し

なければならない。

この要素の内容は,機能名のリストとする。

この宣言の効果は,累積する。

7.1.2

SGML

グローブ設計

要素型形式 sgml-grove-plan は,SGML 特性集合のためにグローブ設計に取り込む追加のモジュール名を

列挙する。属性 modadd は,追加するモジュールを指定する。処理系は,次の三つのモジュールを自動的

に取り込む。

a) baseabs

(基本抽象モジュール)

b) prlgabs0

(前書き抽象モジュール 0)

c) instabs

(インスタンス抽象モジュール)

変換言語では,更にモジュール prlgabs1(前書き抽象モジュール 1)を自動的に取り込む。

この宣言の効果は,累積する。

7.1.3

文字レパートリ

要素型形式 char-repertoire は,属性 name によって与えられる公開識別子をもつ文字レパートリを指定に

おいて使用すると宣言する。

要素 char-repertoire は,要素型形式 baseset-encoding,要素型形式 literal-described-char,要素型形式

add-name-chars

,要素型形式 add-separator-chars,要素型形式 standard-chars,要素型形式 other-chars 及び要

素型形式 map-sdata-entity のインスタンス,並びに言語形式 character-property-declaration 及び言語形式

added-char-properties-declaration

のインスタンスの列に等しい。

7.1.4

標準文字

要素型形式 standard-chars は,ISO/IEC 10646-1 又は ISO/IEC 6429 で定義する文字集合に対応する文字レ

パートリ内の文字の名前を宣言する。ISO/IEC 10646-1 又は ISO/IEC 6429 内の文字は,それぞれの対応す

る文字集合内の符号で識別し,それを国際符号と呼ぶ。

要素の内容は,複数の文字名及び 10 進数で表した複数の数値から成る対のリストとする。その対のリス

トは,各文字の名前が,続く番号で指定した国際符号に対応することを宣言する。

処理指定は,ISO/IEC 10646-1 内の,次の各文字番号に関する文字の名前を宣言しなければならない。

(1) 32

(スペース)

(2) 34

(引用符)

(3) 35

(番号記号)

(4) 39

(アポストロフィー)

(5) 40

(左小かっこ)

(6) 41

(右小かっこ)

(7) 42

(アステリスク)

(8) 43

(正符号)

(9) 45

(ハイフン,負符号)

(10) 46

(ピリオド)

(11) 47

(斜線)

(12)-(22) 48-57

(0 から 9 の数字)


22

X 4153 : 1998 (ISO/IEC 10179 : 1996)

(23) 58

(コロン)

(24) 59

(セミコロン)

(25) 60

[不等号(より小)

(26) 61

(等号)

(27) 62

[不等号(より大)

(28) 63

(疑問符)

(29)-(54) 65

から 90(A から Z のアルファベット大文字)

(55) 92

(逆斜線)

(56)-(90) 97

から 122(a から z のアルファベット小文字)

さらに,ISO/IEC 6429 内の,次の各文字番号に関する文字の名前を宣言しなければならない。

(91) 10

(改行)

(92) 13

(復帰)

同一の指定部内の要素 standard-chars において,

一つの文字名が 2 回以上出現する場合は,

エラーとする。

要素型形式 standard-chars 内の,ある文字名に関する宣言は,以降の指定部で出現するその文字名の宣言よ

り優先する。

処理系は,ISO 所有者識別子をもつ公開識別子によって識別する基本文字集合に関して,ビット組みを

国際符号に対応させる方法をあらかじめ知っていてよい。基本文字集合が ISO 所有者識別子を含む公式公

開識別子をもち,その基本文字集合から派生した文書文字集合が使用する各文字に関して,一意文字名が

要 素 型 形 式 standard-chars を 用 い て 宣 言 さ れ て い る 場 合 , そ の 基 本 文 字 集 合 の た め の 要 素 型 形 式

baseset-encoding

は不要となる。

7.1.5

その他の文字

要素型形式 other-chars は,ISO/IEC 10646-1 又は ISO/IEC 6429 が定義する文字集合には対応しない文字

レパートリ内の文字の名前を宣言する。

要素の内容は,文字名のリストとする。

1 

    <other-chars>

    logoSGML runic-f runic-u

    </other-chars〉

これらの宣言は,累積する。

7.1.6

符号化基本集合

要素型形式 baseset-encoding は,SGML 宣言において基本文字集合内の文字番号の意味に対応すると宣言

された意味をもつ SGML 文書中のビット組みが,どのように文字に変換されるかを指定する。

要素 baseset-encoding の内容は,対応する 10 進数で指定した文字番号及び文字名の対のリストとなる。

その対のリストは,文字名が,属性 name で指定した公開識別子をもつ文字集合内において,文字番号に

対応することを指定する。

要素 baseset-encoding 間での競合は,文字番号ごとに解決する。複数の要素 baseset-encoding が同じ基本

文字集合のために存在してもよいが,同一の指定部内の同一の基本文字集合で,同じ文字番号に対して二

つの指定が存在する場合は誤りとする。


23

X 4153 : 1998 (ISO/IEC 10179 : 1996)

2 

    <baseset-encoding name=”Character set for the Viking age runic script”>

    31 runic-f

    32 runic-u

    </baseset-encoding>

7.1.7

リテラル記述文字

要素型形式 literal-described-char は,SGML 宣言内において属性 desc の値と等しい最小リテラルを用いて

宣言された意味をもつ SGML 文書中のビット組みが,要素の内容において指定した名前をもつ文字に変換

されることを指定する。

3 

    <literal-described-char desc=”SGML User’s Group logo”>

    logoSGML

    </literal-described-char>

7.1.8

SDATA

実体対応

要素型形式 map-sdata-entity は,内部 SDATA 実体への参照がその要素内容において名前を与えられる文

字を示すことを宣言する。その実体参照名は,属性 name の値に等しく,その実体の代替テキストは属性

text

の値に等しい。その要素内容は一つの文字名とする。

グローブ設計が特性 entity-name をノードクラス sdata に含む場合,SDATA 実体の対応は最初にその名前

で探し,見つからない場合にそのテキストで探して行う。

4 

    <map-sdata-entity name="Alpha"text="[Alpha]">greekA</map-sdata-entity>

    <map-sdata-entity name="V.Beta"text="[V.Beta]">greekB</map-sdata-entity>

7.1.9

分離文字

要素型形式 add-separator-chars は,文字を DSSSL の変換言語及びスタイル言語中において空白類文字と

して許容される終端記号 separator-characters として宣言する。

この宣言は累積する。

7.1.10

名前文字

要素型形式 add-name-chars は,追加の文字を,DSSSL の変換言語及びスタイル言語中において識別子と

して許容される終端変数 added-name-character として宣言する。

この宣言は累積する。

7.1.11

組合せ文字

要素型形式 combine-char は,三つ以上の文字名を含むリストとする。要素型形式 combine-char は,二つ

目以降の文字から成る文字列を,最初の文字で置換することを宣言する。この要素型形式の使用には,機

能 combine-char を必要とする。

7.2

公開識別子

この規格では,公開識別子は,JIS X 4172 が規定する公開識別子の正規文字列形式に適合しなければな

らない。

7.3

字句規約

7.3.1

大文字と小文字との区別

大文字と小文字とは,常に区別する。


24

X 4153 : 1998 (ISO/IEC 10179 : 1996)

備考  伝統的なプログラム言語 Lisp の処理系は,大文字と小文字とを区別しない。

7.3.2

識別子

[1] identifier

initial ( subsequent* final ) ?| peculiar-identifier

[2] initial

letter | special-initial | added-name-character

[3] letter

=a | b | c | ... | z | A | B | C | ... | Z

[4] special-initial

special | :

[5] special

=! | $ | % | & | * | / | < |  =  | > | ? |  ∼  | _ | ^

[6] subsequent

initial | digit | special-subsequent

[7] special-subsequent

=. |  + | −

[8] final

letter | special | added-name-character | digit | special-subsequent

[9] peculiar-identifier

=+ | − | ...

他のプログラム言語が許容するほとんどの識別子は,DSSSL でも許容する。識別子は,アルファベット

及び数字に加えて,文字ドル記号 ($),文字パーセント (%),文字アンパサンド (&),文字アステリスク (*),

文字斜線 (/),文字コロン (:),文字不等号(より小) (<),文字等号  (=),文字不等号(より大) (>),

文字疑問符 (?),文字チルド  (∼),文字アンダライン (_),文字アクサンシルコンフレックス (^),文字正

符号  (+),

文字負符号  (−),

文字ピリオド (.) 及び要素型形式 add-name-chars 又は要素型形式 char-repertoire

で宣言した終端変数 added-name-character を含んでよい。識別子は,数を開始する文字で始まってはなら

ない。しかし,文字正符号  (+)  ,文字  (−)  及び三つの文字ピリオド (...) は識別子とする。識別子は,

文字コロン (:) だけから成る場合は,例外として,文字コロン (:) で終わってはならない。

備考  “...”は,文字ピリオドが三つであって,省略記号 (HORIZONTAL ELLIPSIS) ではない。

7.3.3

トークン,空白類文字及び注釈

[10] token

identifier | keyword | boolean | number | character | string | named-constant | glyph-identifier | ( | ) | ' | . |

' | , | , @

[11] delimiter

whitespace | ( | ) | " | ;

[12] whitespace

=space | record-start | record-end | tab | form-feed | separator-character

[13] comment

=; any-character-except-record-end*

[14] atmosphere

whitespace | comment

[15] intertoken-space

atmosphere*

空白類文字には,スペース,レコード開始,レコード終了及び終端変数 separator-characters がある。空

白類文字は,可読性を改善するために用い,識別子,数値などの空白類文字なしでは字句単位に分割でき

ない,トークン間を区切るために用いる。しかし,トークン間の区切りとして以外の空白類文字は重要で

はない。

空白類文字は二つのトークンの間に出現してよいが,

一つのトークン内では出現してはならない。

空白類文字は文字列の中で出現してもよい。この場合には重要となる。

文字セミコロン (;) は,注釈の開始を示す。注釈は,セミコロンの出現したレコードの終わりまで続く。

処理系は注釈を検知しないが,レコード終了は空白類文字として検知する。このため注釈を識別子又は数

値の中に置いてはならない。

文字クラス intertoken-space の示す文字は,トークンの前後どちら側にも出現してよいが,トークン内で

出現してはならない。

"

暗黙の終了"を必要とするトークン,例えば,識別子,数字,文字,文字ピリオド (.) 及び定数文字列

#!

は,どの文字クラス delimiter の要素によっても終了するが,それ以外のどの文字によっても終了すると


25

X 4153 : 1998 (ISO/IEC 10179 : 1996)

は限らない。

8.

式言語

式言語は,IEEE Scheme 規格及び“Scheme に関する報告改定 4 版 (R

4

RS)

”が定義するプログラム言語

Scheme

に基づく。次の規定は,その定義に基づく。

式言語とプログラム言語 Scheme との相違点を,次に示す。

a)

式言語は,プログラム言語 Scheme の関数的で副作用のない部分集合だけを用いている。副作用がな

ければ意味がない機能(例えば begin)は,排除した。

b)

データ型 vector は用いない。

c)

文字オブジェクトは,文字符号ではなく,名前によって一意に識別する。

d)

プログラム言語 Scheme の ASCII 文字集合への依存性を排除した。

e)

データ型 number は,数値に次元の概念を加えたもっと一般的なデータ型 quantity の下位型とする。

f)

継続を用いない。

g)

R

4

RS

の幾つかのオプション機能は用いない。

h)

手続き gcd(最大公約数)及び手続き 1cm(最小公倍数)は用いない。

i)

キーワード引数を提供する。

さらに DSSSL は,プログラム言語 Scheme の定義が実装依存としている選択肢のうち,特定のものを要

求する。

中核式言語と呼ぶ式言語の部分集合を,8.6 で定義する。

8.1

式言語の概要

プログラム言語 Algol と同様に,式言語は静的適用範囲をもつ。どの変数の使用も,字句上で明らかな

変数の束縛に関連する。

式言語は,明示的な型と対照を成す暗黙の型をもつ。型は,変数ではなく,オブジェクトとも呼ぶ値に

関連する。暗黙の型をもつ言語を,弱い型付け言語又は動的型付け言語と呼ぶことがある。暗黙の型をも

つ他の言語には,プログラム言語 APL,プログラム言語 Snobol 及びプログラム言語 Lisp の他の方言があ

る。明示的な型をもつ言語を,強い型付け言語又は静的型付け言語と呼ぶことがある。明示的な型をもつ

言語には,プログラム言語 Algol 60,プログラム言語 Pascal 及びプログラム言語 C がある。

手続きを含む計算の過程で生成するすべてのオブジェクトは,無限の有効期間をもつ。式言語のオブジ

ェクトが破壊されることはない。実装が記憶容量不足になることもない。その理由は,オブジェクトが後

の計算に全く必要でないことが明らかである場合には,そのオブジェクトの占める記憶を再要求できるこ

とにある。ほとんどのオブジェクトが無限の有効期間をもつ他の言語には,プログラム言語 APL 及び他の

プログラム言語 Lisp の方言がある。

実装は,正しく末尾再帰を扱えなければならない。これによって,反復計算が構文上再帰的な手続きを

用いて記述されている場合にも,一定空間での反復計算として実行が可能になる。したがって,末尾再帰

的な実装においては,反復は通常の手続き呼び出しを用いて表現でき,その結果,特別な反復構成子は構

文糖としての意味をもつにすぎない。

手続きは,それ自体でオブジェクトになる。手続きは動的に生成され,データ構造の中に記憶され,手

続きの結果として返される。この特徴をもつ他の言語に,プログラム言語 Common Lisp 及びプログラム言

語 ML がある。

手続きに対する引数は,常に値で渡される。これは,手続きが評価結果を必要とするか否かにかかわら


26

X 4153 : 1998 (ISO/IEC 10179 : 1996)

ず,

手続きが制御を得る前に実際の引数式が評価されることを意味する。

常に引数を値で渡す他の言語に,

プログラム言語 ML,プログラム言語 C 及びプログラム言語 APL の三つがある。これは,プログラム言語

Haskell

の遅延評価の意味又はプログラム言語 Algol 60 の名前呼び出しの意味とは異なる。それらにおいて

は,手続きが値を必要としなければ,引数式は評価されない。

多くのプログラム言語 Lisp の方言と同様に,式言語は,式及び他のデータのすべてをかっこでくくった

前置記法を用いる。つまり,式言語の構文は,データ用の副言語を生成する。

8.2

基本概念

8.2.1

変数及び領域

構文で予約されていない識別子は,すべて変数として使ってよい。変数は,値に名前を付ける。値に名

前を付けた変数は,値に束縛されたという。ある点で有効なすべての束縛の集合は,その点で有効な環境

と呼ぶ。変数に束縛された値を,変数の値と呼ぶ。

ある種の式は,変数を新しい値に束縛するために用いる。束縛構成子の最も基本的なものは,lambda 式

となる。他のすべての束縛構成子は,lambda 式によって説明できる。その他の束縛構成子には,let 式,let*

式及び letrec 式がある。

プログラム言語 Algol 及びプログラム言語 Pascal に類似し,プログラム言語 Common Lisp 以外の他の多

くの Lisp 方言と異なり,式言語は,ブロック構造をもつ静的スコープの言語である。変数が式に束縛され

るそれぞれの場所に,束縛が有効である式テキストの領域が対応する。この領域は,束縛を確立する特定

の束縛構成子によって決定される。例えば,束縛が lambda 式によって確立される場合,その領域は lambda

式全体となる。

変数のすべての参照は,

その使用を含む領域の最も内側で確立した変数の束縛を参照する。

変数の使用を含む領域にその変数の束縛が無い場合には,その使用は,最上位環境があればそこでの変数

の束縛を参照する。識別子に束縛が無い場合,その識別子を未束縛の識別子と呼ぶ。

8.2.2

真及び偽

どの式言語値も,条件判定のための型 boolean のオブジェクトとして利用できる。#f 以外のどの値も,

その判定において真と解釈する。この規格は,‘真’という語を使って真と解釈するすべての値を指し,

‘偽’という語を使って#f を指す。

8.2.3

外部表現

式言語及びプログラム言語 Lisp においての重要な概念に,オブジェクトの外部表現を文字列で表すこと

がある。例えば,整数 28 の外部表現は,リテラル ‘28’ となり,整数 8 及び 13 から成るリストの外部表

現は,リテラル ‘(8 13)’ となる。

あるオブジェクトの外部表現は,必ずしも一意である必要はない。前段落のリストは,リテラル ‘(08 13)’

及びリテラル  ‘(8 . (13 . ()))’  を用いて表現してもよい。

多くのオブジェクトは外部表現をもつが,手続きなどの幾つかのオブジェクトは外部表現をもたない。

外部表現は,対応するオブジェクトを得るために,式の中に書いてもよい。

外部表現は,この規格が規定するプロセスの間の通信に利用してもよい。

様々な種類のオブジェクトの外部表現の構文には,それらのオブジェクトを操作するための基本手続き

の記述を伴う。

8.2.4

型の独立性

次の判定を二つ以上同時に満たすオブジェクトは存在しない。

a) boolean?

b) symbol?


27

X 4153 : 1998 (ISO/IEC 10179 : 1996)

c) keyword?

d) char?

e) pair?

f) quantity?

g) string?

h) procedure?

これらの判定手続きは,データ型 boolean,データ型 pair,データ型 symbol,データ型 keyword,データ

型 quantity,データ型 char(又は character

,データ型 string 及びデータ型 procedure を定義する。

8.3

式は,変数参照,リテラル,手続き呼出し,条件判定などの値を返す構成子とする。

[16] expression

primitive-expression | derived-expression

式の型は,基本型又は派生型に分類できる。基本型は,変数及び手続き呼出しを含む。派生型は,基本

型ではなく,その意味を基本構成子によって説明できる。派生型は厳密な意味では冗長だが,共通の利用

類型をとらえており,便利な短縮形として提供される。

8.3.1

基本型の式

[17] primitive-expression

variable-reference | literal | procedure-call | lambda-expression | conditional

8.3.1.1

変数参照

[18] variable-reference

variable

変数から成る式を,変数参照とする。変数参照の値は,変数が束縛されている値とする。束縛のない変

数を参照することは,エラーとする。

例 5 

    (define x 28)

    x ⇒ 28

[19] variable

identifier

[20] syntactic-keyword

expression-keyword | else |  => | define

[21] expression-keyword

=quote | lambda | if | cond | and | or | case | let | let* | letrec | quasiquote | unquote |

unquote-splicing

識別子クラス syntactic-keyword に属さない識別子は,変数として利用できる。DSSSL の実装において,

前掲のものに加えて他の識別子を構文予約語として確保してよい。

8.3.1.2

リテラル

[22] literal

quotation self-evaluating

[23] quotation

='datum | ( quote datum)

(quote datum)

は,評価の結果 datum となる。

[24] datum

simple-datum | list

[25] simple-datum

boolean | number | character | string | symbol | keyword | named-constant | glyph- identifier

節 datum には,式言語オブジェクトのすべての外部表現を記述してよい。この記法は,式中のリテラル

定数を取り込むために用いる。グリフ識別子は,構文 style-language-body 内だけで記述可とする。

6

(quote a)

⇒ a

(quote (

+ 1  2))

⇒  (+ 1  2)


28

X 4153 : 1998 (ISO/IEC 10179 : 1996)

(quote datum)

は短縮して'datum としてよい。すべての点でこの二つの記法は,等価とする。

7

'a

⇒ A

'()

⇒ ()

'(

+ 1  2)

⇒  (+ 1  2)

'(quote a)

⇒ (quote a)

''a

⇒ (quote a)

[26] self-evaluating

boolean | number | character | string | keyword | named-constant | glyph-identifier

型 boolean のオブジェクト定数,数値定数,文字定数,文字列定数,キーワード,名前付き定数及びグ

リフ識別子は,評価の結果それ自体になり,quotation 式を使用する必要はない。

8

'"abc"

⇒ "abc"'

"abc"

⇒ "abc"'

'145932

⇒ 145932

145932

⇒ 145932

'#t

⇒ #t

#t

⇒ #t

Abc:

⇒ Abc:

'abc:

⇒ abc:

8.3.1.3

手続き呼出し

[27] procedure-call

=  (operator operand*)

[28] operator

expression

[29] operand

expression

手続き呼出しは,呼出し対象の手続き式及びその手続きに渡す引数を単純にかっこで囲むことで表記す

る。式 operator 及び式 operand は評価され,結果の手続きに結果の引数が渡される。

9

(

+ 3  4)

 7

((if #f

+ *) 3 4)

12

式 operator 又は式 operand の複数がエラーを通知する場合,どちらのエラーを利用者に報告するかは,

処理系依存とする。

多くの手続きは,初期環境の変数値として利用できる。例えば,前述の式の中の加算手続き及び乗算手

続きは,変数+及び変数*の値となる。新しい手続きは lambda 式を評価して作成する。

手続きは,組合せとも呼ばれる。

備考  他の Lisp 方言とは対照的に,式 operator 及び式 operand は,常に同一評価規則によって評価さ

れる。

8.3.1.4

lambda

[30] lambda-expression

= (lambda (formal-argument-listbody)

lambda

式は,評価の結果手続きとなる。lambda 式を評価した時点で有効な環境は,手続きの一部として

記憶される。手続きが,後で実際の引数を伴って呼ばれた場合,lambda 式を評価した時点の環境は,形式

的引数リスト内の変数の対応する実際の値への束縛によって拡張し,その拡張された環境内で lambda 式の


29

X 4153 : 1998 (ISO/IEC 10179 : 1996)

本体が評価される。lambda 式の本体の評価結果は,手続き呼出しの結果として返される。

10

(lambda (x)(

+ x  x))

a procedure

((lambda (x)(

+ x x)) 4 )

 8

(define reverse-subtract

  (lambda (x y) (− y  x)))

(reverse-subtract 7 10 )

 3

(define add4

  (let ((x 4))

    (lambda (y)(+ x  y))))

(add4 6)

10

[31] formal-argument-list

required-formal-argument* (#! optional optional-formal-argument*) ?

(#! rest rest-formal-argument) ? (#! key keyword-formal-argument*) ?

[32] required-formal-argument

variable

[33] optional-formal-argument

variable | ((variable initializer))

[34] rest-formal-argument

variable

[35] keyword-formal-argument

variable | ((variable initializer))

[36] initializer

expression

実引数リストに対して手続きを適用したとき,形式的引数及び実引数は,左から右へ次のとおりに処理

する。

a)

節 required-formal-argument 内の変数は,最初の実引数から始めて連続する実引数に束縛される。必す

(須)の引数より実引数が少ない場合,エラーとなる。

b)

次に,節 optional-formal-argument 内の変数は,残っている実引数に束縛する。オプションの引数より

少ない実引数が残っており,節 initializer が指定されている場合にはその評価結果を,その他の場合に

は#f を,変数に束縛する。節 initializer は,それ以前の引数すべてを束縛した環境において評価する。

c)

節 rest-formal-argument がある場合,残ったすべての実引数のリストに束縛する。これら残りの実引数

は , 節 keyword-formal-argument に 束 縛 さ れ る 資 格 を も つ 。 節 rest-formal-argument が な く , 節

keyword-formal-argument

もない場合,実引数の残りがあればエラーとする。

d)

定数#!key を節 formal-argument-list の中で指定した場合,

偶数個の実引数が残っていなければならない。

これらは一連の対として解釈される。そこでは,各対の最初のメンバがキーワードであって,引数名

を指定する。第二のメンバはそれに対応する値となる。対の最初の要素がキーワードでない場合,エ

ラーとなる。引数名が節 keyword-formal-argument の変数名と同じでなく,しかも節 rest-formal-argument

が存在しなければ,エラーとなる。同一引数名が実引数のリストの中で 1 回より多く出現した場合,

最初の値を使用する。特定の節 keyword-formal-argument のための実引数がなく,節 initializer が指定さ

れている場合には,変数はその初期化子を評価した結果に束縛され,その他の場合には,変数は#f に

束縛される。節 initializer は,それ以前のすべての形式的引数が束縛されている環境において評価する。

備考  変換言語又はスタイル言語の節 formal-argument-list での定数#!key の利用は,機能 keyword 

必要とする。

変数が,節 formal-argument-list の中で 1 回より多く現れる場合,エラーとする。


30

X 4153 : 1998 (ISO/IEC 10179 : 1996)

11

((lambda (#!rest x)x) 3 4 5 6)

⇒  (3 4 5 6)

((lambda (x y #!rest z)z)

3 4 5 6)

⇒ (5

6)

((lambda (x y #!optional z #!rest r *!key i (j 1)) (list x y z i: i j: j))

3 4 5 i: 6 i: 7)

⇒  (3 4 5 i: 6 j: 1)

8.3.1.5

条件式

[37] conditional

= (if test consequent alternate)

[38] test

expression

[39] consequent

expression

[40] alternate

expression

式 conditional は,次のとおりに評価する。まず式 test を評価する。それが真であれば,式 consequent 

評価し,その値を返す。その他の場合は,式 alternative を評価し,その値を返す。

12

(if

(> 3 2) 'yes 'no)

⇒ yes

(if

(> 2 3) 'yes 'no)

⇒ no

(if

(> 3 2)

(

− 3  2)

(

+ 3  2))

⇒ 1

8.3.2

派生式の型

[41] derived-expression

cond-expression | case-expression | and-expression | or-expression | binding-expression |

named-let | quasiquotation

8.3.2.1

cond

[42] cond-expression

= (cond cond-clause+) | (cond cond-clause* (else expression))

[43] cond-clause

=  (test expression) | (test) | (test=> recipient)

[44] recipient

expression

cond

式は,連続する節 cond-clause のそれぞれが含む式 test を,その式の一つが真となるまで順に評価す

る。式 test の一つが真になると,節 cond-clause における式の評価結果は,cond 式全体の結果として返され

る。選択した節 cond-clause が式 test だけを含む場合,式 test の値が結果として返される。節 cond-clause

が式 receipient を含む場合は,式 receipient を評価される。その値は,一つの引数をもつ手続きでなければ

ならない。この手続きは,式 test の値に対して呼び出される。すべての式 test が偽となり,節 else がない

場合には,エラーが通知される。節 else があれば,その式を評価した結果を返す。

13

(cond  ((> 3 2) 'greater)

  ((< 3 2) 'less))

⇒ Greater

(cond  ((> 3 3) 'greater)

((< 3 3) 'less)

 (else

'equal))

⇒ Equal


31

X 4153 : 1998 (ISO/IEC 10179 : 1996)

8.3.2.2

case

[45] case-expression

= (case key case-clause+) | (case key case-clause* (else expression))

[46] key

expression

[47] case-clause

= ((datum*) expression)

節 case-clause に記述するすべての datum は別個のデータでなければならない。case 式は次のとおりに評

価する。式 key を評価し,その結果を各 datum と比較する。式 key を評価した結果が(equal?の意味で)datum

に等しい場合には,対応する節 case-clause の式を評価した結果が,case 式の結果として返される。式 key

を評価した結果が各 datum と異なり,節 else がある場合には,その式を評価した結果を,case 式の結果と

し,その他の場合にはエラーが通知される。

14

(case (* 2 3)

  ((2 3 5 7) 'prime)

  ((1 4 6 8 9) 'composite))

⇒ Composite

(case (car '(c d))

  ((a e i o u) 'vowel)

  ((w y) 'semivowel)

  (else 'consonant))

⇒ consonant

8.3.2.3

And

[48] and-expression : (and test*)

式 test の列は左から右に評価する。式 test の列に偽となる式がある場合,偽を返す。その場合,残りの

式は評価されない。すべての式が真となる場合,最後の式の値が返される。式 test がなければ,#t を返す。

15

(and (

= 2 2) (> 2 1))

⇒ #t

(and (

= 2 2) (< 2 1))

⇒ #f

(and 1 2 'c '(f g))

⇒ (f

g)

(and)

⇒ #t

8.3.2.4

Or

[49] or-expression

= (or test*)

式 test の列は左から右に評価する。真となる最初の式の値が返される。その場合,残りの式はどれも評

価されない。すべての式が偽となる場合,偽を返す。式がない場合には,#f を返す。

16

(or (

= 2 2) (> 2 1))

#t

(or (

= 2 2) (< 2 1))

#t

(or #f #f #f)

#f

8.3.2.5

束縛構成子式

[50] binding-expression

let-expression | let*-expression | letrec-expression

三つの束縛構成子 let,let*  及び letrec は,プログラム言語 Algol 60 に類似するブロック構造を式言語に

与える。三つの構成子の構文は同一であるが,構成子がその変数束縛のために設定する領域が異なる。let

式においては,すべての変数が束縛される前に初期値が計算される。let*式においては,束縛及び評価は連

続して実行される。letrec 式においては,初期値を計算している間にもすべての束縛は有効であり,したが


32

X 4153 : 1998 (ISO/IEC 10179 : 1996)

って相互に再帰的な定義をすることができる。

[51] let-expression

= (let bindings body)

[52] bindings

=  (binding-spec*)

[53] binding-spec

=  (variable init)

[54] init

expression

変数が,節 binding の中で複数回出現することはエラーとする。let 式の評価は,次のとおりに行う。節

init

を現環境において評価し,変数 variable をその結果に束縛する。その結果の拡張環境で式 body を評価

した結果を返す。変数 variable の各束縛の領域は,式 body となる。

17

(let ((x 2) (y 3))

  (* x y))

⇒ 6

(let ((x 2) (y 3))

  (let ((x 7)

        (z (+ x  y)))

    (* z x)))

⇒ 35

名前付き let 式も参照のこと。

[55] let*-expression

= (let* bindings body)

let*

式は,式 let と同様だが,束縛を左から右に順に行い,節 binding-spec が示す束縛の領域は,let*式の

その部分から節 binding-spec(注:式 body の誤りだと思われる。

)の終わりまでを含む。したがって,第二

の束縛は最初の束縛が見える状態で行われ,以降同様となる。

18

(let*((x 2) (y 3))

  (let*((x 7)

        (z (+ x  y)))

    (* z x)))

⇒ 70

[56] letrec-expression

= (letrec bindings body)

節 binding-spec における各変数 variable は,対応する式 init を評価した結果に束縛され,拡張環境で式

body

を評価した結果が返される。式 init は,拡張環境で評価される。節 binding-spec における変数 variable

の各束縛は,letrec 式の全体をその領域とし,相互に再帰的な手続きを定義することを可能にする。式 init

の評価がどの変数 variable の値を参照しても,エラーとする。最も一般的な letrec 式の利用形態において

は,すべての式 init は lambda 式であり,この制約は自動的に満たされる。

19

(letrec ((even?

          (lambda (n)

            (if (zero? n)

                #t

                (odd? (− n  1)))))

        (odd?

          (lambda (n)

            (if (zero? n)


33

X 4153 : 1998 (ISO/IEC 10179 : 1996)

                #f

                (even? (− n 1))))))

    (even? 88))

    ⇒  #t

8.3.2.6

名前付き let

[57] named-let

= (let variable (binding-spec*) body)

名前付き let 式は,通常の let 式と同じ構文及びセマンティクスをもつが,式 body 内において,形式的引

数が名前付き let 式の束縛する変数となり,その式 body が式 named-let の式 body となる手続きに,変数

variable

を束縛する。したがって,式 body の実行を変数 variable によって命名された手続きを呼び出すこ

とによって繰り返してよい。

20

(let loop-((numbers '(3

−2 1 6 −5))

            (nonneg '())

            (neg '()))

  (cond ((null? Numbers) (list nonneg neg))

        ((>= (car numbers) 0)

         (loop (cdr numbers)

               (cons (car numbers) nonneg)

                neg))

        ((< (car numbers) 0)

         (loop (cdr numbers)

               nonneg

               (cons (car numbers) neg)))))

  ⇒  ((6 1 3) (−5 −2))

8.3.2.7

クアジクォート

次に示すクアジクォートの構文は文脈依存になっている。これは無限個の生成規則の構成方法を示して

いる。次の規則において,D=1,2,3,...と入れ子の深さに追随して複製を作ると想定する。

[58] quasiquotation

quasiquotation_1

[59] template_0

expression

[60] quasiquotation_D

'template_D | (quasiquote template_D)

[61] template_D

simple-datum | list-template_D | unquotation_D

[62] list-template_D

  (template-or-splice_D*) | (template-or-splice_D

+  . template_D) | 'template_D | 

quasiquotation_D

+  1

[63] unquotation_D

, template_D

1 | ( unquote template_D

1)

[64] template-or-splice_D

template_D | splicing- unquotation_D

[65] splicing-unquotation_D

=, @ template_D

1 | ( unquote-splicing template_D

1)

節 quasiquotation においては,節 list-template_D が,節 unquotation_D 又は節 splicing- unquotation_D のい

ずれかと混同されることがある。

節 unquotation_D 又は節 splicing-unquotation_D としての解釈を優先する。

quasiquote

式を使うと,必要な構造のすべてではないがほとんどが既知である場合に,リスト構造の構

成が便利になる。式 template の中にカンマがなければ,`template の評価結果は´template の評価結果と等価


34

X 4153 : 1998 (ISO/IEC 10179 : 1996)

となる。しかし template の中にカンマがあれば,カンマに続く式は評価され(アンクォートされ)

,その結

果が構造の中にカンマ及び式に代わって入る。カンマの直後に at 記号 (@) がある場合には,続く式は評

価の結果リストとなる。リストの開きかっこ及び閉じかっこは除去され,リストの要素が,カンマ at 記号

式列の位置に挿入される。

21

'(list , (

+ 1 2) 4)  ⇒

(list 3 4)

(let ((name 'a)) '(list

,name ',name))

⇒  (list a (quote a))

'(a , (

+ 1 2) ,@(map abs '(4 −5 6)) b)

⇒  (a 3 4 5 6 b)

'((foo , (

−  10 3)) ,@(cdr '(c)) . , (car '(cons)))

⇒  ((foo 7) . cons)

quasiquote

式は,入れ子にしてもよい。置換えは,最も外側の逆引用符と同じ入れ子レベルに出現する

アンクォートの構成要素でだけ行われる。入れ子レベルは,連続する各 quasiquotation の内側で 1 だけ増加

し,各 unquotation の内側で 1 だけ減少する。

22 

'(a '(b , (

+ 1 2) , (foo , (+ 1 3) d) e) f)

⇒  (a '(b , (+ 1 2) , (foo 4 d) e) f)

(let ((name1 'x

 (name2

'y))

  '(a '(b ,,name1 ,',name2 d) e))

⇒  (a ' (b ,x , 'y d) e)

式 template_D 及び式 (quasiquote template_D)  の記法は,すべての点で同一とする。式 expression は式

(unquote expression)

と同一であり,式,@expression は式 (unquote-splicing expression)  と同一とする。

23 

      (quasiquote (list (unquote (+ 1 2)) 4))  ⇒  (list 3 4)

      '(quasiquote (list (unquote (+ 1 2)) 4))

      ⇒  '(list , (+ 1 2) 4) i.e., (quasiquote (list (unquote (+ 1 2)) 4))

シンボル quasiquote,シンボル unquote 又はシンボル unquote-splicing のどれかが,式 template の中の前述

とは異なる位置に現れると,予測できない振舞いが起きるかもしれない。

8.4

定義

[66] definition

variable-definition | procedure-definition

定義は,二つの形式をとることができる。

[67] variable-definition

= (define variable expression)

この構文を基本型の式とする。

[68] procedure-definition

= (define (variable formal-argument-list) body)

この形式は,次の定義と等価とする。

(define variable (lambda (variable formal-argument-list) body))

式の中に現れない定義を,最上位定義と呼ぶ。次の最上位定義は,最上位環境において式 expression 


35

X 4153 : 1998 (ISO/IEC 10179 : 1996)

評価し,最上位環境内において変数を評価結果に束縛する。

(define variable expression)

24

(define add3

  (lambda (x) (+ x  3)))

(add3 3)

⇒ 6

(define first car)

(first '(1 2))

⇒ 1

任意の処理指定部分内において,複数個の最上位定義を用いて同一の変数を定義してはならない。処理

指定部分内の変数の最上位定義は,以前の処理指定部分において最上位定義されている場合に無視する。

7.1

を参照のこと。

最上位定義内の式 expression は,式 expression を評価することによって参照される可能性のあるすべての

最上位変数が定義されるまで,評価してはならない。

備考 lambda 式の評価は,その中で自由変数を参照しないので,この制約が相互再帰的手続きの定義

を妨げることはない。

最上位定義内に出現するすべての式が,この制約を保ったまま評価できない場合にはエラーとする。

実装組込みの変数の定義は,最上位定義によって置換してよい。代わりとなる定義はその変数への参照

すべてにおいて使用される。参照が,最初の最上位定義を含む処理指定部に先行する部分で起こる場合に

でも使用する。

備考  この規則は実装にとって簡単ではない。しかし,適合 DSSSL 指定の意味を変えずに,規格に組

込み手続きを将来の版の追加可能となる。

[69] body

definitionexpression

定義は,式 body の先頭でも出現してよい。これらを内部定義と呼ぶ。内部定義で定義した変数は,その

式 body に固有のものとなる。その生存期間は式 body 全体となる。例を次に挙げる。

(let ((x 5))

  (define foo (lambda (y) (bar x y)))

  (define bar (lambda (a b) (+ (* a b) a)))

  (foo (+ x  3)))                 ⇒ 45

内部定義を含む式 body は,常に同等の letrec 式に書き換えることができる。例えば,前例に示した let

式は次の式に等しい。

(let ((x 5))

  (letrec ((foo (lambda (y) (bar x y)))

           (bar (lambda (a b) (+ (* a b) a))))

    (foo (+ x  3))))

同等の letrec 式だけについていえば,定義中の変数の値を参照することなく,式 body 内の各内部定義の

式は評価可能でなければならない。

8.5

標準手続き

式言語の組込み手続きを,8.5 に記述する。初期(又は'最上位')環境は,便利な値に束縛された多くの変

数で始まる。その多くは,データを操作する基本手続きとする。例えば,変数 abs は,数値の絶対値を計

算する引数が一つの手続きに束縛され,変数+は,合計を計算する手続きに束縛される。


36

X 4153 : 1998 (ISO/IEC 10179 : 1996)

手続きに,扱うことを規定されていない型の引数が渡されることはエラーとする。

8.5.1

論理型

[70] boolean

=  #t | #f

真及び偽を示す標準の論理オブジェクトは,#t 及び#f と記す。しかし,実際に重要なのは,条件式 (if,

cond

,and,or)  がどのオブジェクトを真又は偽として扱うかにある。

‘真の値’

(又は単に‘真’ともいう。

という句は,条件式によって真として扱われる任意のオブジェクトを意味し,

‘偽の値’

(又は‘偽’

)とい

う句は,条件式によって偽として扱われる任意のオブジェクトを意味する。

すべての標準値の中で#f だけを,条件式中で偽として解釈する。#f を除くすべての標準値(#t,対,空

リスト,シンボル,文字列及び手続きから成る)は,真と解釈する。

備考  他の Lisp 方言に慣れたプログラマは,式言語が#f 及び空リストのいずれもが,シンボル nil と

は区別されていることに注意する必要がある。

論理定数は評価の結果それ自体になり,式の中でクォートする必要はない。

25

#t

⇒ #t

#f

⇒ #f

'#f

⇒ #f

8.5.1.1

否定

    (not obj)

手続き not は,引数 obj が偽であれば#t を返し,その他の場合には#f を返す。

26

(not #t)

⇒ #f

(not 3)

⇒ #f

(not (list 3))

⇒ #f

(not #f)

⇒ #t

(not '())

⇒ #f

(not (list))

⇒ #f

(not 'nil)

⇒ #f

8.5.1.2

論理型判定

    (boolean? obj)

手続き boolean?は,引数 obj が#t 又は#f のどちらかであれば#t を返し,その他の場合には#f を返す。

27

(boolean? #f)

⇒ #t

(boolean? 0)

⇒ #f

(boolean? '())

⇒ #f

8.5.2

等価

    (equal? obj

1

 obj

2

)

手続き equal?は,オブジェクトの等価関係を定義する。引数 obj

1

及び引数 obj

2

を同一オブジェクトとみ

なす場合に#t を返し,その他の場合には#f を返す。外部表現をもつオブジェクトについては,その外部表

現が同一であるとき,二つのオブジェクトを同一とする。引数 obj

1

及び引数 obj

2

のそれぞれが,型 boolean,

型 symbol,型 char,型 pair,型 quantity 又は型 string であれば,手続き equal?は次の場合に#t を返す。


37

X 4153 : 1998 (ISO/IEC 10179 : 1996)

a)

引数 obj

1

及び引数 obj

2

が,共に#t であるか共に#f である場合。

b)

引数 obj

1

及び引数 obj

2

が,共にシンボルであって次を満たす場合。

(string

=? (symbol->string

obj1)

 (symbol->string

obj2))

  ⇒  #t

c)

引数 obj

1

及び引数 obj

2

が,共に数であり,手続き=の意味で等しい数値とみなされ,どちらも正確値

であるか又はどちらも不正確値の場合。

d)

引数 obj

1

及び引数 obj

2

が,共に文字列であり,

手続き string=?によって同一文字列とみなされる場合。

e)

引数 obj

1

及び引数 obj

2

が,共に文字であり,手続き char=?によって同一文字とみなされる場合。

f)

引数 obj

1

及び引数 obj

2

が,共に空リストの場合。

g)

引数 obj

1

及び引数 obj

2

が,

共に対であって,

しかも引数 obj

1

の car 部と引数 obj

2

の car 部が手続き equal?

によって等価とみなされ,さらに引数 obj

1

の cdr 部と引数 obj

2

の cdr 部が手続き equal?によって等価と

みなされる場合。

引数 obj

1

及び引数 obj

2

の一方が手続きであって,他方がそうでない場合には,equal?は#f を返す。引数

obj

1

及び引数 obj

2

の両方が手続きである場合には,obj

1

及び引数 obj

2

がある引数に関して異なる値を返す

場合に equal?は#f を返し,そうでない場合#t 又は#f のどちらかを返す。

備考  換言すると,手続きの等価性は十分には定義されない。

8.5.3

対及びリスト

対(点対ともいう。

)は,歴史的な理由で car 部又は cdr 部と呼ぶ二つの部分をもつ記憶構造とする。対

は,手続き cons によって生成される。car 部及び cdr 部は,手続き car 及び手続き cdr によって参照される。

対は,主としてリストを表すために用いる。リストは,空リスト又は cdr 部がリストの対として再帰的に

定義してもよい。さらに厳密にいうと,リストの集合は,次の条件を満たす最小の集合 として定義され

る。

a)

空リストは集合 に含まれる。

b)  list

が に含まれるとき,list を cdr 部に含むすべての対もまた に含まれる。

リストの要素列とは,リストを構成する連続する対の car 部のオブジェクト列とする。例えば,2 要素リ

ストは,対の car 部が第一要素であり,対の cdr 部が対であって,その対の car 部が第二要素であって,そ

の対の cdr 部が空リストとなる。リストの長さは,要素の個数とし,要素の個数は対の個数と同じになる。

空リストは,対ではなく,特殊なオブジェクトであってそれ自体の型をもつ。それは要素をもたず,そ

の長さは 0 である。

備考  この定義は,すべてのリストは有限の長さをもち,空リストによって終結することを示す。

[71] list

=  (datum*) | (datum+ . datum) | abbreviation

対の最も一般的な記法(外部表現)は‘点’記法であって,リテラル  (c

1

 . c

2

)

の場合には c

1

を car 部の値,

c

2

を cdr 部の値とする対を示す。また,リテラル  (4 . 5)  は,car 部が 4 で cdr 部が 5 である対を示す。リテ

ラル  (4 . 5)  は,対の外部表現であり,評価の結果対になる式ではないことに注意。

リストに関しては,もっと合理的な記法を使ってもよい。つまりリストの要素を単にかっこで囲み,ス

ペースで分離して書き表せる。空リストは、  (  )  と書く。例えば

    (a b c d e)

及び

    (a . (b . (c . (d . (e . ())))))


38

X 4153 : 1998 (ISO/IEC 10179 : 1996)

は,シンボルのリストであって等価な記法となる。

空リストで終わっていない対の連鎖は,不適リストと呼ぶ。不適リストはリストでないことに注意され

たい。不適リストを表現するために,リスト及び点付き記法を組み合わせてもよい。

    (a b c . d)

は,次と等価とする。

    (a . (b . (c .d)))

与えられた対がリストかどうかは,cdr 部に何が記録されているかに依存する。

[72] abbreviation

abbrev-prefix datum

[73] abbrev-prefix

=  ´ | ` | , | ,@

リテラル式内で,式´datum,式`datum,式  ,datum 及び式 ,@datum は,二つの要素をもつリストを意味

し , 第 一 の 要 素 が そ れ ぞ れ シ ン ボ ル quote , シン ボ ル quasiquote , シ ン ボ ル unquote 及 び シ ン ボ ル

unquote-splicing

を示す。第 2 の要素は,どの場合も datum となる。この規約は任意の式及び指定の一部を

リストとして表現可能とするためにサポートする。つまり,

式言語の構文に従う場合,

すべての式 expression

は又 datum でもあり,要素体系 transformation-language-body

datum

の列となる。

8.5.3.1

対型判定

    (pair? obj)

引数 obj が対であれば#t を返し,その他の場合は#f を返す。

28

(pair? '(a . b))

⇒ #t

(pair? '(a b c))

⇒ #t

(pair? '())

⇒ #f

8.5.3.2

対構成手続き

    (cons obj

1

 obj

2

)

car

部が引数 obj

1

であり,cdr 部が引数 obj

2

である対を返す。

29

(cons 'a '())

⇒ (a)

(cons '(a) '(b c d))

⇒  ((a) b c d)

(cons "a" '(b c))

⇒  ("a" b c)

(cons 'a 3)

⇒  (a . 3)

(cons '(a b) 'c)

⇒  ((a b) . c)

8.5.3.3

手続き car

    (car pair)

引数 pair の car 部の内容を返す。空リストの car をとることはエラーとなることに注意されたい。

30

(car '(a b c))

⇒ A

(car '((a) b c d))

⇒ (a)

(car '(1 . 2))

⇒ 1

(car '())

⇒ error

8.5.3.4

手続き cdr

    (cdr pair)


39

X 4153 : 1998 (ISO/IEC 10179 : 1996)

引数 pair の cdr 部の内容を返す。空リストの cdr をとることはエラーとなることに注意されたい。

31

(cdr '((a)b c d))

(b c d)

(cdr '(1 . 2))

⇒ 2

(cdr '())

⇒ error

8.5.3.5

c...r

手続き

    (caar pair)

    (cadr pair)

    (cdar pair)

    (cddr pair)

    (caaar pair)

    (caadr pair)

    (cadar pair)

    (caddr pair)

    (cdaar pair)

    (cdadr pair)

    (cddar pair)

    (cdddr pair)

    (caaaar pair)

    (caaadr pair)

    (caadar pair)

    (caaddr pair)

    (cadaar pair)

    (cadadr pair)

    (caddar pair)

    (cadddr pair)

    (cdaaar pair)

    (cdaadr pair)

    (cdadar pair)

    (cdaddr pair)

    (cddaar pair)

    (cddadr pair)

    (cdddar pair)

    (cddddr pair)

これらの手続きは,car 及び cdr の複合とする。ここで,例えば caddr は,次の式によって定義できる。

    (define caddr (lambda (x) (car (cdr (cdr x)))))

四つの深さまでの任意の複合が用意されている。これらの手続きは,全部で 28 個ある。

8.5.3.6

空リスト型判定

    (null? obj)

引数 obj が空リストであれば#t を返し,その他の場合には#f を返す。


40

X 4153 : 1998 (ISO/IEC 10179 : 1996)

8.5.3.7

リスト型判定

    (list? obj)

引数 obj がリストであれば#t を返し,その他の場合には#f を返す。定義に従うと,すべてのリストは,

有限の長さをもち,空リストによって終結する。

32

(list? '(a b c))

⇒ #t

(list? '())

⇒ #t

(list? '(a . b))

⇒ #f

8.5.3.8

リスト構成

    (list obj...)

引数を要素とするリストを返す。

33

(list 'a (

+  3 4) 'c)  ⇒

(a 7 c)

(list)

⇒ ()

8.5.3.9

リスト長

    (length list)

リストの長さを返す。

34

(length '(a b c))

3

(length '(a (b) (c d e)))

3

(length '())

0

8.5.3.10

リスト連結

    (append list ...)

最初の引数 list の要素に続き,他の引数 list の要素を指定した順に含むリストを返す。

35 

(append '(x) '(y))

⇒ (x

y)

(append '(a) '(b c d))

⇒  (a b c d)

(append '(a (b)) '((c)))

⇒  (a (b) (c))

最後の引数は実際にはオブジェクトであってよい。最後の引数が適切なリストでないと,不適リストと

なる。

36

(append '(a b) '(c . d))

⇒  (a b c . d)

(append '() 'a)

⇒ a

8.5.3.11

リスト反転

    (reverse list)

引数 list の要素を逆順に構成したリストを返す。

37

(reverse '(a b c))

(c b a)

(reverse '(a (b c) d (e (f))))

((e (f)) d (b c) a)

8.5.3.12

部分リスト抽出


41

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    (list-tail list k)

最初の 個の要素を無視して得られた引数 list の部分リストを返す。手続き List-tail は,次の式によって

定義できる。

(define list-tail

  (lambda (x k)

    (if (zero? k)

        X

        (list-tail (cdr x) (- k 1)))))

8.5.3.13

リスト参照

    (list-ref list k)

引数 list  の 番目の要素を返す。この手続きは,式 (list-ref list k)が返すリストの car 部と同じ結果を返

す。

38

(list-ref

'(a b c d) 2)

⇒ c

(list-ref

'(a b c d)

(inexact->exact (round 1.8)))

⇒ c

8.5.3.14

リスト要素

    (member obj list)

car

部が引数 obj に等しくなる最初の部分リストを返す。ここで,部分リストとは引数 をリストの長さ

未満とした場合に,式 (list-tail list k)  が返す空でないリストとする。引数 obj が引数 list 内で出現しない場

合には,

(空リストではなく)#f を返す。

39

(member 'a '(a b c))

(a b c)

(member 'b '(a b c))

⇒ (b

c)

(member 'a '(b c d))

⇒ #f

8.5.3.15

関連リスト

    (assoc obj alist)

引数 alist

‘association list’を意味する)は,対のリストとする。この手続きは,引数 alist 内の対であ

って,その対の car 部が引数 obj と手続き equal?の意味において等しい場合に,その対を返す。引数 alist

内の対すべてにおいて,その car 部が引数 obj と等しくない場合に,

(空リストではなく)#f を返す。

40

(define e '((a 1) (b 2) (c 3)))

(assoc 'a e)

⇒ (a

1)

(assoc 'b e)

⇒ (b

2)

(assoc 'd e)

⇒ #f

備考  通常,これらを判定として使用するが,手続き member 手続き assoc はその名前に疑問符をもた

ない。これは,これらの手続きが単に#t,#f ではなく有用な値を返すことによる。

8.5.4

シンボル

シンボルは,二つのシンボルが手続き equal?によって同一と判定されるのは,名前が同じように綴られ

た場合だけに限られる点で有用なオブジェクトである。これは識別子を示すのに必要十分な特徴で,多く


42

X 4153 : 1998 (ISO/IEC 10179 : 1996)

の lisp 方言ではシンボルをその目的のために内部的に使用する。シンボルはその他多くの適用例でも有用

である。例えば,pascal での列挙型の値を示すのにも用いられ得る。通常,二つのシンボルの同値性はそ

れらの長さにかかわらず一定時間で求めることができる。

[74] symbol

identifier

シンボルを書く際の規則は,識別子を書く際の規則と完全に同一とする。

8.5.4.1

シンボル型判定

    (symbol? obj)

引数 obj がシンボルである場合に#t を返し,そうでなければ,#f を返す。

41

(symbol? 'foo)

⇒ #t

(symbol? (car '(a b)))

⇒ #t

(symbol? "bar")

⇒ #f

(symbol? 'nil)

⇒ #t

(symbol? '())

⇒ #f

(symbol? #f)

⇒ #f

8.5.4.2

シンボルから文字列への変換

    (symbol->string symbol)

引数 symbol の名前を文字列で返す。

42

(symbol->string 'flying-fish)

⇒ "flying-fish"

(symbol->string

  (string->symbol "Malvina"))

⇒ "Malvina"

8.5.4.3

文字列からシンボルヘの変換

    (string->symbol string)

引数 string をその名前とするシンボルを返す。この手続きは,特殊文字を含む名前のシンボルを生成で

きる。しかし,特殊文字を含む名前のシンボルは外部表現形式をもたないので,それらのシンボルの作成

は通常の使用には適さない。手続き symbol->string の説明を参照のこと。

43

(equal?

'mISSISSIppi  'mississippi)

⇒ #f

(equal?

'bitBlt (string->symbol "bitBlt"))

⇒ #t

(equal?

'JollyWog

 (string->symbol

  (symbol->string 'JollyWog)))

⇒ #t

(string

=?   "K.  Harper, M.D."

 (symbol->string

  (string->symbol "K. Harper, M.D."))

⇒ #t

8.5.5

キーワード

キーワードは,シンボルに類似している。主な相違点は,キーワードは自己評価的 (self-evaluating) な

ので式内でクォートする必要がないことである。キーワードは,主にキーワード引数を指定するのに用い

る。


43

X 4153 : 1998 (ISO/IEC 10179 : 1996)

[75] keyword

identifier:

キーワードは単一のトークンで,識別子と文字コロン (:) の間に空白類文字を入れてはならない。文字

コロン (:) は,キーワード名の一部とはみなさない。

8.5.5.1

キーワード型判定

    (keyword? obj)

引数 obj がキーワードの場合に#t を返し,その他の場合に#f を返す。

8.5.5.2

キーワードから文字列への変換

    (keyword->string keyword)

引数 keyword の名前を返す。

44 

    (keyword->string Argentina:)⇒"Argentina"

8.5.5.3

文字列からキーワードへの変換

    (string->keyword string)

引数 string を名前とするキーワードを返す。

45 

    (string->keyword “foobar”)⇒foobar:

8.5.6

名前付き定数

[76] named-constant

=  #!optional | #!rest | #!key

名前付き定数 named-constant は,節 formal-argument-list 内で用いる。名前付き定数は,自己評価的とす

る。名前付き定数のオブジェクトは,他のすべてのオブジェクトの型とは異なる,それ自体の一意な(名

前のない)型をもつ。

8.5.7

数量及び数値

8.5.7.1

数型

式言語は,長さ及び長さから派生する面積,体積などの数量を示す数量データ型を提供する。数量の表

現は,SI メートルを基礎とする。SI メートルを示す単位を m とする。数量は数値と整数べき乗した単位

との組合せで表現する。数量の次元は,数量を示す際にその基本単位をべき乗した数に等しい。次元が 0

の数量を無次元と呼ぶ。

数量を基本単位によって表現するだけでなく,他の派生単位によっても表現できるとつごうがよい。

[77] unit-declaration

= (define-unit unit-name expression)

この宣言中の式は,数量に評価されなければならない。単位宣言は,派生数量の単位名が派生元の数量

と等価であることを宣言する。この文脈では,単位名は独立したトークンとする。

派生単位として,センチメートル,ミリメートル,インチ,パイカ,ポイントは次の定義と対応し,あ

らかじめ定義されている。

    (define-unit cm 0.01m)

    (define-unit mm 0.001m)

    (define-unit in 0.0254m)

    (define-unit pt 0.0003527778m)

    (define-unit pica 0.004233333m)

数値データ型は,無次元の数量を示す数量の下位型とする。式言語は,実数及び整数の二つの数値デー

タ型をもつ。実数は数値の下位型で,整数は実数の下位型とする。例えば,整数 3 は実数ともみなせるし,


44

X 4153 : 1998 (ISO/IEC 10179 : 1996)

さらに無次元の数量ともみなせる。数量型,数値型,実数型及び整数型は,それぞれ手続き quantity?,手

続き number?,手続き real?及び手続き integer?によって定義する。

角度(厳密には,平面角度)は,無次元数量つまり二つの長さの比とする。整数 1 は,1 ラジアンと等

価とする。rad を無次元数量 1 と等しい派生単位名として宣言することを推奨する。

8.5.7.2

正確性

正確に表現されている数量と,

正確ではないかもしれない数量とを区別することが必要となる。

例えば,

データ構造への指標は正確に分からなければならない。正確な数量が要求されている箇所での不正確な数

量の使用を見つけるために,式言語は,正確な数量と不正確な数量とを明示的に区別する。この区別は,

型の次元と直交する。

数量は,正確か不正確かのどちらかとなる。数量は,正確な定数として書かれた場合,又は正確な数量

から正確演算だけによって導かれた場合に,正確となる。数量は,不正確な定数として書かれていた場合,

不正確な成分を用いて導かれた場合,又は不正確な演算によって導かれた場合に,不正確となる。不正確

さは,数量がもつ伝搬しやすい特質である。

二つの実装が,不正確な中間結果を含まなかった計算に関して正確な結果を生成する場合,二つの最終

的な結果は,数学的に等価となる。浮動小数演算などの近似法が用いられるため,不正確な数量を含む計

算では,これは一般的には正しくない。しかし実装は,数学的な理想結果に,できるだけ近い結果を生成

しなければならない。

手続き+などの有理数演算は,正確な変数を与えられた場合には,常に正確な結果を生成しなければな

らない。その演算が正確な結果を生成できなければ,実装制限の違反を報告してもよく,報告せずにその

結果を強制的に不正確な値にしてもよい。

手続き inexact->exact は例外であるが,一般的に 8.5.7.2 に示す演算は,不正確な変数を与えられた場合

には,不正確な結果を返さなければならない。しかし演算は,結果の値が変数の不正確さに影響されない

ことを証明できれば,正確な結果を返してよい。例えば,任意の数量と正確な 0 との乗算は,他の変数が

不正確であっても,正確な 0 を出力してよい。

8.5.7.3

実装の制限

実装は,8.5.7.3 の要求に従う限り任意の型において限定した範囲だけを保証してよい。正確値の保証範

囲は,同じ型の不正確値の保証範囲と異なってよい。例えば,すべての不正確値実数を浮動小数を用いて

実現した実装が,不正確実数の範囲及び不正確整数の範囲を浮動小数の表現範囲に制限しながら,実用上

は制限のない正確値整数を実現してよい。すべての実装は,−2147483647 から 2147483647 までの範囲の

正確値整数を保証しなければならない。

実装はリスト及び文字列の指標として用いる数値の範囲,並びにリスト及び文字列の長さとして返却さ

れる数値の範囲内のすべての正確値整数を保証しなければならない。手続き length 及び手続き string-length

は正確値整数を返却しなければならない。正確値整数以外を指標として用いることは誤りとする。さらに

指標の範囲内にある任意の整定数は,この範囲外でどのような実装の制限が適用されるかにかかわらず,

正確値整数の形式で表される限り正確値整数として解釈しなければならない。

− *

quotient remainder

modulo

max min abs

floor ceiling

truncate

round expt


45

X 4153 : 1998 (ISO/IEC 10179 : 1996)

前述の手続きが,正確値を引数として与えられたが正確値整数を返却できない場合,実装の制限に違反

したことを報告してもよいし,報告せずに結果を強制的に不正確値にしてもよい。これらの変換は,後に

誤りを生じるかもしれない。

実装は,不正確数を表現するのに浮動小数点及びその他の概略表現手法を用いてよい。この規格は,浮

動小数表現を用いる実装は IEEE の 32 ビット及び 64 ビット浮動小数点規格を用いること,及び浮動小数

以外の表現形式を用いる実装は浮動小数点規格を用いることで得られる以上の精度を提供することを推奨

するが,必す(須)とはしない。

特に,実装が浮動小数表現を用いる実装は,次の規則を守らなければならない。浮動小数演算の結果は,

少なくともその演算に対する任意の不正確値引数の表現に用いられる精度以上の精度で表現しなければな

らない。手続き sqrt などの潜在的に不正確な演算であっても,正確値の引数を適用した場合には,可能で

あれば正確値の結果を返すのが望ましい。例えば,正確値 4 の二乗根は正確値 2 になるのが望ましい。し

かし,これも必す(須)ではない。しかし,sqrt のように正確値数量が不正確な結果を出す演算が行われ

て,結果が浮動小数点数で表される場合,最も精度の高い浮動小数形式を用いなければならない。しかし,

結果が浮動小数以外の形式で表される場合,実装で利用可能な最も精度の高い浮動小数形式の精度以上の

精度をもたなければならない。

実装が,正確値数量で表現できない正確値定数を読み取った場合,実装の制限に違反したことを報告し

てもよいし,報告せずに結果を強制的に不正確値にしてもよい。

8.5.7.4

数値定数構文

[78]   number

num-2 | num-8 | num-10 | num-16

[79]   num-2

=#b sign? digit-2

[80]   num-8

=#o sign? digit-8

[81]   num-16

=#x sign? digit-16

[82]   num-10

=#d? sign? decimal exponent? unit?

[83]   decimal

digit-10+ | . digit-10+ | digit-10+ . digit-10*

[84]   exponent

exponent-marker sign? digit

[85]   exponent-marker

=e

[86]   unit

unit- name (sign? digit-10+)?

[87]   unit-name

letter

[88]   sign

=+ | −

[89]   digit-2

= 0 | 1

[90]   digit-8

=  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7

[91]   digit-10

digit

[92]   digit-16

digit-10 | a | b | c | d | e | f

[93]   digit

=  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

数量は,2 進数,8 進数,10 進数,16 進数で表記でき,基数前置子で識別する。基数前置子は,#b(2

進数)

,#o(8 進数)

,#d(10 進数)

,及び#x(16 進数)である。基数前置子なしでは,数量は 10 進数で表

記されているとする。数値定数は,小数点又は単位を含む場合に不正確値となる。それ以外は,正確値で

ある。


46

X 4153 : 1998 (ISO/IEC 10179 : 1996)

備考  8.5.7.4 で用いている例では,正確値記法を用いている定数は実際に正確値数量として実現され

ていると仮定している。幾つかの例ではまた,不正確値記法を用いている定数が正確さを失わ

ない場合もあることを示している。不正確値定数は,不正確値数量の実現に浮動小数を用いて

いた実装で,不正確値となりそうなものを選んでいる。

数値定数は,単位後置子をもってよい。各単位名は,基本単位の名前であるか,単位宣言によって宣言

されなければならない。単位名は終端記号 expornet-marker であってはならない。単位名に数値が続かない

場合,定数を,単位に関連する数量と乗算する。単位名に符号なし又は+符号付きの数値が続く場合,単

位名に関連する数値をその数値をべき数としてべき乗し,その結果と定数とを乗算する。単位名に−符号

付きの数値が続く場合,単位名に関連する数値をその数値をべき数としてべき乗し,その結果によって定

数を除算する。

8.5.7.5

数値型判定

    (quantity? obj)

    (number? obj)

    (real? obj)

    (integer? obj)

これらの手続きは,数量以外の型を含むすべての型の引数に対して適用できる。オブジェクトが特定の

型である場合に#t を返し,そうでなければ#f を返す。一般に,ある型判定が真である場合,それより上位

の型もその数量に関して真を返す。したがって,ある型判定がその数量に対して偽である場合,それより

下位の型も同様にその数量に偽を返す。例えば,が不正確値実数である場合に,式 (integer? x)  は,式  (=

x (round x))

が成り立つ場合だけ真となる。

46

(real? 3)

⇒ #t

(integer? 3.0)

⇒ #t

備考  前述の判定関数の不正確値に対する振舞いは,不正確さが結果に影響する可能性がある。

8.5.7.6

正確性判定

    (exact? q)

    (inexact? q)

数量の正確性を判定する。すべての数量において,一方の判定は必ず真となる。

8.5.7.7

大小判定

    (= q

1

 q

2

 q

3

…)

    (< q

1

 q

2

 q

3

…)

    (> q

1

 q

2

 q

3

…)

    (<= q

1

 q

2

 q

3

…)

    (>= q

1

 q

2

 q

3

…)

引数がそれぞれ,等しい,単調増加,単調減少,単調非減少,単調非増加である場合に,#t を返す。こ

れらの判定は,推移的でなければならない。これらの引数の次元は,すべて同一でなければならない。

備考  不正確数量にこれらの判定を用いることは誤りではないが,不正確さが結果に影響するかもし

れず信頼できない。このような現象は特に手続き=及び手続き zero?で顕著となる。


47

X 4153 : 1998 (ISO/IEC 10179 : 1996)

8.5.7.8

数値特性判定

    (zero? q)

    (positive? q)

    (negative? q)

    (odd? n)

    (even? n)

数量の特性を検査し,#t 又は#f を返却する。8.5.7.7 

備考を参照のこと。

8.5.7.9

最大・最小関数

    (max q

1

 q

2

…)

    (min q

1

 q

2

…)

引数中の最大又は最小の数を返す。すべての引数の次元は,同一でなければならない。結果の次元は,

引数の次元と同一となる。

47

(max 3 4)

⇒ 4

;

exact

(max 3.9 4)

⇒ 4.0 ;

inexact

備考  どの引数が不正確の場合でも,結果は不正確となる。例外として,手続きがその不正確さ

が結果に影響を与えるほど大きくないと判断した場合には,不正確とならない場合もある。

しかし,それらの判定は,複雑な実装だけで可能である。min 又は max が,正確値・不正

確値の混在する数量を比較するのに用いられ,結果が正確さを失わずに不正確値で示すこ

とができない場合,手続きは実装の制限違反を報告してもよい。

8.5.7.10

加算

    (+ q

1

…)

引数の合計を返却する。すべての引数は,同一の次元でなければならない。結果は,引数と同一の次元

となる。

48

(

+ 3  4)

⇒ 7

(

+ 3)

⇒ 3

(

+)

⇒ 0

8.5.7.11

乗算

    (* q

1

…)

引数の積を返す。結果の次元は,引数の次元の合計となる。

49

(* 4)

⇒ 4

(*)

⇒ 1

8.5.7.12

減算

    (− q

1

 q

2

)

    (− q)

    (− q

1

 q

2

…)

二つ以上の引数では,左から評価した引数の差を返却する。一つの場合,引数の負数を返す。すべての

引数は,同一の次元でなければならない。結果の次元は,引数の次元と同一となる。


48

X 4153 : 1998 (ISO/IEC 10179 : 1996)

50

(

− 3  4)

⇒  −1

(

− 3 4 5)

⇒  −6

(

− 3)

⇒  −3

8.5.7.13

除算

    (/ q

1

 q

2

)

    (/ q)

    (/ q

1

 q

2

…)

二つ以上の引数では,左から引数を評価して商を返却する。一つの場合,1 を引数で割ったものを返す。

結果の次元は,各引数の次元の差となる。

51

(/ 3 4 5)

⇒ 3/20

(/ 3)

⇒ 1/3

8.5.7.14

絶対値

    (abs q)

引数の絶対値を返す。

52

(abs

−7)

⇒ 7

8.5.7.15

整数除算

    (quotient n

1

 n

2

)

    (remainder n

1

 n

2

)

    (modulo n

1

 n

2

)

これらの手続きは,数論的(整数)除算を実装している。正の整数 n

1

及び n

2

に関して,n

3

及び n

4

が,

n

1

n

2

 n

3

n

4

及び 0≦n

4

<n

2

となる整数である場合,次の式が成立する。

(quotient n

1

 n

2

)

⇒  n

3

(remainder n

1

 n

2

)

⇒  n

4

(modulo n

1

 n

2

)

⇒  n

4

整数 n

1

及び n

2

に関して,n

2

が 0 でない場合,次の式が成立する。

(

= n1  (+ (*  n

2

 (quotient

n

1

 n

2

))

 (remainder

n

1

 n

2

)))

⇒ #t

ただし,この計算に関係するすべての数値は,正確値とする。手続き quotient が返す値は,その引数の

生成するものの符号をもつ。手続き remainder 及び手続き modulo は,負の引数において異なる。つまり,

手続き remainder は常に 0 又は商の符号をもつが,手続き modulo は常に除数の符号をもつ。

53

(modulo 13 4)

⇒ 1

(remainder 13 4)

⇒ 1

(modulo

−13 4)

⇒ 3

(remainder

−13 4)

−1

(modulo 13

−4)

−3


49

X 4153 : 1998 (ISO/IEC 10179 : 1996)

(remainder 13

−4)

⇒ 1

(modulo

−13 −4)

−1

(remainder

−13 −4)

−1

(remainder

−13 −4.0)  ⇒

−1.0 ; inexact

8.5.7.16

実数から整数への変換

    (floor x)

    (ceiling x)

    (truncate x)

    (round x)

これらの手続きは整数を返す。

手続き floor は,引数 より大きくない最大の整数を返す。手続き ceiling は,引数 より小さくない最

小の整数を返す。手続き truncate は,引数 の絶対値より絶対値が大きくない最も近い整数を返す。手続

き round は,引数 に最も近い整数を返す。ただし,引数 が二つの整数のちょうど中間の場合には偶数

に丸める。

備考1.  手続き round は,IEEE の浮動小数規格で定められている無指定時丸めモードに従って,偶数

に丸めている。

2.

これらの手続きの引数の一部が不正確数であった場合,結果も不正確数となる。正確値が必

要な場合には,結果を手続き inexact->exact で処理する必要がある。

54

(floor

−4.3)

−5.0

(ceiling

−4.3)

−4.0

(truncate

−4.3)

−4.0

(round

−4.3)

−4.0

(floor 3.5)

⇒ 3.0

(ceiling 3.5)

⇒ 4.0

(truncate 3.5)

⇒ 3.0

(round 3.5)

4.0 ; inexact

(round 7)

⇒ 7

8.5.7.17  e

n

及び自然対数

    (exp x)

    (log x)

手続き exp は,自然対数の底 を引数 によってべき乗した結果を返す。手続き log は,引数 の自然

対数を返す。10 を底とする対数ではない。引数 が 0 又は負である場合には,エラーを発生する。

8.5.7.18

三角関数

    (sin x)

    (cos x)

    (tan x)

手続き sin,手続き cos 及び手続き tan はそれぞれ,引数 の正弦,余弦及び正接を返す。

8.5.7.19

逆三角関数

    (asin x)


50

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    (acos x)

    (atan x)

    (atan q

1

 q

2

)

手続き asin 手続き acos 及び手続き atan はそれぞれ,引数の逆正弦,逆余弦及び逆正接を返す。その結

果は数でなければならない。二つの引数をもつ手続き atan の変形は,実数部に引数 q

2

をもち,虚数部に引

数 q

1

をもつ複素数を返す。引数 q

1

及び引数 q

2

の次元は等しくなければならない。

手続き asin は,−

π

/2

から

π

/2

の範囲の値を返す。手続き acos は,0  から

π

の範囲の値を返す。手続き atan

は,−

π

/2

から

π

/2

の範囲の値を返す。

8.5.7.20

平方根関数

    (sqrt q)

引数 の平方根を返す。引数 の次元は,偶数でなければならない。結果の次元は,引数 の次元の半

分となる。引数 が負の場合,誤りを発生する。

8.5.7.21

指数関数

    (expt x

1

 x

2

)

この関数は,引数 x

1

の引数 x

2

乗を返す。(expt x

1

 0)

は,1 と等しいと定義する。

8.5.7.22

正確値変換

    (exact->inexact q)

    (inexact->exact q)

手続き exact->inexact  は,引数 の不正確値表現を返す。返す値は,数値的に引数に最も近い不正確数

量となる。正確値が適度に近い対応する不正確値をもたない場合,実装の制限違反を報告してもよい。

手続き inexact->exact は,引数 の正確値表現を返す。返す値は,数値的に引数に最も近い正確値数量と

なる。不正確値が適度に近い対応する正確値をもたない場合,実装の制限違反を報告してもよい。

これらの手続きは,実装依存の範囲内で正確値と不正確値との自然な一対一対応を実現する。

8.5.7.23

数量から数値への変換

    (quantity->number q)

引数 が示す数量の数値を返す。

8.5.7.24

数値から文字列への変換

    (number->string number)

    (number->string number radix)

引数 Radix は,正確値整数の 2,8,10 及び 16 のいずれかでなければならない。引数 radix が省略された

場合 10 と解釈する。手続き numbe->string は,数値及び基数を引数にとり,任意の基数をもつ任意の数値

の外部表現形式の文字列として返す。その場合次の式の評価結果が真となる。

(let ((number number)

      (radix radix))

  (equal? number

          (string->number (number->string number

                                          radix)

                          radix)))

この式を評価した結果が真とならない場合は誤りとする。

引数 number が不正確値で,基数が 10 及び上述の式が小数点を含む結果で真であるためには,結果は小


51

X 4153 : 1998 (ISO/IEC 10179 : 1996)

数点を含み,指数と続く 0 を除いて最小の数の数字を用いて表現されている必要がある。それ以外の形式

では,結果は不定となる。

手続き number->string が返す結果は,基数を表す前置子をもつことはない。

備考  引数 number が不正確数であって浮動小数を用いて表現されており,その基数が 10 の場合に,

前述の式は通常小数点を含む結果によって満足する。無限の場合,NaNs の場合及び浮動小数表

現でない場合には,不定となる。

    (format-number n string)

引数 の文字列表現を返す。引数 string は使用する形式を示し,次のいずれかを用いて指定する。

a)

1

の場合,0,1,2,...を用いる。

b) 01

の場合,00,01,02,...を用い,任意の先行する 0 について同様に振る舞う。

c)

a

の場合,0,a,b,c,...z,aa,ab,...を用いる。

d)  A

の場合,0,A,B,C,...Z,AA,AB,...を用いる。

e)

i

の場合,0,i,ii,iii,iv,v,vi,vii,viii,ix,x,...を用いる。

f)

I

の場合,0,I,II,III,IV,V,VI,VII,VIII,IX,X,...を用いる。

    (format-number-list list obj

1

 obj

2

)

引数 list は整数のリストとする。引数 list の文字列表現を返す。引数 obj

1

は各数に使用する形式を指定す

る。それはすべての数に適用する引数 format-number と同形式の一つの文字列又はそれぞれが引数

format-number

と同形式であって,引数 list 内の要素数と同数の文字列から成る文字列のリストとする。引

数 obj

2

は,一つの文字列又は文字列のリストであって,各数を表す文字列の分離子として用いる。それは

一つの文字列又は引数 list の要素数より要素数が 1 だけ少ない文字列のリストとする。

8.5.7.25

文字列から数値への変換

    (string->number string)

    (string->number string radix)

引数 string が表現する最大の正確さをもつ数値を返す。引数 radix は,正確値整数で,2,8,10 及び 16

のいずれかでなければならない。引数 radix が指定された場合でも,例えば,"#o177"のように引数 string

で指定した明示的な接頭辞が優先する。引数 radix が省略された場合は,10 と解釈する。引数 string が構

文上数値として有効でない場合,手続き string->number は,#f を返す。

55

(string->number "100")

⇒ 100

(string->number "100" 16)

⇒ 256

(string->number "1e2")

⇒ 100.0

8.5.8

文字

文字オブジェクトは,文字を現す。

[94]   character

=#\any-character | #\character-name

[95]   character-name

letter ( letter | digit |  −  | . )  +

文字は,#¥文字又は#¥文字名の形式を用いて表記する。その例を次に示す。

a)

#

\a:  小文字の'a'

b)  #

\A:  大文字の'A'

c)

#

\  (:  左丸かっこ

d)  #

\  :  空白類文字


52

X 4153 : 1998 (ISO/IEC 10179 : 1996)

e)

#

\space:  スペースの望ましい表記

#

\文字名の形式で文字がアルファベットの場合,文字名に続く文字はスペース,かっこなどの区切り文

字でなければならない。この規則は,例えば文字列#\space が,空白文字の表現とも#\s に pace が続く表

現とも解釈できるあいまいさを解決する。

文字名は,文字レパートリ宣言で宣言した文字の名前でなければならない。

#

\記法で記述された文字は自己評価的とする。つまり,式の中でクォートする必要はない。

8.5.8.1

文字特性

すべての文字は名前付きの特性をもつ。各特性は無指定時値をもつ。

[96]   character-property-declaration

= ( declare-char-property identifier expression)

この構文は識別子 identifier が文字特性であって,

無指定時値が expression の値に等しいことを宣言する。

[97]   added-char-properties-declaration

= ( add-char-properties keyword-argument-list character+)

[98]   keyword-argument-list

=  (keyword expression)*

構 文 added-char-properties-declaration は , 節 character で 指 定 し た 各 文 字 に 特 性 を 追 加 す る 。 節

keyword-argument-list

は追加する特性を指定する。節 keyword は特性名を指定し,式 expression は特性値を

指定する。各特性は,この規格で事前に定義した特性又は構文 character-property-declaration で明示的に指

定した特性のいずれかとする。

次の文字特性を事前定義とする。

a) numeric-equiv

:

は,等価な数を示す整数又は#f を値とする。無指定時値は,#f とする。

追加特性は,スタイル言語で事前に定義されている。

8.5.8.2

言語依存操作

文字に関する特定の操作,例えば文字の大小変換又は照合は,その文字が用いられている自然言語に依

存する。言語データ型は,言語依存の操作がどのように行われるかを記述する。式はその時点で有効な言

語を考慮して評価できる。有効言語が存在しない場合に,有効言語を要する手続きを呼び出すのは誤りと

する。

文字を操作する幾つかの手続きは文字の大小を無視する。文字の大小を無視する手続きは,-ci(大小無

効の意味)がその名前に埋め込まれている。これらの手続きは,常にその引数が大文字に変換されている

かのように振る舞う。これらの手続きはすべて有効言語を使用する。

    (language? obj)

手続き language?は,引数 obj が言語型の場合に#t を返し,そうでなければ#f を返す。

    (current-language)

計算の任意の場所で有効言語が存在してよい。手続き current-language は,有効言語が存在すれば有効言

語を,そうでなければ#f を返却する。

[99]   default-language-declaration

= (declare-default-language expression)

構文 default-language-declaration は,式の評価において初期値として用いられる有効言語を宣言する。式

は,言語オブジェクトに評価されなければならない。

参考  構文 default-language-declaration は,中核式言語の一部ではない。

    (with-language language proc)

手続き with-language は,引数なしの手続きを言語を有効言語として呼び出す。


53

X 4153 : 1998 (ISO/IEC 10179 : 1996)

8.5.8.2.1

言語定義

[100] language-definition

(define-language variable [[collation-specification? | toupper-specification? | tolower-specification?]])

構文 language-definition は,変数を言語型のオブジェクトとして定義する。

参考  構文 language-definition は,中核式言語の一部ではない。

8.5.8.2.1.1

照合

[101] collation-specification

(collate [[multi-collating-element-specification* | collating-symbol-specification* ]]order-specification)

構文 collation-specification は,文字列の相対順序を決定する。

備考  この照合指定の構文は,ISO 9945-2 : 1993 に基づく。規格には読者の助けとなる例を含む。

[102] multi-collating-element-specification

= (element multi-collating-element string)

[103] multi-collating-element

identifier

二つの文字列を比較する場合,各文字列は照合要素 (collating-element) にまで分割される。各照合要素

は単一の文字か,一つの単位として扱われる一連の文字である。構文 multi-collating-element-specification は,

文字列中で単一の照合要素として扱う一連の文字を宣言する。構文 order-specification では,この照合要素

は複数照合要素識別子  (multi-collating-element)  によって識別できる。複数照合要素識別子として宣言され

た識別子は,重み識別子  (weight-identifier)  として用いられているものとは異なっていなければならない。

[104] collating-symbol-specification

= (symbol weight-identifier)

[105] weight-identifier

identifier

構文 collating-symbol-specification は,重み識別子が構文 order-specification 内で用いることのできる識別

子だと宣言する。

[106] order-specification

= (order sort-rules collation- entry*)

[107] sort-rules

=  (level-sort-rules+)

各構文 order-specification は,複数の異なる比較水準を定義する。二つの文字列が最初の水準で等しい場

合,2 番目の水準で比較が行われる。2 番目の水準で等しい場合,3 番目の水準で比較が行われる。この手

順はすべての水準で比較を行うか,文字列が等しくなくなるまで繰り返す。順序指定の水準の数は,構文

level-sort-rule

の数で決定される。

[108] level-sort-rules

sort-keyword | ((sort-keyword+))

[109] sort-keyword

=forward | backward | position

構文 level-sort-rule は,各水準で文字列をどのように比較するかを定義する。

任意の水準で,比較する文字列中の各照合要素に 0 以上の重みがつけられる。結果として各文字列の順

序付きリストの重みになる。

"backward"

及び "forward" の整列見出しは,その水準での比較方向を決定する。 "backward" の整列見

出しを指定した場合,比較は最後の重みをもったものから最初の重みをもったものへ進む。そうでなけれ

ば,最初から最後に進む。 "position" の整列見出しを指定した場合,比較の際に各重みに対応する整列要

素の位置を考慮する。

異なる位置の二つの重みを比較する場合,比較方向で先行する場所を先に整列する。

同一の整列水準規則では, "forward" 及び "backward" の両者を含んではならない。

[110] collation-entry

= ((collating-element level-weight*)) | weight-identifier | collating-element

各構文 collation-entry は,構文 order-specification 内の位置で決定される重みと関連する。最初の整列項

(collation-entry)

が最も低い重みをもち,2 番目が次に低い重みをもち,以降同様に続く。


54

X 4153 : 1998 (ISO/IEC 10179 : 1996)

整列項が重み識別子の場合,その整列項の効果は重み識別子をその整列に関連する重みを重み識別子と

関連することとする。

整列要素を含む整列項は,次の二つの用途に用いる。

a)

各水準の重み整列要素に割り当てる。

b)

整列要素が重み内で用いられる場合に,整列項と関連する重みを示させる。

水準重みがある水準で指定されなかった場合,

整列項と関連する単一の重みが割り当てられる。

例えば,

#

\a の整列項が (#\a#\a)  の整列項と同等の場合など。

[111] collating-element

character | multi-collating-element | #t

整列要素として#t を使用する場合,整列項を用いて明示的に重みが割り当てられない整列要素すべてに

指定した値を割り当てる。

[112] level-weight

weight | weight-list

[113] weight-list

=  (weight*)

水準重みは,特定の水準に割り当てる重みを指定する。

[114] weight

weight-identifier | multi-collating-element | character | string

文字列の指定は,その文字列が含む文字の並びを指定するのと同じとする。

8.5.8.2.1.2

文字の大小変換

[115] toupper-specification

= (toupper case-conversion-list)

[116] tolower-specification

= (tolower case-conversion-list)

[117] case-conversion-list

= ((character character))*

構文 case-conversion-list では,構文 toupper-specification 又は構文 tolower-specification の文脈に従って,

第一の文字の変換結果として,第二の文字として指定する。

8.5.8.3

文字型判定

    (char? obj)

引数 obj が文字の場合に#t を返し,その他の場合に#f を返す。

8.5.8.4

文字比較判定

    (char=? char

1

 char

2

)

    (char<? char

1

 char

2

)

    (char>? char

1

 char

2

)

    (char<=? char

1

 char

2

)

    (char>=? char

1

 char

2

)

これらの手続きは文字の集合に対して完全順序を規定する。手続き char=?以外の手続きは有効言語を使

用する。

8.5.8.5

大小無視の文字判定

    (char-ci=? char

1

 char

2

)

    (char-ci<? char

1

 char

2

)

    (char-ci>? char

1

 char

2

)

    (char-ci<=? char

1

 char

2

)

    (char-ci>=? char

1

 char

2

)

これらの手続きは,手続き char=?などと似ているが,大文字と小文字とを同じにみなす。これらすべて

の手続きは有効言語を使用する。例えば, (char-ci=? #\A #\a)  は#t を返す。


55

X 4153 : 1998 (ISO/IEC 10179 : 1996)

8.5.8.6

文字の大小変換

    (char-upcase char)

    (char-downcase char)

これらの手続きが返却する,引数 char に対して対応する大文字又は小文字は,有効言語で定義するもの

と同じとする。引数 char が対応する大文字又は小文字をもたない場合,文字を返す。

8.5.8.7

文字特性

    (char-property symbol char)

    (char-property symbol char obj)

手続き char-property は,引数 symbol が示す文字特性の値を返す。シンボルが文字特性でない場合,エラ

ーが発生する。文字が引数 symbol の特性をもたない場合,引数 obj を返す。引数 obj が指定されなかった

ときは,特性の無指定時値を返す。

8.5.9

文字列

文字列は,一連の文字である。

[118] string

="string-element*"

[119] string-element

any-character-other-than-"-or-

|

"|

\\

|

character-name ; ?

文字列は,二重引用符 (") で囲まれた一連の文字で表す。文字列中に表記する二重引用符は,逆スラッ

シュ  (\)  で抑制することによって次のように表記できる。

    "The word \"recursion\" has many meanings."

逆スラッシュは,文字列中で他の逆スラッシュによって抑制することによって表記できる。文字列中の

任意の文字は,逆スラッシュに続けてその名前を表記することによって示すことができる。名前はその文

字列中で続く文字がないか又は続く文字が文字クラス subsequent でない場合以外は,セミコロンで区切ら

なければならない。個々で用いる名前は,文字の#\構文で用いるものと同じとする。

文字列定数は一つのレコードから次のレコードに続いてよく,その場合実体中に二つのレコードを分割

する文字を含むこととなる。

文字列の長さは,その文字列が含む文字の個数である。この個数は文字列が生成されたときに確定する

非負整数である。文字列の有効な指標は,非負の正確値整数で,文字列の長さ未満のものである。文字列

の最初の文字は指標 0 で,2 番目は 1 で,以降同様の指標で参照する。

指標 start で始まり,指標 end で終わる文字列の文字などの句では,指標 start は含まれ,指標 end は含

まれないとする。したがって,start 及び end が同じ指標を示す場合,長さ 0 の部分文字列が参照されてい

る。start が 0 で end が文字列の長さの場合,文字列全体が参照されている。

文字列を操作する幾つかの手続きは,操作前に文字列を大文字に変換することによって文字の大小の違

いを無視する。文字の大小を無視する場合の手続きは,その名前に'-ci'(大小を区別しないの意味)を埋め

込まれている。

8.5.9.1

文字列型判定

    (string? obj)

引数 obj が文字列の場合#t を返し,その他の場合に#f を返す。

8.5.9.2

文字列生成

    (string char ...)

一連の引数から成る文字列を返す。


56

X 4153 : 1998 (ISO/IEC 10179 : 1996)

8.5.9.3

文字列長

    (string-length string)

引数 string の文字数を返す。

8.5.9.4

文字列アクセス

    (string-ref string k)

引数 は,引数 string の有効な指標でなければならない。手続き string-ref は,0 を起点とする引数 k を

指標として用い,引数 string の文字を返す。

8.5.9.5

文字列等価性

    (string=? string

1

 string

2

)

    (string-ci=? string

1

 string

2

)

二つの文字列が同じ長さで,同じ文字を同じ位置にもつ場合に#t を返し,その他の場合に#f を返す。手

続き string-ci=?  は,文字の大小を無視するが,手続き string=?  は文字の大小を区別する。手続き string-ci

=?  は,有効言語を使用する。

    (string-equiv? string

1

 string

2

 k)

二つの文字列が,現言語の照合指定において,最初から引数 が示す数の比較水準において同一の場合

に#t を返し,その他の場合に#f を返す。ここで引数 k は正でなければならない。

8.5.9.6

文字列比較

    (string<? string

1

 string

2

)

    (string>? <string

1

 string

2

)

    (string<=? string

1

 string

2

)

    (string>=? string

1

 string

2

)

    (string-ci<? string

1

 string

2

)

    (string-ci>? string

1

 string

2

)

    (string-ci<=? string

1

 string

2

)

    (string-ci>=? string

1

 string

2

)

これらの手続きは,文字の順序付けに対応する辞書順の文字列への拡張である。例えば,手続き string<?

は,手続き char<?の文字に対する順序付けによって,文字列を辞書順を順序付ける。二つの文字列の長さ

が異なり,短い方の長さまでの文字が同じであった場合,短い方の文字列が長い方より辞書順で小さいと

みなす。これらの手続きは現言語を使用する。

8.5.9.7

部分文字列抽出

    (substring string start end)

引数 string 内の引数 start(その指標位置含む。

)で始まり,引数 end(その指標位置含まない。

)で終わ

る文字から成る文字列を返す。

8.5.9.8

文字列の付加

    (string-append string ...)

与えられた文字列を連結した文字列を生成して返す。

8.5.9.9

文字列とリストとの間の変換

    (string->list string)

    (list->string chars)

手続き string->list は,文字列を構成する文字から成るリストを返却する。手続き list->string は,引数 chars


57

X 4153 : 1998 (ISO/IEC 10179 : 1996)

が示す文字のリスト中の文字から成る文字列を返却する。手続き string->list 及び手続き list->string は,手

続き equal?の観点において逆変換となる。

8.5.10

手続き

8.5.10.1

手続き型判定

    (procedure? obj)

引数 obj が手続きの場合に#t を,その他の場合に#f を返す。

56

(procedure? car)

⇒ #t

(procedure? 'car)

⇒ #f

(procedure? (lambda (x) (* x x)))

⇒ #t

(procedure? ' (lambda (x) (* x x)))

⇒ #f

8.5.10.2

手続き適用

    (apply proc args)

    (apply proc arg

1

 ... args)

引数 proc は手続きであって,引数 args はリストでなければならない。最初の(基本の)形式は,実際

の引数として引数 args の要素をもつ手続き proc を呼び出す。2 番目の形式は,最初のものを一般化したも

ので,式 (append (list arg

1

 ...)args) 

が返すリストの要素を実際の引数として引数 proc を呼び出す。

57

(apply

+ (list 3 4))

⇒ 7

(define compose

  (lambda (f g)

    (lambda args

      (f (apply g args)))))

((compose sqrt *) 12 75)

⇒ 30

8.5.10.3

リスト間対応手続き

    (map proc list

1

 list

2

 ...)

引数 lists はリスト,引数 proc は list と同じ数の引数を取る手続きでなければならない。一つ以上の引数

lists

が与えられた場合,それらはすべて同じ長さでなければならない。手続き map は,引数 proc を引数 lists

の要素一つずつに適用し,右から左に連結した結果のリストを返す。

58

(map cadr '((a b) (d e) (g h)))

(b e h)

(map (lambda (n) (expt n n))

      '(1 2 3 4 5))

(1 4 27 256 3125)

(map

+ '(1 2 3) '(4 5 6))

(5 7 9)

8.5.10.4

外部手続き

    (external-procedure string)

手続き external-procedure は,引数 string を公開識別子とする外部手続きの手続きオブジェクトを返す。

処理系が外部手続きを見いだせない場合,#f を返却する。手続きオブジェクトに渡された引数は,外部手


58

X 4153 : 1998 (ISO/IEC 10179 : 1996)

続きに引き渡たされる。引数の数又は型が,外部手続きの期待するものと異なる場合には,エラーを発生

してよい。手続きオブジェクトを呼び出すことで外部手続きの実行結果が得られる。外部手続きは,副作

用無しの方が望ましい。実装はそのように仮定してよい。それらの手続きは,処理系から情報を得るため

に用い,処理系の状態を変えるために使うことを推奨しない。

8.5.11

日付及び時間

    (time)

    (time->string k)

    (time->string k boolean)

手続き time は,1970 年 1 月 1 日午前 0 時 0 分 0 秒 (GMT) から経過した秒数を整数として返す。手続き

time->string

は,手続き time が返す日付及び時間の整数表現を ISO 8601 の形式の文字列に変換する。

引数 boolean が存在し,それが真の場合,文字列表現は GMT に基づくものとなり,その他の場合に現地

時間を示す。

    (time<? string

1

 string

2

)

    (time>? string

1

 string

2

)

    (time<=? string

1

 string

2

)

    (time>=? string

1

 string

2

)

これらの手続きは,

ISO 8601

形式で日付及び時間を表現する文字列の集合に全順序を与える。

引数が ISO 

8601

形式の日付又は時間を表現しなければ,エラーとする。

8.5.12

誤り発生

    (error string)

手続き error は,エラーを発生する。引数 string はエラーを詳述する。エラーが発生した場合の処理系の

挙動は,処理系定義とする。特に,エラーを利用者に報告する様式は処理系定義とする。しかし,引数 string

はエラー報告に使用し,エラーが発生した文脈を説明するのが望ましい。手続き error は,値を返さない。

8.6

中核式言語

中核式言語と呼ぶ,式言語の部分集合を 8.6 において規定する。中核式言語においては,8.6 の規則に従

う式及び定義だけが利用でき,8.6 の原型をもつ手続きだけが利用可能となる。中核式言語において有効で

あるすべての式又は定義は,完全仕様式言語におけるその意味と同じ意味をもつ。

8.6.1

構文

[120] expression

primitive-expression | derived- expression

[121] primitive-expression

variable-reference | literal | procedure-call | conditional

[122] variable-reference

variable

[123] variable

identifier

[124] literal

quotation | self-evaluating

[125] quotation

=  'datum | (quote datum)

[126] datum

simple-datum | list

[127] simple-datum

boolean | number | character | string | symbol | keyword | glyph-identifier

[128] list

=  (datum*) | 'datum

[129] self-evaluating

boolean | number | character | string | keyword | glyph-identifier

[130] procedure-call

=  (operator operand*)

[131] operator

expression


59

X 4153 : 1998 (ISO/IEC 10179 : 1996)

[132] operand

expression

[133] conditional

= (if test consequent alternate)

[134] test

expression

[135] consequent

expression

[136] alternate

expression

[137] derived-expression

cond-expression | case-expression | and-expression | or-expression

[138] cond-expression

= (cond cond-clause+) | (cond cond-clause* (else expression))

[139] cond-clause

=  (test expression)

[140] case-expression

= (case keycase-clause+) | (case keycase-clause* ( else expression))

[141] key

expression

[142] case-clause

= ((datum*) expression)

[143] and-expression

= (and test*)

[144] or-expression

= (or test*)

[145] definition

= (define variable expression)

8.6.2

手続き

    (not obj)

    (boolean? obj)

    (equal? obj

1

 obj

2

)

    (null? obj)

    (list? obj)

    (list obj ...)

    (length list)

    (append list ...)

    (reverse list)

    (list-tail list k)

    (list-ref list k)

    (member obj list)

    (symbol? obj)

    (keyword? obj)

    (quantity? obj)

    (number? obj)

    (real? obj)

    (integer? obj)

    (= q

1

 q

2

 q

3

 ...)

    (< q

1

 q

2

 q

3

 ...)

    (> q

1

 q

2

 q

3

 ...)

    (<= q

1

 q

2

 q

3

 ...)

    (>= q

1

 q

2

 q

3

 ...)

    (max q

1

 q

2

 ...)

    (min q

1

 q

2

 ...)


60

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    (+ q

1

 ...)

    (* q

1

 ...)

    (− q

1

 q

2

)

    (− q)

    (/ q

1

 q

2

)

    (/ q)

    (abs q)

    (quotient n

1

 n

2

)

    (remainder n

1

 n

2

)

    (modulo n

1

 n

2

)

    (floor x)

    (ceiling x)

    (truncate x)

    (round x)

    (sqrt q)

    (number->string number)

    (number->string number radix)

    (string->number string)

    (string->number string radix)

    (char? obj)

    (char=? char

1

 char

2

)

    (char-property symbol char)

    (char-property symbol char obj)

    (string? obj)

    (string char ...)

    (string-length string)

    (string-ref string k)

    (string=? string

1

 string

2

)

    (substring string start end)

    (string-append string ...)

    (procedure? obj)

    (apply proc args)

    (external-procedure string)

    (time)

    (time->string k)

    (time->string k boolean)

    (error string)

9.

グローブ

グローブは,ノードの集合であって,グローブ設計に従って構築する。グローブ内の各ノードは,グロ


61

X 4153 : 1998 (ISO/IEC 10179 : 1996)

ーブ設計内の名前付きクラスに属する。ノードは,特性割当ての集合であって,各特性割当ては特性名及

び特性値から成る。

グローブ設計は,クラスの集合を定義し,各クラスに関して特性の順序集合を定義する。

ノードの各特性割当てに対して,ノードのクラスに対応した特性が一つだけ存在し,その特性の名前は

特性割当ての名前部分と同じになる。これを,特性割当ての特性と呼ぶ。その特性割当ての値部分は,特

性割当の特性の値と呼ぶ。ノードに特性割当てが存在し,その特性が であって,その値部分が である

場合に,ノードはその特性 に関して値 を開示するという。ノードが値を開示する特性をそのノードの

特性と呼ぶ。

クラスの特性の順序は,そのクラスのノードに関して,対応する特性割当ての順序を決定する。

すべての特性値は,データ型をもつ。特性の定義は,特性の値に対して可能になる特定の特性のデータ

型を宣言する。このデータ型を,その特性の宣言データ型と呼ぶ。

論理型,文字列型などの単純な抽象データ型に加え,ノード型  (nodal)  と総称する三つの特別なデータ

型が存在する。それらの値は,複数のノード又は複数のノードリストとなる。これらは,9.3.3 において規

定する。

特性の定義は,特定の状況においては,宣言データ型の値ではなく,ヌル値を特性がもつことを許容す

る。このヌル値は,データ型 null の一意オブジェクトとする。データ型 null は,宣言データ型としては使

用できない。

9.1

ノード型 (nodal) 特性

クラスの特性は,下位ノード  (subnode)  特性であってよい。下位ノード特性の宣言データ型はノード型

でなければならない。

ノードが下位ノード特性の値を開示している場合,

その特性値のすべてのノードは,

その値を開示しているノードと同じグローブに存在する。グローブ中のノードの下位ノード特性の値は,

グローブのすべてのノードをラベル付きの枝によって 1 本の木に接続しているとみることができる。詳細

を次に示す。

a)

どのグローブにおいても,グローブ根と呼ぶ一意ノードがあり,それはノードの下位ノード特性の値

には出現しない。

b)

グローブ根以外のすべてのノード に対して,一意ノード があり,次の両方を満たす一意な特性 p

が存在する。

1)

特性 が,下位ノード特性と宣言されている。

2)

ノード が,特性 に関してノード そのもの,又はノード を含む値を開示している。

ここでノード をノード の起点と呼び,特性 をノード の起点下位ノード関係と呼ぶ。

c)

根以外のすべてのノード に関して,m

1

をグローブ根とし,m

k

をノード とした場合に,1<i<k-1 

範囲のすべての に関して m

i

が m

i

1

の起点となる,ノード列 m

1

m

2

,...m

k

が存在する。

この木を,下位ノード木と呼ぶ。ノードのすべての子どもが,そのノードの単一の特性の値の一部とし

て出現する下位ノード木の部分木を,応用が扱うことは有用となる場合が多い。この目的で,クラスの特

性の一つを,そのクラスの子ども特性として区別する。これは,特性をそのクラスの内容特性とすること

によって,間接的に実現されている。内容特性のデータ型がノード型の場合,子ども特性となる。その他

の場合には,そのデータ型の基本データ型は文字型又は文字列型でなければならず,そのノードのデータ

特性となる。ノードに関連して使用した場合,子どもという用語は,子ども特性の値として出現するノー

ドを指す。子ども特性をもつノードのデータは,ノードの各子のデータを,特性 data-separator で区切った

ものとなる。あるノードの起点が子ども特性をもち,その値の中にそのノードが含まれている場合,その


62

X 4153 : 1998 (ISO/IEC 10179 : 1996)

ノードは親をもつ。ノードが親をもつ場合,それは,ノードの起点と同一となる。修飾なしの木という用

語は,この親子関係で形成される木を示す。ノードの祖先は,そのノードの親とその祖先とで構成される。

ノード の木根は,ノード が祖先をもたない場合はそのものであり,その他の場合には,ノード の祖

先であって,それ自体は祖先をもたないノードとなる。ノードの兄弟は,グローブ根に関しては空集合と

する。それ以外の場合は,そのノードの起点の起点下位ノード関係特性の値のノード集合からそのノード

自体を除いたものとする。

備考  起点下位ノード関係特性はその起点の子ども特性である必要はないので,ノードは親がなくて

も兄弟をもつことがある。

ノードの部分木は,そのノードとその子どもの部分木とから成る。ノードの子孫は,そのノードの子ど

もの部分木とする。すべてノードの部分木内のノード集合に関して,木の順序と呼ぶ全順序を定義する。

この順序は,ノードをその子どもより先に訪れる木の行き掛け順に対応する。

ノード型を宣言データ型にもち,下位ノード特性ではない特性には次の二つの場合がある。

a)

その特性が内部参照ノード  (irefnode)  の場合。この特性に関しては,その値の中のノードは,その値

を開示するノードと同じグローブに存在しなければならない。下位ノード特性及び内部参照ノード特

性は,グローブ中のすべてのノードを結び,単一の有向グラフとする。その特性の名前は,そのグラ

フの弧をラベル付けするとみなしてよい。

b)

その特性が無制限参照ノード  (urefnode)  である場合。この特性に関しては,その値の中のノードは,

その値を開示するノードとは別のグローブに存在してもよい。したがって,下位ノード特性,内部参

照ノード特性及び無制限参照ノード特性は,

複数のグローブのノードを結んで,一つのグラフとする。

結ばれたグローブの集合をハイパグローブと呼ぶ。

9.2

グローブ設計

グローブ設計は,特性集合からのクラスの選択及び特性の選択を指定する。特性集合は,9.3 に示すとお

りに,SGML で表現した特性集合定義を用いて定義する。

グローブへの任意の入力に関して,特性集合は完全グローブを決定する。完全グローブは,特性集合か

らすべてのクラス及び特性を選択したグローブ設計を使用して作成される。

備考  完全グローブは,構文解析系がグローブの入力に関して入手可能にできるすべての情報を含む。

どの特定応用に関しても,この情報の多くは重要ではない。グローブ設計は,応用が必要な情

報だけを含むグローブを得る手段を提供する。

グローブ設計から構築されるグローブは,完全グローブを次の方法で修正することによって得られるグ

ローブと同じでなければならない。

a)

ノードの部分グローブに印を付ける。最初にそのノード自体に印を付ける。次に,各下位ノード特性

に関して,グローブ設計にその下位ノード特性が含まれる場合,その値の各ノードのうち,そのクラ

スがグローブ設計に含まれているノードの部分グローブに印をつける。グローブに含めるノードは,

グローブ根の部分グローブに印を付けることで決定できる。この方法で印を付けたノードだけを,構

築したグローブに含める。

b)

構築したグローブの中のノードは,そのグローブに含めると指定した特性の値だけを開示する。

c)

完全グローブの中のノードが,内在特性の値を開示し,その値の意味が,そのノードの開示する非内

在特性の名前であって,その非内在特性がグローブ設計に含まれない場合,構築したグローブのノー

ドは,その内在特性の値に関してヌル値を開示しなければならない。

d)

完全グローブの中のノードが,内在特性の値を開示し,その内在特性の値の意味が,そのノードが開


63

X 4153 : 1998 (ISO/IEC 10179 : 1996)

示する非内在特性の名前リストであって,その非内在特性がグローブ設計に含まれない場合,構築し

たグローブのノードは,完全グローブの値からグローブ設計に含まれないすべての非内在特性の名前

を除外して得られた内在特性の値を開示しなければならない。

e)

完全グローブのノードが,宣言データ型がノード型の内部参照ノード特性の値を開示するが,その特

性の値に構築するグローブへの取込みのために印を付けられていない場合,構築したグローブ内のそ

のノードは,その特性に対してヌル値を開示しなければならない。

f)

完全グローブのノードが,宣言値が抽象データ型 nodelist 又は抽象データ型 nmndlist をもつ内部参照

ノード特性に関して値を開示する場合,構築したグローブに含めると印を付けられていない,すべて

のノードを完全グローブから除外することによって,構築したグローブにおける値が得られる。

9.3

特性集合定義

特性集合定義は,JIS X 4155 の特性集合定義に対する要求事項の中で完全に記述している。9.3 は,この

規格の理解に必要な詳細だけ説明した簡易版を提供する。

最上位レベルの要素を要素 propset とする。属性 psn 及び属性 fullnm は,短い SGML 名及び長い記述名

を指定する。特性集合の様々な場所で,次の要素が出現可能である。

a)

要素 desc は,それが出現する要素が定義するオブジェクトの説明を含む。

b)

要素 note は,定義するオブジェクトに関する注釈を含む。

9.3.1

共通属性

9.3.1.1

構成要素名

クラス名,特性名,列挙値名は単一の文字列ではなく,三つ組みの文字列とする。その中の各文字列は,

それぞれ異なる文脈において適切な名前となっている。

a)

参照具象構文名(RCS 名)は,SGML 参照具象構文において有効な名前が必要な文脈での使用にふさ

わしい。

b)

応用名は,プログラム言語又はスクリプト言語における識別子としての使用にふさわしい名前を指定

する。応用名は空白類文字で分割される複数の語を含んでよい。複数の語から成る識別子について,

言語ごとの通常の規則に従って,その名前は,それを使う言語の有効な識別子に変換されなければな

らない。例えば, “processing instruction” という応用名は,プログラム言語に対応させた場合,その

言語に応じて “ProcessingInsruction” , “processing-instruction” 又は “PROCESSING_INSTRUCTI0N”

となる。

c)

完全名は,支援文書における使用にふさわしい省略無しの名前とする。

三つの部分から成るこれらの名前を構成要素名と呼ぶ。

これらの三つの名前は次の属性によって指定する。

a)

属性 rcsnm は,特性の RCS 名を指定する。

b)

属性 appnm は,特性の応用名を指定する。この無指定時値は RCS 名とする

c)

属性 fullnm は,特性の完全名を指定する。この無指定時値は応用名とする。

9.3.1.2

規格文書

特性集合内で出現する様々な要素は,規格文書の中の構成要素を参照することによって定義を行う。こ

れらの要素は,次の共通属性を使用する。

a)

属性 sd は,規格文書を指定する。この無指定時値は SGML とする。公式には,その値は記法名とす

る。他の指定可能な値には,JIS X 4155 の一般機能を表す GenFac 及び DSSSL がある。

b)

属性 clause は,規格文書における適用可能な節を指定する。SGML の場合には,これは ISO/IEC 13673


64

X 4153 : 1998 (ISO/IEC 10179 : 1996)

の記法を使用する。

9.3.2

モジュール

特性集合定義は,要素 psmodule  が記述する名前付きモジュールに分割できる。その属性は次の意味を

もつ。

a)

属性 rcsnm は,モジュールの RCS 名を与える。

b)

属性 fullnm は完全名を与える。

c)

属性 dependon は,このモジュールが依存しているモジュールの名前をリストする。

d)

属性 required は,モジュールが必す(須)かどうか,つまり,すべてのグローブ設計に含まれるべき

かどうかを指定する。属性値 required  は,それが必す(須)であること,属性値 nrequire  は必す(須)

ではないことを意味する。無指定時値は属性値 nrequire  とする。

グローブ設計にあるモジュールを含めることは,グローブ設計に次の a)b)を含めることと等価となる。

a)

モジュール内で定義したすべてのクラス及び特性。

b)

モジュールが依存しているすべてのモジュール及び再帰的にそれらが依存しているすべてのモジュー

ル。

特性集合において定義されているモジュールに加え,この規格で定義されている内在モジュールが数多

くあり,これらは自動的にすべての特性集合の一部となる。内在モジュールで定義されている特性は,内

在特性と呼ぶ。内在モジュールは,すべての非内在モジュールより前に出現するものとして扱う。

9.3.3

データ型定義

すべてのデータ型は,要素 datadef で定義する。属性は次の意味をもつ。

a)

属性 rcsnm は,データ型の RCS 名を与える。

備考  特性集合を,あるプログラム言語又はスクリプト言語で使用する場合,各抽象データ型は,そ

の言語によって提供されるデータ型の一つに明示的に結びつけられなければならないので,デ

ータ型に対する応用名はない。

b)

属性 fullnm は,データ型の完全名を与える。

c)

属性 nodal は,データ型がノード型か否かを指定する。指定可能な値には属性値 nodal 又は属性値

nonnodal

とし,無指定時値を属性値 nonnodal とする。

d)

属性 listof は,データ型は他のデータ型の順序リスト又は配列であって,他のデータ型を属性の値と

して指定する場合に,データ型の意味の公式な指定を可能とする。

e)

属性 super は,定義済みのデータ型の間において,型階層の指定を可能とする。属性値は,上位の型

の名前のリストとする。

データ型の基本データ型は,上位の型が無い場合,そのデータ型そのものであり,その他の場合,上位

の型の基本データ型とする。

幾つかのデータ型を次の内在モジュールにおいて定義する。

    <psmodule rcsnm=intrdt fullnm= "intrinsic data types" required>

    <datadef rcsnm=node nodal>

    <desc>

    単一ノード

    <datadef rcsnm=nodelist listof=node nodal>

    <desc>

    0 個以上のノードの順序付きリスト


65

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <datadef rcsnm=nmndlist fullnm= "named node list" super=nodelist nodal>

    <desc>

ノードが,その特性の一つの値である名前によってそのノードリスト内で一意に識別できるノードリス

トとする。名前付きのノードリストは,その中のノードの各クラスに対して,文字列をそのデータ型とし,

その値がその名前付きノードリスト内でのそのクラスに属するノードの名前として働く特性を識別する。

加えて,名前付きノードリストは,その中のノードの各クラスに対して,名前空間所在番地付けの過程で

そのクラスのノードの名前と文字列を比較する前に,その文字列に適用する正規化規則をも識別する。

    <datadef rcsnm=enum fullnm=enumeration>

    <desc>

列挙値と呼ぶ,値の列挙集合の一つを表現するデータ型に使用する。使用できる列挙値はデータ型 enum

が使用される文脈において定義する。

    <datadef rcsnm=char fullnm=character>

    <datadef rcsnm=string listof=char>

    <datadef rcsnm=integer>

    <datadef rcsnm=intlist fullnm= "integer list" listof=integer>

    <datadef rcsnm=strlist fullnm= "string list" listof=string>

    <datadef rcsnm=compname fullnm= "component  name">

    <desc>

構成要素名。つまり,三つの変数をもつ名前,RCS 名,応用名及び完全名。

    <datadef rcsnm=cnmlist fullnm= "component name list" listof=compname>

    </psmodule>

9.3.4

クラス定義

クラスは,要素 classdef  によって定義する。構成要素名属性及び指定文書属性に加え,次の属性が指定

可能とする。

a)

属性 conprop は,もしあればクラスの内容特性を識別する。

b)

属性 dsepprop は,クラスのデータ分離子特性を識別する。クラスは子ども特性(つまり,ノード内容

特性)をもつ場合だけデータ分離子識別子をもてる。

c)

属性 mayadd  は,変換言語における検証対応の定義に使用されるクラスの区分を識別する。11.4.1 

参照のこと。この属性では,属性値 mayadd だけを指定可能とする。この属性の属性名は省略可能と

する。

9.3.5

特性定義

特性は,要素 propdef を用いて定義する。構成要素名属性及び指定文書属性に加え,次の属性を指定可

能とする。

a)

属性 cn は,この特性が属するクラスを指定する。要素 propdef が要素 classdef  の中に出現する場合,

特性はそのクラスに属する。それ以外の場合,属性 cn を用いてクラス名を指定しなければならない。

属性値#all は,それがノードのすべてのクラスに属することを意味し,属性値#grove は,グローブ根

ノードに属することを意味する。

b)

属性 datatype は,要素 datadef の定義どおり,データ型の RCS 名を指定する。

c)

属性 ac は,特性の値に出現可能なクラスを指定する。これは,データ型がノード型である場合だけに

適用する。無指定時値では,任意のクラスが値に出現可能とする。


66

X 4153 : 1998 (ISO/IEC 10179 : 1996)

d)

属性 acnmprop は,データ型が型 nmndlist の場合に適用でき,特性値内において出現可能な各クラスに

対して,名前付きノードリストにおいてそのクラスのノードの名前として働く特性名を指定する。属

性 ac 内の各クラスに,一つずつ特性名がなければならない。

e)

属性 strnorm は,値に適用する文字列正規化規則を指定する。文字列正規化規則は,データ型が文字

列,文字列のリスト又は上位型に文字列をもつ場合に適用する。各文字列正規化規則は要素 normdef

を用いて定義する。

備考  参照具象構文を使用する場合に,SGML が行う共通名の大文字への代替は,文字列正規化の例

である。

f)

属性 noderel は,その特性が下位ノード特性,内部参照ノード特性又は無制限参照ノード特性のいずれ

であるかを示し,属性値 subnode,属性値 irefnode,属性値 urefnode でそれぞれ指定する。この属性は,

データ型がノード型である場合にだけ適用する。この属性の属性名は,通常省略する。

g)

属性 vrfytype  は,変換言語の検証対応を定義のために,特性を派生,オプション,その他に区分し,

それぞれ属性値 derived,属性値 optional,属性値 other で表現する。11.4.1 を参照のこと。無指定時値

は,属性値 other とする。特性集合では,完全グローブの中のノードが,宣言データ型として nodelist

又は nmndlist をもち,属性 vrfytype が属性値 optional をもつ特性に関して,空の値を許容してはなら

ない。

備考  ノードがそのような特性に対して null 値を開示する可能性はある。

h)

属性 strlex は,字句解析型を指定する。値は要素 lexdef で定義した字句解析型となる。特性の字句解

析型は,この規格では使用しない。字句解析型の意味は,JIS X 4155 において定義する。

要素 propdef は,要素 desc 及び要素 note に加え,次の型の下位要素をもてる。

a)

要素 when は,そのノードが値を開示する条件及び宣言データ型を指定する。この条件が満たされな

い場合,ノードはこの特性に対して null 値を開示しなければならない。

b)

要素 enumdef は,データ型 enum の場合に可能な列挙値を定義する。構成要素名属性だけをもつ。

9.3.6

正規化規則定義

文字列正規化規則は,要素 normdef によって定義する。要素 normdef は,属性 rcsnm 及び規格文書属性

をもつ。

9.4

内在特性

次のモジュールは,すべてのノードに適用する内在特性を定義する。

    <psmodule rcsnm=intrbase fullnm= "intrinsic base" required>

    <propdef cn= "#all"  rcsnm=classnm appnm= "class name" datatype=compname>

    <desc>

    ノードのクラス名。

    <propdef cn= "#all"  rcsnm=grovroot appnm= "grove root" datatype=node

irefnode>

    <propdef cn= "#all"  rcsnm=subpns appnm= "subnode property names"

    datatype=cnmlist>

    <desc>

    ノードが開示する,属性 noderel が属性値 subnode の特性すべての名前。

    <propdef cn= " #all " rcsnm=allpns appnm= "all property names" datatype=

cnmlist>


67

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <desc>

    ノード開示するすべての特性の名前。

    <propdef cn= "#all"  rcsnm=childpn appnm= "children property name"

    datatype=compname>

    <desc>

    子を表す特性の名前。

    <when>

    クラスが子を表す特性をもつ場合。

    <propdef cn= "#all"  rcsnm=datapn appnm= "data property name" datatype=

compname>

    <when>

    クラスがデータ特性をもつ場合。

    <propdef cn= "#all"  rcsnm=dseppn appnm= "data sep property name"

    fullnm= "data separator property name" datatype=compname>

    <when>

    クラスがデータ分離特性をもつ場合。

    <propdef cn= "#all"  rcsnm=parent datatype=node irefnode>

    <when>

    ノードが親をもつ場合。

    <propdef cn= "#all" rcsnm=treeroot appnm= "tree root" datatype=node irefnode>

    <note>

    ノードのこの特性は,そのノードが親をもたない場合には,ノード自体とする。

    </note>

    <propdef cn= "#all"  rcsnm=origin datatype=node irefnode>

    <when>

    ノードがグローブ根ではない場合。

    <propdef cn= "#all"  rcsnm=otsrelpn appnm= "origin-to-subnode rel property

name"

    fullnm= "origin-to-subnode relationship property name" datatype=compname>

    <when>

    ノードがグローブ根ではない場合。

    </psmodule>

    <psmodule rcsnm=intrhy fullnm= "intrinsic  hytime">

    <datadef rcsnm=grovepos appnm= "grove position" strlex=GROVEPOS>

    <desc>

    各要素が,次のいずれかとなるリスト。

a)

整数。

b)

構成要素名及び文字列から成る対。

c)

構成要素名及び整数から成る対。

d)

構成要素名。


68

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <propdef cn= "#all"  rcsnm=grovepos appnm= "grove position" sd=GenFac

    datatype=grovepos>

    <desc>

    グローブ内のノードの位置。

    <propdef cn= "#all"  rcsnm=treepos appnm= "tree position" sd=GenFac

    datatype=intlist

    strlex= "marker+">

    <desc>

    木の中におけるノードの位置を体系形式 treeloc で表したもの。

    <propdef cn= "#all"  rcsnm=pathpos appnm= "path position" sd=GenFac

    datatype=intlist

    strlex= "(marker,marker) +">

    <desc>

    その木の中におけるノードの位置を体系形式 pathloc で表したもの。

    </psmodule>

    <propdet cn= "#grove" rcsnm=ptreert appnm=    "principal tree root" sd=GenFac

    datatype=node

    irefnode>

9.5

補助グローブ

応用依存の方法で,ノードをグループ化すると便利な場合がある。これは,グローブ内のノードを入力

として用いて更に解析を行う,補助解析によって実現する。補助解析で生成されたグローブは,補助グロ

ーブと呼ぶ。補助グローブの生成に使用したグローブは,補助グローブの入力グローブと呼ぶ。補助グロ

ーブの各ノードは,属性 noderel の値が属性値 urefnode となる内在特性 source をもち,その特性は入力グ

ローブにおいて派生元となったノードを指す。

    <propdef cn= "#all'  rcsnm=source datatype=nodelist urefnode sd=DSSSL>

9.6

SGML

特性集合

SGML

の特性集合は次のとおりとする。

    <!-- SGML Property Set -->

    <!doctype propset public "ISO/IEC 10744:1993/DTD Property Set//EN"

    "sgmlprop. dtd">

    <propset psn= "sgmlprop"  fullnm= "SGML Property Set">

    <desc>

SGML

文書を解析して,グローブ構築のために使用するクラス及び特性を定義する。

クラス及び特性を次のとおりに分類する。

a)

抽象又は SGML 文書文字列 (SDS)

b) SGML

宣言,文書 prolog 又は文書インスタンス

c)

データタグ,ランク,短縮参照,連結,副文書,公式公開識別子のサポートだけに必要なもの

ESIS

は,baseabs(基本抽象モジュール)

,prlgabs0(前書き抽象モジュール 0)及び instabs(インスタン

ス抽象モジュール)の組合せにほぼ対応する。

    </desc>


69

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <!--Note:

項番は,ISO/IEC 13673 の 6.3 に規定の規則に適合する。その規則は,ISO 8879 の構成要素を適合性検証

試験において,どのように識別するかを定義する。第一の数又は文字は,節を表す。この文書では,文字

は 16 進数を示す。第二の数又は文字は,副節を表す。第三の数又は文字は副々節を表す。第四の数又は文

字は副々々節を表す。最後の数又は文字は,段落番号を表す。この場合に,生成規則,注,リスト項目は

すべて独立した段落と数える。ただし,図を参照する場合には,節,副節,副々節を,FIG に置き換え,

副々々節は,図番号で置き換える。

ISO/IEC 13673

の拡張として,第 4 節の副節は,4xxxy の形式で参照する。この場合,xxx は十進の副節

番号とし,y は通常どおり段落番号とする。

-->

<--基本抽象クラス及び特性-->

    <psmodule rcsnm=baseabs fullnm= "base  abstract">

    <classdef rcsnm=sgmldoc appnm= "sgml document" clause= "62001">

    <desc>

解析済み SGML 文書又は副文書であって,グローブの根となる。

    <propdef subnode rcsnm=sgmlcsts appnm= "sgml constants" datatype=node

    ac=sgmlcsts clause= "41170  41180">

    <propdef rcsnm=appinfo appnm= "application  info"

    fullnm= "application information" datatype=string strlex=mindata

    clause= "d6001">

    <desc>

SGML

宣言が提供する応用情報

    <when>

文書/副文書に適用する SGML 文書の APPINFO パラメタの値として,リテラルが指定された場合。

    <propdef subnode rcsnm=prolog datatype=nodelist

    ac= "doctpdcl lktpdcl comdcl pi ssep" cn=sgmldoc clause= "71001">

    <propdef subnode rcsnm=epilog datatype=nodelist ac= "comdcl pi ssep"

    cn=sgmldoc clausu "71002">

    <desc>

文書インスタンスに続く他の前書き。

    <classdef rcsnm=sgmlcsts appnm= "sgml constants" clause= "b6004  c2101">

    <desc>

すべての SGML 文書に内在し,選択されたノードを保持しておく器。他の場所で内部参照ノード

(irefnode)

として必要な可能性がある。

    <note>

モジュール srabs(短縮参照抽象モジュール)又はモジュール linkabs(連結抽象モジュール)を使用し

ない場合,特性をもたない。

    <classdef rcsnm=attasgn appnm= "attribute  assignment"

    conprop=value dsepprop=tokensep clause= "79002">

    <desc>


70

X 4153 : 1998 (ISO/IEC 10179 : 1996)

属性の割当てであって,指定された場合及びデフォルトの場合の両方で存在する。

    <note>

データ属性なので基本モジュールに含まれる。

    <propdef subnode rcsnm=value datatype=nodelist

    ac= "attvaltk datachar sdata intignch entstart entend" clause= "79401">

    <note>

属性値がトークン化されている場合,子はノード attvaltk となる。それ以外の場合は,他の許容できる

型のノードとなる。

    <when>

属性指定が無く,暗黙の値指定がなされた属性ではない場合。

    <propdef rcsnm=name datatype=string strlex=name strnorm=general

    clause= "93001">

    <propdef rcsnm=implied datatype=boolean clause= "b3407">

    <desc>

属性指定が無く,暗黙の値指定がなされた属性の場合だけ真となる。

    <propdef rcsnm=tokensep appnm= "token sep" fullnm= "token  separator"

    datatype=char clause= "79400">

    <desc>

値のトークンの間の分離子。具象構文では常に文字 SPACE に等しい。

    <when>

ノードが,二つ以上の attvaltk クラスを子にもつ場合。

    <classdef rcsnm=attvaltk appnm= "attribute value token" conprop=token

    clausu= "79305">

    <propdef rcsnm=token datatype=string strlex=nmtoken clause= "93003">

    <classdef rcsnm=datachar appnm= "data char" fullnm= "data  character"

    conprop=char clause= "92002">

    <propdef rcsnm=char fullnm=character datatype=char clause= "92003">

    <desc>

解析系によって応用に渡される文字。

    <classdef rcsnm=sdata

    fullnm= "internal specific character data entity reference result"

    conprop=char clause= "92101">

    <propdef rcsnm=sysdata appnm= "system data" datatype=string clause= "43041">

    <note>

特定の文字データ実体の置換テキストは,参照されている場合には SDATA として扱う。

    <propdef rcsnm=char fullnm=character datatype=char sd=DSSSL>

    <desc>

体系形式 map-sdata-entity によって SDATA 実体に関連付けられた文字。

    <when>

文字が体系形式 map-sdata-entity によって SDATA 実体に関連付けられている場合。


71

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <classdef rcsnm=pi fullnm= "processing instruction" clause= "80000">

    <desc>

処理命令

    <propdef rcsnm=sysdata appnm= "system  data"  datatype=string clause=

"80002">

    </psmodule>

<!--

前書き関連の抽象クラス及び特性,level 0-->

    <psmodule rcsnm=prlgabs0 fullnm= "prolog abstract level 0" dependon=baseabs>

    <propdef irefnode rcsnm=govdt appnm= "governing doctype" datatype=node

    ac=doctype

    cn=sgmldoc clause= "71004">

    <desc>

解析を支配する文書型。複数の“活性”文書が指定されている場合,各活性文書型によって別々の解

析が行われ,個別の sgmldoc グローブを生成する。

    <propdef subnode rcsnm=dtlts appnm= "doctypes and linktypes"

    fullnm= "document types and link types"

    datatype=nmndlist ac= "doctype linktype" acnmprop= "name name" cn=sgmldoc

    clause= "71001">

    <desc>

前書きで宣言した文書型及び連結型を宣言順に並べたノード。

    <classdef rcsnm=doctype appnm= "document type" clause= "b1000">

    <desc>

文書型を抽象化したノード。

    <note>

このノードには,その宣言内の実体,その DTD を入力 DTD とする連結型内で出現したためにそこで

宣言されているのと同じに扱われている実体及びこの文書が活性状態の場合に参照される可能性のあ

る基本宣言内の実体を含む。

    <propdef rcsnm=name datatype=string strlex=name strnorm=general clause=

"b1002">

    <desc>

文書型宣言によって DTD と関連付けられた名前。一番外側の要素の型の名前も同様に必要となる。

    <propdef rcsnm=govrning appnm=governing datatype=boolean clause= "71005">

    <desc>

この文書型が活性状態か又は活性状態の文書型がなく,この文書型が基本文書型であった場合に真と

なる。

    <note>

“支配的”文書型が解析系を支配する。複数の文書型が“活性状態”と指定されている場合,各活性

文書型において,それぞれ別の解析が行われる。そこでは各活性文書型が支配的文書型となり,それ

ぞれ別個のグローブを生成する。

    <propdef subnode rcsnm=genents appnm= "general entities" datatype=nmndlist


72

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    ac=entity acnmprop=name clause= "b1004">

    <desc>

DTD

で宣言されている,文書,副文書の一般実体及び文書型定義で参照する無指定時実体。

    <note>

このクラスの記述で説明したとおり,明示的には宣言されていない実体も含む。

    <note>

DTD

が宣言されていない一般実体名に対する無指定時の宣言を提供している場合,この宣言に対する

リストに項目が無い。それらの宣言の無い名前に対する項目は無い。しかし,その実体は,クラス

sgmldoc

の実体特性には存在する。後述のノード dfltent の記述を参照のこと。

    <propdef subnode rcsnm=nots appnm=notations datatype=nmndlist ac=notation

    acnmprop=name clause= "b1005">

    <classdef rcsnm=entity clause= "60000">

    <propdef rcsnm=name datatype=string strlex=name strnorm=entity clause=

"93001">

    <propdef rcsnm=enttype appnm= "entity type" datatype=enum clause= "a5502">

    <enumdef rcsnm=text fullnm= "SGML  text">

    <enumdef rcsnm=cdata>

    <enumdef rcsnm=sdata>

    <enumdef rcsnm=ndata>

    <enumdef rcsnm=subdoc appnm=subdocument>

    <enumdef rcsnm=pi>

    <propdef rcsnm=text fullnm= "replacement text" datatype=string clause=

"92101">

    <when>

実体が,内部実体の場合。

    <propdef subnode rcsnm=extid appnm= "external id" fullnm= "external

identifier"

    datatype=node ac=extid clause= "a1601">

    <when>

実体が,外部実体の場合。

    <propdef subnode rcsnm=atts appnm=attributes

    datatype=nmndlist ac=attasgn acnmprop=name clause= "b4120">

    <desc>

データ属性割当てのリスト。

属性定義リスト宣言内の宣言順で,

実体に宣言した属性ごとに存在する。

    <when>

実体が,外部実体の場合。

    <propdef rcsnm=notname appnm= "notation name" datatype=string strlex=name

    strnorm=general clause= "79408">

    <when>

実体が,外部実体の場合。


73

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <propdef irefnode rcsnm=notation datatype=node ac=notation clause= "b4001">

    <when>

実体が,外部実体の場合。

    <classdef rcsnm=notation fullnm= "data content notation" clause= "b4000">

    <propdef rcsnm=name datatype=string strlex=name strnorm=general clause=

"79441">

    <propdef subnode rcsnm=extid appnm= "external id" fullnm= "external

identifier"

    datatype=node ac=extid clause= "a1601">

    <classdef rcsnm=extid appnm= "external id" fullnm= "external  identifier"

    clause= "a1600">

    <propdef rcsnm=pubid appnm= "public id" fullnm= "public  identifier"

    datatype=string strlex=mindata clause= "a1602">

    <when>

明示的な公開識別子を含んだ外部識別子。

    <propdef rcsnm=sysid appnm= "system id" fullnm= "system  identifier"

    datatype=string clause= "a1603">

    <when>

明示的なシステム公開識別子を含んだ外部識別子。

    <propdef optional rcsnm=gensysid appnm= "generated system id"

    fullnm= "generated system identifier"

    datatype=string>

    <desc>

外部識別子及び処理系が利用できる,その他の情報から生成されたシステム識別子。

    <when>

外部識別子が,無指定時実体の外部識別子ではない場合。

    </psmodule>

<!--文書インスタンスに関連した抽象クラス及び特性-->

    <psmodule rcsnm=instabs fullnm= "instance abstract" dependon=baseabs>

    <propdef subnode rcsnm=docelem appnm= "document element" datatype=node

    ac=element cn=sgmldoc clause= "72003">

    <desc>

支配的文書型の文書要素。

    <propdef irefnode rcsnm=elements datatype=nmndlist ac=element acnmprop=id

    cn=sgmldoc clause= "73001">

    <desc>

文書内において,一意識別子をもつすべての要素。その順序は解析系が認知した順となる。つまり,

親が子に先行し,兄弟は左から右の順に出現する。

    <propdef irefnode rcsnm=entities datatype=nmndlist ac=entity acnmprop=name

    cn=sgmldoc clause= "94410">


74

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <desc>

支配的文書型において明示的に宣言された一般実体。その後に無指定時実体を参照する実体が続く。

    <note>

これには,内部実体及び外部実体を含むが,名前無し実体は含まれない。

    <propdef subnode rcsnm=dfltents appnm= "defaulted entities" datatype=

nmndlist

    ac=entity acnmprop=name cn=sgmldoc clause= "94412">

    <desc>

支配的文書型内において無指定時実体を参照している,文書内の各実体名に対応する実体。

<!--属性値トークン-->

    <propdef irefnode rcsnm=entity datatype=node ac=entity cn=attvaltk

    clause= "79401">

    <when>

属性の宣言値が,ENTITY 又は ENTITIES の場合。

    <propdef irefnode rcsnm=notation datatype=node ac=notation cn=attvaltk

    clause= "79408">

    <when>

属性の宣言値が,NOTATION の場合。

    <propdef irefnode rcsnm=referent datatype=node ac=element cn=attvaltk

    clause= "79403">

    <when>

属性の宣言値が,IDREF 又は IDREFS の場合。

    <classdef rcsnm=element conprop=content clause= "73000">

    <propdef rcsnm=gi fullnm= "generic identifier" datatype=string strlex=name

    strnorm=general clause= "78001">

    <desc>

要素の共通識別子(要素型名)。

    <propdef derived rcsnm=id fullnm= "unique identifier" datatype=string

    strlex=name strnorm=general clause= "79403">

    <when>

固有識別子が,その要素に対して指定された場合。

    <propdef subnode rcsnm=atts appnm=attributes

    datatype=nmndlist ac=attasgn acnmprop=name clause= "79301">

    <desc>

データ属性割当てのリスト。属性定義リスト宣言内の宣言順で,要素に関して宣言した属性ごとに存

在する。

    <propdef subnode rcsnm=content datatype=nodelist

    ac= "datachar sdata element extdata subdoc pi msignch ignrs ignre repos

    usemap uselink entstart entend ssep comdcl msstart msend ignmrkup"

    clause= "76001">


75

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <classdef rcsnm=extdata appnm= "external  data"

    fullnm= "reference to external data" clause= "a5500">

    <desc>

外部データ実体を参照した結果。

    <propdef rcsnm=entname appnm= "entity name" datatype=string strlex=name

    strnorm=entity clause= "a5101">

    <propdef irefnode rcsnm=entity datatype=node ac=entity clause= "94410">

    </psmodule>

<!--基本 SGML 文書文字列 (SDS) のためのクラス及び特性-->

    <psmodule rcsnm=basesds 0 fullnm= "base SGML document string level 0"

    dependon=baseabs>

    <!--Sdata-->

    <propdef optional rcsnm=entname appnm= "entity name" datatype=string

    strlex=name strnorm=entity cn=sdata clause= "a5101">

    <propdef irefnode rcsnm=entity datatype=node ac=entity cn=sdata

    clause= "94410">

<!--処理命令-->

    <propdef rcsnm=entname appnm= "entity name" datatype=string strlex=name

    strnorm=entity cn=pi clause= "a5101">

    <when>

処理命令が,PI 実体を参照した結果の場合。

    <propdef irefnode rcsnm=entity datatype=node ac=entity cn=pi

    clause= "94410">

    <when>

処理命令が,PI 実体を参照した結果の場合。

<!--

実体-->

    <propdef rcsnm=dflted appnm=defaulted datatype=boolean cn=entity

    clause= "94412">

    <desc>

無指定時の実体を参照して生成された場合,真となる。

    </psmodule>

    <psmodule rcsnm=basesds 1 fullnm= "base SGML document string level 1"

    dependon=basesds 0>

    <propdef subnode optional rcsnm=entref appnm= "entity  ref"

    fullnm= "entity  reference"  datatype=nodelist

    ac= "gendelm name ssep entstart entend refendre shortref" cn=pi

    clause= "94401">

    <desc>

実体参照のマーク付け。

    <note>


76

X 4153 : 1998 (ISO/IEC 10179 : 1996)

クラス ssep,クラス entstart 及びクラス entend は,名前付き実体参照の名前グループだけにおいて出

現可能とする。

    <when>

処理命令が,名前付き実体参照又は短縮参照を伴う PI 実体を参照した結果の場合。

    <propdef subnode optional rcsnm=open appnm= "open  delim"

    fullnm= "open delimiter" datatype=node ac=gendelm cn=pi clause= "80001">

    <when>

処理命令が,PI 実体を参照した結果ではない場合。

    <propdef subnode optional rcsnm=close appnm= "close  delim"

    fullnm= "close delimiter" datatype=node ac=gendelm cn=pi clause= "80001">

    <when>

処理命令が,PI 実体を参照した結果ではない場合。

<!--属性-->

    <propdef irefnode rcsnm=attspec appnm= "attribute spec" fullnm= "attribute

    specification"

    datatype=nodelist ac= "name ssep gendelm literal attvalue" cn=attasgn

    clause= "79002">

    <when>

属性が,無指定時指定又は暗黙指定以外ではなく,明示的に指定されている場合。

    <propdef irefnode rcsnm=attvalsp appnm= "attribute value spec"

    fullnm= "attribute value specification" datatype=node

    ac= "attvalue literal" cn=attasgn clause= "79301">

    <when>

属性が,暗黙指定ではない場合。

<!--データ文字-->

    <propdef rcsnm=intrplch appnm= "interp replaced char"

    fullnm= "interpretation replaced character" datatype=char cn=datachar

    clause= "a1704">

    <desc>

置換された文字。

    <note>

最小リテラルにおける文字 RE 又は文字 SPACE の列が単一の文字 SPACE で置換される場合,最初の

文字はおそらく特性 intrplch をもつクラス datachar のノードによって表現され,他の文字はクラス

intignch

のノードによって表現される。

    <when>

リテラルを解釈した時に置き換えられたデータ文字の場合。つまり,属性値リテラル内の文字 RE 又

は文字 SEPCHAR 又は最小リテラル内の RE を置き換えた結果の文字 SPACE の場合。

    <propdef subnode optional rcsnm=namecref appnm= "named char ref"

    fullnm= "named character reference" datatype=nodelist

    ac= "gendelm name refendre" cn=datachar clause= "95001">


77

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <when>

データ文字が,名前付き文字参照の置換えの場合。

    <propdef subnode optional rcsnm=numcref appnm= "numeric char ref'

    fullnm= "numeric character reference" datatype=nodelist

    ac= "gendelm name crefcnum refendre" cn=datachar clause= "95001">

    <when>

データ文字が,数値文字参照の置換えの場合。

<!--特定の文字データ-->

    <propdef subnode optional rcsnm=markup datatype=nodelist

    ac= "gendelm name ssep entstart entend refendre shortref" cn=sdata

    clause= "94401">

    <note>

クラス ssep,クラス entstart 及びクラス entend は,名前付き実体参照の名前グループの場合だけ出現

可能とする。

    <classdef rcsnm=ssep appnm= "s sep" fullnm= "s separator" mayadd

    clause= "62100">

    <propdef rcsnm=char fullnm=character datatype=char clause= "92003">

    <propdef subnode optional rcsnm=namecref appnm= "named char ref"

    fullnm= "named character reference" datatype=nodelist

    ac= "gendelm name refendre" clause= "95001">

    <when>

データ文字が,名前付き文字参照の置換えの場合。

    <classdef rcsnm=comment clause= "a3002">

    <propdef subnode optional rcsnm=open appnm=open delim"

    fullnm= "open delimiter" datatype=node ac=gendelm clause= "a3002">

    <propdef rcsnm=chars fullnm=characters datatype=string clause= "92101">

    <desc>

注釈内の文字(区切り子 com を除く)。

    <propdef subnode optional rcsnm=close appnm= "close  delim"

    fullnm= "close delimiter" datatype=node ac=gendelm clause= "a3002">

    <classdef rcsnm=comdcl appnm= "comment decl" fullnm= "comment declaration"

    conprop=markup mayadd clause= "a3001">

    <propdef subnode rcsnm=markup datatype=nodelist ac= "comment  ssep"

    clause= "a3001">

    <classdef rcsnm=ignmrkup appnm= "ignored markup" conprop=markup

    clause= "77002 94405 c3007">

    <desc>

無視したマーク付け。次の条件のいずれかを満たしているために無視したもの。

a)

活性文書型の名前を含まない名前グループを文書型指定をもつ,開始タグ又は終了タグ。

b)

活性文書型又は連結型の名前を含まない名前グループを文書型指定をもつ,一般実体又はパラメタ実


78

X 4153 : 1998 (ISO/IEC 10179 : 1996)

体。

c)

連結型名が活性連結型でない連結集合使用宣言。

d)

無視した開始タグ内において,属性値内で使用している一般実体参照。

e)

既に宣言されている実体。

    <propdef subnode rcsnm=markup datatype=nodelist

    ac= "gendelm name ssep attvalue literal entstart entend refendre"

    clause= "74001 75001 94401 c300l">

    <classdef rcsnm=entstart appnm= "entity start" conprop=markup>

    <desc>

実体の置換テキストの開始。

    <note>

終了は,クラス entend のノードで印を付ける。解析系は,実体参照の結果として置き換える。

    <propdef subnode optional rcsnm=markup datatype=nodelist

    ac= "gendelm name ssep entstart entend refendre shortref">

    <desc>

実体参照のマーク付け。

    <propdef optional rcsnm=entname appnm= "entity name" datatype=string

    strlex=name strnorm=entity>

    <propdef irefnode rcsnm=entity datatype=node ac=entity clause= "a5201">

    <classdef rcsnm=entend appnm= "entity end" clause= "94500">

    <desc>

解析系が置き換えた実体参照の終了。

    <classdef rcsnm=msignch appnm= "marked section ignored char"

    fullnm= "marked section ignored character" clause= "a4204">

    <desc>

マーク付きセクション内で無視した文字。

    <propdef rcsnm=char fullnm=character datatype=char clause= "92101">

    <classdef rcsnm=intignch appnm= "interp ignored char"

    fullnm= "interpretation ignored char" clause= "79303  a1704">

    <desc>

リテラルを解釈したときに無視したリテラル内の文字。これは,次のいずれかとなる。

a)

属性値リテラル又は最小リテラル内の文字 RS。

b)

最小リテラル内において,直後に別の文字 RE 又は文字 SPACE が続く,文字 RE 又は文字 SPACE。

c)

最小リテラルの最初又は最後に存在する,文字 RE 又は文字 SPACE。

    <propdef subnode optional rcsnm=namecref appnm= "named char ref"

    fullnm= "named character reference" datatype=nodelist

    ac= "gendelm name refendre" clause= "95001">

    <when>

文字が,名前付き文字参照の置換えの場合。

    <propdef rcsnm=char fullnm=character datatype=char clause= "92101">


79

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <classdef rcsnm=gendelm appnm= "general delim" fullnm= "general delimiter"

    clause= "FIG30">

    <desc>

一般区切り子。

    <propdef subnode optional rcsnm=namecref appnm= "named char ref"

    fullnm= "named character reference" datatype=nodelist

    ac= "gendelm name refendre" clause= "95001">

    <note>

親の最初の子である区切り子又は終了区切り子特性の値だけに対して起こり得る。

    <when>

区切り子の最初の文字が名前付き文字参照を使って入力された場合。

    <propdef rcsnm=role datatype=string strnorm=rcsgener clause= "96001 FIG30">

    <desc>

区切り子の役割の名前。

    <propdef optional rcsnm=origdelm appnm= "original  delim"

    fullnm= "original delimiter" datatype=string clause= "92102  FIG22">

    <desc>

大文字変換以前の,入力と同じ区切り子。

    <classdef rcsnm=name clause= "93001">

    <desc>

マーク付け内での名前。

    <note>

属性値の名前は,名前ではなくクラス attvaltk  のノードによって表す。

    <propdef rcsnm=origname appnm= "original name" datatype=string clause=

"93005">

    <desc>

大文字変換前の,入力と同じ名前文字列。

    <classdef rcsnm=rname appnm= "reserved name" clause= "d4701">

    <desc>

予約名として認識する,マーク付け内のトークン。

    <propdef rcsnm=refname appnm= "ref name" fullnm= "reference  name"

    datatype=string strnorm=rcsgener clause= "d4704">

    <desc>

参照予約名。

    <propdef optional rcsnm=origname appnm= "original name" datatype=string

    clause= "93005">

    <desc>

大文字変換前の,入力と同じ予約名。

    <classdef rcsnm=literal conprop=value clause= "a1201 79302 a1701 a1603">

    <desc>


80

X 4153 : 1998 (ISO/IEC 10179 : 1996)

パラメタリテラル,属性値リテラル,最小リテラル又はシステム識別子。

    <propdef subnode optional rcsnm=open appnm= "open  delim"

    fullnm= "open delimiter" datatype=node ac=gendelm clause= "96100  FIG30">

    <propdef subnode rcsnm=value datatype=nodelist

    ac= "entstart entend datachar sdata intignch"

    clause= "a1202 91001 a1702 80002">

    <desc>

リテラルを解析した値。

    <note>

リテラルがトークン化されている値の属性値リテラルである場合,そのリテラルの値はトークン化の

前ではあるが,しかし解析の後の属性値を表現する。

    <propdef subnode optional rcsnm=close appnm= "close  delim"

    fullnm= "close delimiter" datatype=node ac=gendelm clause= "96100 FIG30">

    <classdef rcsnm=number clause= "93002">

    <desc>

マーク付け内の数であって,文字参照の文字番号ではないもの。

    <note>

属性値の中の数字は,数字ではなく,クラス attvaltk のノードによって表現する。

    <propdef rcsnm=digits datatype=string strlex=number clause= "93002">

    <classdef rcsnm=crefcnum appnm= "char ref char number"

    fullnm= "character reference character number" clause= "95001">

    <desc>

文字参照内に出現する文字番号。

    <note>

番号の数値は,クラス datachar ノードの特性 char が決定する。

    <propdef optional rcsnm=ndigits appnm=  "n digits" fullnm=  "number of digits"

    datatype=integer clause= "95003  93002">

    <desc>

値を指定するための 10 進数。

    <classdef rcsnm=refendre appnm= "ref end re" fullnm= "reference end RE"

    clause= "94502">

    <desc>

参照終了として使用するマーク付けの文字 RE。

    <classdef rcsnm=attvalue appnm= "attribute value" clause= "79400">

    <desc>

属性値指定であって,値として属性値リテラルではなく属性値をとるもの。

    <note>

これとクラス attasgn とを混同しないこと。

    <propdef rcsnm=value datatype=string clause= '93005">

    <desc>


81

X 4153 : 1998 (ISO/IEC 10179 : 1996)

大文字変換前の値。

    <classdef rcsnm=nmtoken appnm= "name token" clause= "93003">

    <desc>

マーク付けにおける名前トークン。

    <note>

宣言した値の名前トークングループの名前トークンだけに対して使用する。属性値の名前トークンは,

クラス nmtoken ではなくクラス attvaltk のノードによって表現する。

    <propdef rcsnm=origname appnm= "original name token" datatype=string

    clause= "93005">

    <desc>

大文字変換前の,入力と同じ名前トークンの文字列。

    <classdef rcsnm=msstart appnm= "marked section start"

    fullnm= "marked section declaration start" conprop=markup clause= "a4002">

    <desc>

マーク付きセクションの直前の,マーク付きセクション宣言部分。

    <propdef subnode optional rcsnm=markup datatype=nodelist

    ac= "gendelm rname ssep entstart entend comment ignmrkup" clause= "a4002">

    <note>

最初の子は,区切り子 mdo のためのクラス gendelm のノードとなり,最後の子は区切り子 dso のため

のクラス gendelm のノードとなる。

    <propdef rcsnm=status datatype=enum clause= "a4201">

    <desc>

マーク付きセクションの有効な状態。

    <enumdef rcsnm=ignore>

    <enumdef rcsnm=cdata>

    <enumdef rcsnm=rcdata>

    <enumdef rcsnm=include>

    <enumdef rcsnm=temp>

    <classdef rcsnm=msend appnm= "marked section end" conprop=markup

    clause= "a4003">

    <propdef subnode optional rcsnm=markup datatype=nodelist ac=gendelm

    clause= "FIG3e  FIG3h">

    <note>

区切り子 msc 及び区切り子 mdc のためのクラス gendelm のノードとなる。

    </psmodule>

<!--SGML 宣言関係の抽象クラス及び特性-->

    <psmodule rcsnm=sdclabs fullnm= "sgml declaration abstract" dependon=

baseabs>

    <propdef rcsnm=sgmlver appnm= "sgml version" datatype=string strlex=mindata

    cn=sgmldoc clause= "d0002">


82

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <desc>

文書又は副文書に適用する SGML 宣言の最初のパラメタに指定された最小リテラル。

    <propdef subnode rcsnm=docchset appnm= "document char set"

    fullnm= "document character set" datatype=node ac=charset cn=sgmldoc

    clause= "d1001">

    <propdef subnode rcsnm=capset appnm= "capacity set" datatype=node

    ac=capset cn=sgmldoc clause= "d2001">

    <propdef rcsnm=synscope appnm= "syntax  scope"

    fullnm= "concrete syntax scope" datatype=enum cn=sgmldoc clause= "d3002">

    <enumdef rcsnm=instance>

    <enumdef rcsnm=document>

    <propdef subnode rcsnm=dclsyn appnm= "decl  syntax"

    fullnm= "declared concrete syntax" datatype=node ac=syntax cn=sgmldoc

    clause= "d4001">

    <propdef subnode rcsnm=refsyn appnm= "ref  syntax"

    fullnm= "reference concrete syntax" datatype=node ac=syntax cn=sgmldoc

    clause= "d4002 e0001 FIG70">

    <desc>

SGML

宣言で使用する参照具象構文及び具象構文の適用範囲が INSTANCE の場合には前書きも含む。

    <note>

文書文字集合に依存しているので,クラス sgmlcsts の特性ではない。

    <propdef irefnode rcsnm=prosyn appnm= prolog  syntax"

    fullnm= "prolog concrete syntax" datatype=node ac=syntax cn=sgmldoc

    clause= "d4001">

    <desc>

前書きのための具象構文。

    <propdef subnode rcsnm=features fullnm= "feature use" datatype=node

    ac=features cn=sgmldoc clause= "d5001">

    <classdef rcsnm=charset appnm= "char set" fullnm= "character  set"

    conprop=chdescs clause= "d1000">

    <propdef subnode rcsnm=chdescs appnm= "char  descs"

    fullnm= "character descriptions" datatype=nodelist ac=chardesc

    clause= "d1101">

    <classdef rcsnm=chardesc appnm=  "char desc" fullnm= "character description"

    clause= "d1122">

    <propdef rcsnm=descnum appnm= "desc set number"

    fullnm= "described set character number" datatype=integer clause= "d1123">

    <propdef rcsnm=nchars appnm= "n chars" fullnm= "number of characters"

    datatype=integer clause= "d1125">

    <propdef rcsnm=basenum appnm= "base set number"


83

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    fullnm= "base set character number" datatype=integer clause= "d1124">

    <when>

文字記述が基本集合文字番号を含んでいる場合。

    <propdef rcsnm=baseset appnm= "base char set" fullnm= "base character set"

    datatype=string strlex=mindata clause= "d1111">

    <desc>

基本文字集合の公開識別子。

    <when>

文字記述が基本集合文字番号を含む場合。

    <propdef rcsnm=desclit appnm= "desc  literal"

    fullnm= "description literal" datatype=string strlex=mindata

    clause= "a1701">

    <when>

基本集合番号として入力されない文字記述。

    <classdef rcsnm=syntax fullnm= "concrete syntax" clause= "d4000">

    <note>

この文書の文書文字集合の具象構文を表現する。文字は,構文参照文字集合ではなく,文書文字集合

の文字となる。

    <propdef rcsnm=shunctrl appnm= "shunchar controls" datatype=boolean

    clause= "d4204">

    <desc>

文字クラス SHUNCHAR が文字クラス CONTROLS を含めば真。

    <propdef rcsnm=shunchar fullnm= "shunned character numbers"

    datatype=intlist clause= "d4201">

    <propdef subnode rcsnm=synchset appnm= "syntax ref char set"

    fullnm= "syntax-reference character set" datatype=node ac=charset

    clause= "d4301">

    <propdef rcsnm=re fullnm= "record end" datatype=char clause= "4401">

    <propdef rcsnm=rs fullnm= "record start" datatype=char clause= "d4401">

    <propdef rcsnm=space datatype=char clause= "d4401">

    <propdef subnode rcsnm=addfuns appnm= "added function chars"

    fullnm= "added function characters" datatype=nmndlist ac=addfun

    acnmprop=name clause= "d4401">

    <propdef rcsnm=lcnmstrt datatype=string clause= "d4503">

    <propdef rcsnm=ucnmstrt datatype=string clause= "d4504">

    <propdef rcsnm=lcnmchar datatype=string clause= "d4505">

    <propdef rcsnm=ucnmchar datatype=string clause= "d4506">

    <propdef rcsnm=substgen appnm= "subst general names"

    fullnm= "substitute general names" datatype=boolean clause= "d4507">

    <desc>


84

X 4153 : 1998 (ISO/IEC 10179 : 1996)

機構使用項目 NAMECASE において,GENERAL YES が指定された場合に真となる。

    <propdef rcsnm=substent appnm= "subst entity names"

    fullnm= "substitute entity names" datatype=boolean clause= "d4507">

    <desc>

機構使用項目 NAMECASE において,ENTITY YES が指定された場合に真となる。

    <propdef subnode rcsnm=gdasns appnm= "general delim assocs"

    fullnm= "general delimiter role associations"

    datatype=nmndlist ac=dlmrlas acnmprop=role clause= "d4611">

    <desc>

参照具象構文が行う指定の変更とは関係なく,一般区切り子の役割ごとに項目がある。項目はその(抽

象構文の)役割名のアルファベット順で出現する。

    <propdef rcsnm=srdelms appnm= "shortref  delims"

    fullnm= "short reference delimiters" datatype=strlist clause= "d4621">

    <propdef subnode rcsnm=slitasns appnm= "syntax literal assocs"

    fullnm= "syntax literal associations" datatype=nmndlist ac=synlitas

    acnmprop=refname clause= "d4701">

    <desc>

具象構文が指定する構文リテラル/予約名の関係。参照具象構文が行う指定の変更とは関係なく,一

般区切り子の役割ごとに一つの項目がある。項目はその(抽象構文の)役割の名前のアルファベット

順で出現する。

    <propdef rcsnm=attcnt datatype=integer clause= "FIG41">

    <propdef rcsnm=attsplen datatype=integer clause= "FIG42">

    <propdef rcsnm=bseqlen datatype=integer clause= "FIG43">

    <propdef rcsnm=dtaglen datatype=integer clause= "FIG44">

    <propdef rcsnm=dtemplen datatype=integer clause= "FIG45">

    <propdef rcsnm=entlvl datatype=integer clause= "FIG46">

    <propdef rcsnm=grpcnt datatype=integer clause= "FIG47">

    <propdef rcsnm=grpgtcnt datatype=integer clause= "FIG48">

    <propdef rcsnm=grplvl datatype=integer clause= "FIG49">

    <propdef rcsnm=litlen datatype=integer clause= "FIG4a">

    <propdef rcsnm=namelen datatype=integer clause= "FIG4b">

    <propdef rcsnm=normsep datatype=integer clause= "FIG4c">

    <propdef rcsnm=pilen datatype=integer clause= "FIG4d">

    <propdef rcsnm=taglen datatype=integer clause= "FIG4e">

    <propdef rcsnm=taglvl datatype=integer clause= "FIG4f">

    <classdef rcsnm=addfun appnm= "added function char"

    fullnm= "added function character" clause= "d4400">

    <propdef rcsnm=name datatype=string strlex=name strnorm=general clause=

"d4402">

    <propdef rcsnm=class fullnm= "function class" datatype=enum clause= "d4403">


85

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <enumdef rcsnm=funchar>

    <enumdef rcsnm=msichar>

    <enumdef rcsnm=msochar>

    <enumdef rcsnm=msschar>

    <enumdef rcsnm=sepchar>

    <propdef rcsnm=char fullnm=character datatype=char clause= "95003">

    <desc>

機能に割り当てられた文字。

    <classdef rcsnm=dlmrlas appnm= "delim role assoc"

    fullnm= "delimiter role association" clause= "d4610">

    <desc>

具象構文が指定した,文字列と抽象構文の区切り子の役割との関係。

    <propdef rcsnm=role datatype=string strnorm=rcsgener clause= "d4612">

    <desc>

役割名。

    <propdef rcsnm=delm appnm=delim fullnm=delimiter datatype=string

    strnorm=general clause= "d4611">

    <desc>

文書で使用する文字列。

    <classdef rcsnm=synlitas appnm= "syntactic literal assoc"

    fullnm= "syntactic literal association" clause= "d4700">

    <desc>

具象構文が指定する,予約名と抽象構文の構文リテラルとの関連。

    <propdef rcsnm=synlit appnm= "syntactic  literal"

    datatype=string strnorm=rcsgener clause= "d4702">

    <desc>

構文リテラル(より正確には,二重引用符でくく(括)った場合に,構文リテラルとなる名前。)。

    <propdef rcsnm=resname appnm= "reserved name" datatype=string strlex=name

    strnorm=general clause= "d4702">

    <desc>

文書内で使用される予約名。

    <note>

参照具象構文において,構文リテラルは予約名と同一となる。

    <classdef rcsnm=capset appnm= "capacity set" clause= "d2000">

    <propdef rcsnm=totalcap datatype=integer clause= "FIG51">

    <propdef rcsnm=entcap datatype=integer clause= "FIG52">

    <propdef rcsnm=entchcap datatype=integer clause= "FIG53">

    <propdef rcsnm=elemcap datatype=integer clause= "FIG54">

    <propdef rcsnm=grpcap datatype=integer clause= "FIG55">

    <propdef rcsnm=exgrpcap datatype=integer clause= "FIG56">


86

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <propdef rcsnm=exnmcap datatype=integer clause= "FIG57">

    <propdef rcsnm=attcap datatype=integer clause= "FIG58">

    <propdet rcsnm=attchcap datatype=integer clause= "FIG59">

    <propdef rcsnm=avgrpcap datatype=iriteger clause= "FIG5a">

    <propdef rcsnm=notcap datatype=integer clause= "FIG5b">

    <propdef rcsnm=notchcap datatype=integer clause= "FIG5c">

    <propdef rcsnm=idcap datatype=integer clause= "FIG5d">

    <propdef rcsnm=idrefcap datatype=integer clause= "FIG5e">

    <propdef rcsnm=mapcap datatype=integer clause= "FIG5f">

    <propdef rcsnm=lksetcap datatype=integer clause= "FIG5g">

    <propdef rcsnm=lknmcap datatype=integer clause= "FIG5h">

    <classdef rcsnm=features fullnm= "feature use" clause= "d5000">

    <propdef rcsnm=datatag datatype=boolean clause= "d5101">

    <desc>

機構使用項目 DATATAG が,YES の場合に真となる。

    <propdef rcsnm=omittag datatype=boolean clause= "d5101">

    <desc>

機構使用項目 OMITTAG が,YES の場合に真となる。

    <propdef rcsnm=rank datatype=boolean clause= "d5101">

    <desc>

機構使用項目 RANK が,YES の場合に真となる。

    <propdef rcsnm=shorttag datatype=boolean clause= "d5101">

    <desc>

機構使用項目 SHORTTAG が,YES の場合に真となる。

    <propdef rcsnm=simple datatype=integer clause= "d5201">

    <desc>

機構使用項目 SIMPLE が,NO の場合には 0 となる。

    <propdef rcsnm=implicit datatype=boolean clause= "d5201">

    <desc>

機構使用項目 IMPLICIT が,YES の場合に真となる。

    <propdef rcsnm=explicit datatype=integer clause= "d5201">

    <desc>

機構使用項目 EXPLICIT が,NO の場合には 0 となる。

    <propdef rcsnm=concur datatype=integer clause= "d5301">

    <desc>

機構使用項目 CONCUR が,NO の場合には 0 となる。

    <propdef rcsnm=subdoc datatype=integer clause= "d5301">

    <desc>

機構使用項目 SUBDOC が,NO だった場合 0。

    <propdef rcsnm=formal datatype=boolean clause= "d5301">


87

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <desc>

機構使用項目 FORMAL が,YES の場合に真となる。

    </psmodule>

<!--SGML 宣言関係の SGML 文書文字列クラス及び特性-->

    <psmodule rcsnm=sdclsds fullnm= "SGML declaration SGML document string"

    dependon=basesds 1>

    <propdef subnode optional rcsnm=sgmldcl appnm= "sgml  decl"

    fullnm=SGML declaration" datatype=node ac=sgmldcl cn=sgmldoc

    clause= "d0001">

    <when>

SGML

宣言を,明示的に指定した場合。

    <propdef rcsnm=sdcltype appnm= "sgml decl type"

    fullnm= "SGML declaration type" datatype=enum cn=sgmldoc clause= "62300">

    <enumdef rcsnm=explicit>

    <desc>

SGML

宣言を,明示的に指定した場合。

    <enumdef rcsnm=implied>

    <desc>

SGML

宣言が,暗黙指定されていた場合。

    <enumdef rcsnm=inherit>

    <desc>

SGML

宣言が,この文書を副文書としてもつ SGML 文書から得られる場合。

    <classdef rcsnm=sgmldcl appnm= "sgml decl" fullnm= "SGML  declaration"

    conprop=markup clause= "d0000">

    <propdef subnode rcsnm=markup datatype=nodelist

    ac= "ssep comment name number rname literal gendelm" clause= "d0001">

    <note>

SGML

宣言の前の分離子 s も含む。

最後の子は区切り子 mdc のためのクラス gendelm のノードとなる。

    </psmodule>

<!--前書き関係の抽象クラス及び特性,level 1-->

    <psmodule rcsnm=prlgabsl fullnm= "prolog abstract level 1"

    dependon=prlgabs 0>

    <propdef subnode rcsnm=attdefs appnm= "attribute  defs"

    fullnm= "attribute definitions" datatype=nmndlist ac=attdef acnmprop=name

    cn=notation clause= "b3002">

    <propdef irefnode rcsnm=attdef appnm= "attribute  def"

    fullnm= "attribute definition" datatype=node ac=attdef cn=attasgn

    clause= "b3003">

    <propdef irefnode rcsnm=elemtype appnm= "element type" datatype=node ac=

elemtype


88

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    cn=element clause= "b2101">

    <propdef subnode rcsnm=dfltent appnm= "default entity" datatype=node ac=

dfltent

    clause= "a5105"  cn=doctype>

    <when>

DTD

が,宣言されていない実体名に対して無指定時値を指定した場合(それらの宣言されていない各

名前は,このノードを一つのパターンとして実体に関連付けられる。しかし,処理系が各名前に対し

て同じ実体を選択しない場合もある。)。

    <propdef subnode rcsnm=elemtps appnm= "element types" datatype=nmndlist

ac

= "elemtype rankstem" acnmprop=gi rankstem" cn=doctype clause= "b2101">

    <desc>

要素に名前をつけるのに使用した共通識別子又はランク核。

    <propdef subnode rcsnm=parments appnm= parameter  entities"

    datatype=nmndlist ac=entity acnmprop=name cn=doctype

    clause= "b1004">

    <note>

このクラスの説明で述べたとおり,明示的に指定されていない実体を含む。

    <classdef rcsnm=elemtype appnm= "element  type"

    fullnm= "element type definition" clause= "b2000">

    <propdef rcsnm=gi fullnm= "generic identifier" datatype=string

    strlex=name strnorm=general clause= "78002">

    <propdef rcsnm=omitstrt appnm= "omit start tag" datatype=boolean

    clause= "b2202">

    <desc>

開始タグ最小化指定が"O"の場合に真となる。

<when> 

要素型宣言が省略タグ最小化指定をもつ場合。

    <propdef rcsnm=omitend appnm= "omit end tag" datatype=boolean

    clause= "b2203">

    <desc>

終了タグ最小化指定が "O" の場合に真となる。

    <when>

要素型宣言が省略タグ最小化指定をもつ場合。

    <propdef rcsnm=contype appnm= "content type" datatype=enum clause= "b2300">

    <enumdef rcsnm=cdata>

    <desc>

内容が,CDATA と宣言されている場合。

    <enumdef rcsnm=rcdata>

    <desc>

内容が,RCDATA と宣言されている場合。


89

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <enumdef rcsnm=empty>

    <desc>

内容が,EMPTY と宣言されている場合。

    <enumdef rcsnm=any>

    <desc>

内容が,ANY と宣言されている場合。

    <enumdef rcsnm=modelgrp appnm= "model  group">

    <desc>

内容モデルがモデル群の場合。

    <propdef subnode rcsnm=modelgrp appnm= "model group" datatype=node

    ac=modelgrp clause= "b2402">

    <when>

要素型宣言が,モデル郡をもつ内容モデルを含む場合。

    <propdef rcsnm=excls appnm=exclusions datatype=strlist clause= "b2521">

    <when>

内容型が,列挙値 any 又は列挙値 modelgrp の場合。

    <propdef rcsnm=incls appnm=inclusions datatype=strlist clause= "b2511">

    <when>

内容型が,列挙値 any 又は列挙値 modelgrp の場合。

    <propdef subnode rcsnm=attdefs appnm= "attribute  defs"

    fullnm= "attribute definitions" datatype=nmndlist ac=attdef acnmprop=name

    clause= "b3003">

    <classdef rcsnm=modelgrp appnm= "model group" conprop=tokens

    clause= "b2402">

    <desc>

モデル群又はデータタググループ。

    <note>

データグループは,結合子 seq を用いて結合したモデル群のノードによって表現し,最初のトークン

がクラス elemtk 及び二番目のトークンがクラス pcdatatk となる。

    <propdef rcsnm=connect appnm=connector datatype=enum clause= "b2410">

    <desc>

モデル群内で使用した結合子。

    <enumdef rcsnm=and>

    <enumdef rcsnm=or>

    <enumdef rcsnm=seq>

    <propdef rcsnm=occur appnm= "occur indicator" fullnm= "occurrence indicator"

datatype

=enum clause= "b2420">

    <when>

モデル群が出現指示子をもつ場合。

    <enumdef rcsnm=opt>


90

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <enumdef rcsnm=plus>

    <enumdef rcsnm=rep>

    <propdef subnode rcsnm=tokens appnm= "content tokens" datatype=nodelist

    ac= "modelgrp pcdatatk elemtk" clause= "b2403">

    <classdef rcsnm=pcdatatk appnm= "pcdata token" clause= "b2404">

    <classdef rcsnm=elemtk appnin= "element token" clause= "b2405">

    <propdef rcsnm=gi fullnm= "generic identifier" datatype=string

    strlex=name strnorm=general clause= "b2405">

    <propdef rcsnm=occur appnm= "occur indicator" fullnm= "occurrence indicator"

    datatype=enum clause= "b2405">

    <when>

要素トークンが出現指示子をもつ場合。

    <enumdef rcsnm=opt>

    <enumdef rcsnm=plus>

    <enumdef rcsnm=rep>

    <classdef rcsnm=attdef appnm= "attribute def" fullnm= "attribute definition"

    conprop=dfltval clause= "b3  003">

    <propdef rcsnm=name datatype=string strlex=name strnorm=general

    clause= "b3201">

    <propdef rcsnm=dcltype appnm= "decl value type"

    fullnm= "declared value prescription type" datatype=enum clause= "b3301">

    <enumdef rcsnm=cdata>

    <enumdef rcsnm=entity>

    <enumdef rcsrm=entities>

    <enumdef rcsnm=id>

    <enumdef rcsnm=idref>

    <enumdef rcsnm=idrefs>

    <enumdef rcsnm=name>

    <enumdef rcsnm=names>

    <enumdef rcsnm=nmtoken>

    <enumdef rcsnm=nmtokens>

    <enumdef rcsnm=number>

    <enumdef rcsnm=numbers>

    <enumdef rcsnm=nutoken>

    <enumdef rcsnm=nutokens>

    <enumdef rcsnm=notation>

    <enumdef rcsnm=nmtkgrp appnm= "name token group">

    <desc>

宣言値が,名前トークングループの場合。

    <propdef rcsnm=tokens datatype=strlist clause= "b3301">


91

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <desc>

使用可能なトークンを指定する文字列のリスト。

    <when>

宣言値が,名前トークングループ又は記法の場合。

    <propdef rcsnm=dflttype appnm= "default value type" datatype=enum

    clause= "b3401">

    <enumdef rcsnm=value>

    <desc>

無指定時値が,#FIXED をもたない属性値指定の場合。

    <enumdef rcsnm=fixed>

    <enumdef rcsnm=required>

    <enumdef rcsnm=current>

    <enumdef rcsnm=conref>

    <enumdef rcsnm=implied>

    <propdef subnode rcsnm=dfltval appnm= "default value" datatype=nodelist

    ac= "attvaltk datachar sdata intignch entstart entend" clause= "b3409">

    <when>

無指定時値が,属性値指定を含む場合。

    <propdef irefnode rcsnm=curgrp appnm= "current group" datatype=nodelist

    ac=attdef clause= "b3001">

    <desc>

同一の属性定義を表し,同一の現在値を共有するクラス attdef のノードすべて。

    <note>

この属性定義を宣言する,属性定義リスト宣言内で関連付けた要素型と同じ数だけ存在する。

    <when>

無指定時値の型が CURRENT の場合。

    <propdef rcsnm=curattix appnm= "current attribute index" datatype=integer

    clause= "b3001">

    <desc>

無指定時型 CURRENT をもち,文書型宣言において先行する属性定義に数。

    <note>

クラス attdef のノードの特性 curgrp の値内のすべての attdef ノードは,特性 curattix に関して同じ値を

開示する。二つのクラス attdef のノードは,それらが特性 curattix に関して同じ値を開示する場合だけ

同じ現在値を共有する。

    <when>

無指定時値の型が,CURRENT の場合。

    <classdef rcsnm=dfltent appnm= "default  entity">

    <propdef rcsnm=enttype appnm= 'entity type" datatype=enum clause= "a5502">

    <enumdef rcsnm=text fullnm= "SGML  text">

    <enumdef rcsnm=cdata>


92

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <enumdef rcsnm=sdata>

    <enumdef rcsnm=ndata>

    <enumdef rcsnm=subdoc appnm=subdocument>

    <enumdef rcsnm=pi>

    <propdef rcsnm=text datatype=string fullnm= "replacement  text"

    clause= "92101">

    <when>

無指定時実体宣言が,内部実体を宣言している場合。

    <propdef subnode rcsnm=extid appnm= "external  id"

    fullnm= "external identifier" datatype=node ac=extid clause= "a1601">

    <when>

無指定時実体宣言が,外部実体を宣言している場合。

    <propdef subnode rcsnm=atts appnm=attributes

    datatype=nmndlist ac=attasgn acnmprop=name clause= "b4120">

    <desc>

データ属性割当てのリスト。属性定義リスト宣言で宣言された順序で,実体の各宣言済み属性に一つ

ずつ存在する。

    <when>

無指定時実体宣言が,外部実体を宣言している場合。

    <propdef rcsnm=notname appnm= "notation name" datatype=string strlex=name

    strnorm=general clause= "79408">

    <when>

無指定時実体宣言が,外部実体を宣言している場合。

    <propdef irefnode rcsnm=notation datatype=node ac=notation clause= "b4001">

    <when>

無指定時実体宣言が,外部実体を宣言している場合。

    </psmodule>

<!--前書き関係の SGML 文書文字列 (SDS) 特性-->

    <psmodule rcsnm=prlgsds fullnm= "prolog SGML document string"

    dependon=basesds1>

    <propdef irefnode rcsnm=entdcl appnm= "entity  decl"

    fullnm= "entity  declaration"  datatype=node ac=entdcl cn=dfltent

    clause= "a5001">

    <propdef irefnode rcsnm=notdcl appnm= "notation  decl"

    fullnm= "notation declaration" datatype=node ac=notdcl cn=notation

    clause= "b4001">

    <propdef irefnode rcsnm=attdldcl appnm= "attribute def list decl"

    fullnm= "attribute definition list declaration" datatype=node ac=attdldcl

    cn=notation clause= "b4111">

    <when>


93

X 4153 : 1998 (ISO/IEC 10179 : 1996)

記法が,関連して ATTLIST をもつ場合。

    <propdef irefnode rcsnm=eltpdcl appnm= "element type decl"

    fullnm= "element type declaration" datatype=node ac=eltpdcl cn=elemtype

    clause= "b200l">

    <propdef irefnode rcsnm=attdldcl appnm= "attribute def list decl"

    fullnm= "attribute definition list declaration"

    datatype=node ac=attdldcl cn=elemtype clause= "b3001">

    <when>

要素型が,関連して ATTLIST をもつ場合。

    <propdef irefnode rcsnm=doctpdcl fullnm= "document type declaration"

    datatype=node ac=doctpdcl cn=doctype clause= "b1001">

    <propdef irefnode rcsnm=attvalsp appnm= "attribute value spec"

    fullnm= "attribute value specification"

    datatype=node ac= "attvalue literal" cn=attdef clause= "79002">

    <when>

無指定時値が,属性値指定を含む場合。

    <classdef rcsnm=doctpdcl fullnm= "document type declaration" mayadd

    clause= "b1000">

    <propdef subnode rcsnm=markup datatype=nodelist

    ac= "ssep comment name rname literal msstart msend msignch entstart entend

    comdcl pi eltpdcl entdcl notdcl attdldcl usemap srmapdcl"

    clause= "b1001">

    <note>

最初の子は区切り子 mdo のためのクラス gendelm のノードとなり,最後の子は区切り子 mdc のためのク

ラス gendelm のノードとなる。外部実体がある場合,そのクラス entend のノードは,区切り子 dsc が存

在する場合,区切り子 dsc のためのクラス gendelm のノードの直前に現れ,存在しなければ区切り子 mdc

のためのクラス gendelm のノードの前に現れる。

    <propdef irefnode rcsnm=doctype appnm= "document type" datatype=node

    ac=doctype clause= "b1008">

    <propdef subnode rcsnm=entity datatype=node ac=entity clause= "b1008">

    <when>

文書型定義が,外部識別子を含む場合。

    <classdef rcsnm=attdldcl appnm= "attribute def list decl"

    fullnm= "attribute definition list declaration" mayadd clause= "b3000">

    <propdef subnode rcsnm=markup datatype=nodelist

    ac= "ssep comment entstart entend gendelm name nmtoken attvalue literal"

    clause= "b3001">

    <propdef irefnode rcsnm=asseltps appnm= "assoc element types"

    fullnm= "associated element types" datatype=nodelist ac=elemtype

    clause= "b3001">


94

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <desc>

属性定義リストが適用可能な要素型であって,その名前が属性定義リスト宣言に現れる順序で並べた

もの。これには未定義の要素型は含まれない。

    <propdef irefnode rcsnm=assnots appnm= "assoc  notations"

    fullnm= "associated notations" datatype=nodelist ac=notation clause=

"b3001">

    <classdef rcsnm=eltpdcl appnm= "element type decl"

    fullnm= "element type declaration" mayadd clause= "b2000">

    <propdef subnode rcsnm=markup datatype=nodelist

    ac= "ssep comment entstart entend gendelm name number" clause= "b2001">

    <propdef irefnode rcsnm=elemtype appnm= "element  type"

    fullnm= "element type" datatype=node ac=elemtype clause= "b2101">

    <classdef rcsnm=entdcl appnm= "entity decl" fullnm= "entity  declaration"

    mayadd clause= "a5000">

    <desc>

無視されなかった実体宣言。

    <propdef subnode rcsnm=markup datatype=nodelist

    ac= "entstart entend ssep comment gendelm name rname literal attvalue"

    clause= "a5001">

    <propdef subnode rcsnm=entity datatype=node ac=entity clause= "a5201">

    <desc>

実体宣言で宣言済みの実体。

    <when>

実体が無指定時実体と宣言されている場合には,ヌル値をとる。

    <classdef rcsnm=notdcl appnm= "notation  decl"

    fullnm= "notation declaration" mayadd clause= "b4000">

    <propdef subnode rcsnm=markup datatype=nodelist

    ac= "entstart entend ssep comment literal name rname" clause= "b4001">

    <propdef irefnode rcsnm=notation datatype=node ac=notation clause= "b4001">

    <desc>

宣言済みの記法。

    </psmodule〉

<!--文書インスタンス関係の SGML 文書文字列(SDS)クラス及び特性-->

    <psmodule rcsnm=instsds0 fullnm= "instance SGML document string level 0">

    <propdef derived rcsnm=included datatype=boolean cn=element>

    <desc>

要素が取り込み済み下位要素の場合にだけ真となる。

    <propdef derived rcsnm=momitend appnm= "must omit end tag" datatype=boolean

    cn=element clause= "b2209">

    <desc>


95

X 4153 : 1998 (ISO/IEC 10179 : 1996)

要素が宣言内容として EMPTY をもつ場合又は明示的に内容参照をもつ場合であって,要素の終了タ

グを省略した場合だけ真となる。

    </psmodule>

    <psmodule rcsnm=instsds1 fullnm= "instance SGML document string level 1"

    dependon= "instsds0  basesds1">

<!--要素-->

    <propdef subnode optional rcsnm=starttag appnm= " start tag" datatype=nodelist

    ac= "gendelm name ssep entstart entend literal attvalue" cn=element

    clause= "74001">

    <note>

最初の子が区切り子 stago のためのクラス gendelm のノードとなる。クラス entstart,クラス entend の

ノードは,文書型指定だけにおいて出現する。

    <when>

開始タグをその要素に指定した場合。

    <propdef subnode optional rcsnm=endtag appnm= "end tag" datatype=nodelist

    ac=  "gendelm name ssep entstart entend ignmrkup" cn=element clause= "75001">

    <note>

最初の子が区切り子 etago 又は区切り子 net のためのクラス gendelm のノードとなる。

クラス entstart,

クラス entend 及びクラス ignmrkup のノードは,文書型指定だけにおいて出現する。

    <when>

データタグではなく,終了タグをその要素に対して指定した場合。

<!--データ文字-->

    <propdef rcsnm=movedre appnm= "moved re" datatype=boolean cn=datachar

    clause= "7610a">

    <desc>

文字が文字 RE であって,実際に生じた位置以外の場所で出現しなければならない場合だけ真となる。

    <note>

クラス repos のノードは,実際に文字 RE が出現した場所を示す。

    <propdef irefnode rcsnm=repos appnm= "re position" datatype=node cn=datachar

    ac=repos clause= "7610a">

    <desc>

文字 RE が,実際に生じた場所。

    <when>

文字が文字 RE であって,実際に生じた位置以外の場所で出現しなければならない場合。

    <propdef subnode optional rcsnm=markup datatype=nodelist

    ac= "gendelm name ssep entstart entend refendre shortref" cn=extdata

    clause= "94401  94402">

    <desc>

実体参照のマーク付け。

    <note>


96

X 4153 : 1998 (ISO/IEC 10179 : 1996)

クラス ssep,クラス entstart 及びクラス entend は,名前付き実体参照内の名前グループだけにおいて

出現する。

    <classdef rcsnm=ignrs appnm= "ignored rs" clause= "76101">

    <desc>

ISO 8879

の 7.6.1 の規則に従って,無視された文字 RS。

    <propdef subnode optional rcsnm=namecref appnm= "named char ref"

    fullnm= "named character reference" datatype=nodelist

    ac= "gendelm name refendre" clause= "95001">

    <when>

文字が,名前付き文字参照の置換の場合。

    <classdef rcsnm=ignre appnm= "ignored re" clause= "76100">

    <desc>

ISO 8879

の 7.6.1 の規則に従って,無視された内容の中の文字 RE。

    <note>

文字 RE が無視された場所ではなく,元々生じた場所で出現する。

    <propdef subnode optional rcsnm=namecref appnm= "named char ref"

    fullnm= "named character reference" datatype=nodelist

    ac= "gendelm name refendre" clause= "95001">

    <when>

文字は,名前付きの文字参照の置換の場合。

    <classdef rcsnm=repos appnm= "re position" clause= "7610a">

    <desc>

ISO 8879

の 7.6.1 の規則によって,本来の出現位置とは異なる位置で出現した文字 RE の本来の出現位

置。

    <note>

クラス repos の各ノードに関して,特性 movedre が真のクラス character のノードが一つある。

    <propdef irefnode rcsnm=re appnm= "record end" datatype=node ac=datachar

    clause= "7610a">

    <desc>

クラス repos のための文字。

    </psmodule>

<!--データタグ関係の抽象クラス及び特性-->

    <psmodule rcsnm=dtgabs fullnm= "datatag abstract" dependon=baseabs>

    <propdef derived rcsnm=datatag datatype=boolean cn=element clause= "73201"

    <desc>

データタグがその要素の終了タグとして働く場合にだけ真となる。

    <note>

データタグを構成するデータ文字は,それを含む要素の内容中で要素に続く。

    <propdef rcsnm=dtgtemps appnm= "data tag templates" datatype=strlist

    cn=elemtype clause= "b2444">


97

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <when>

モデル群が,データタグ群の場合。

    <propdef rcsnm=dtgptemp appnm= "data tag padding template" datatype=string

    cn=elemtype clause= "b2445">

    <when>

モデル群が,データタグ群であって,そのデータタグ形式が,データタグ詰めテンプレートを含む場

合。

    </psmodule>

<!--

ランク関係の抽象クラス及び特性-->

    <psmodule rcsnm=rankabs fullnm= "rank abstract" dependon=prlgabsl>

    <propdef derived rcsnm=ranksuff appnm= "rank suffix" datatype=string

    cn=elemtype clause= "b2114">

    <when>

要素型宣言の要素型が,ランク添字を含んでいる場合。

    <propdef rcsnm=rankstem appnm= "rank stem" datatype=string cn=elemtype

    clause= "b2113">

    <when>

要素型宣言の要素型が,ランク要素又はランク群を使用する場合。

    <propdef rcsnm=rankgrp appnm= "rank group" datatype=strlist cn=elemtype

    clause= "b2112">

    <desc>

ランク群内のランク核。

    <when>

要素型宣言が,ランク群を含む場合。

    <classdef rcsnm=rankstem appnm= "rank stem "clause= "b2113">

    <propdef rcsnm=stem datatype=string strlex=name strnorm=general

    clause= "b2113">

    <desc>

ランク核の名前。

    <propdef irefnode rcsnm=elemtps appnm= "element  types"

    datatype=nodelist ac=elemtype clause= "b2112">

    <desc>

ランク核となる要素型。

    </psmodule>

<!--短縮参照関係の抽象クラス及び特性-->

    <psmodule rcsnm=srabs fullnm= "shortref abstract" dependon=prlgabs0>

    <propdef subnode rcsnm=emptymap appnm= "empty short ref map"

    fullnm= "empty short reference map" datatype=node ac=srmap cn=sgmlcsts

    clause= "b6004">

    <desc>


98

X 4153 : 1998 (ISO/IEC 10179 : 1996)

空の短縮参照対応。

    <propdef subnode rcsnm=srmaps appnm= "short ref maps"

    fullnm= "short reference maps" datatype=nmndlist ac=srmap acnmprop=name

    cn=doctype clause= "b1006">

    <note>

宣言値#EMPTY をもつ短縮参照対応は含まない。

    <propdef rcsnm=srmapnm appnm= "short ref map name"

    fullnm= "short reference map name" datatype=string strlex=rniname

    strnorm=general cn=elemtype clause= "b6004">

    <when>

要素型に関連付けして,短縮参照対応が存在する場合。

    <propdef irefnode rcsnm=srmap appnm= "short ref map"

    fullnm= "short reference map" datatype=node ac=srmap cn=elemtype

    clause= "b6101">

    <when>

要素型に関連付けして,短縮参照対応が存在する場合。

    <classdef rcsnm=srmap appnm= "short ref map" fullnm= "short reference map"

    clause= "b5000">

    <propdef rcsnm=name datatype=string strlex=name strnorm=general clause=

"b5002">

    <when>

対応が,暗黙のうちに宣言値#EMPTY と宣言されていない場合。

    <propdef subnode rcsnm=map datatype=nmndlist ac=srassoc acnmprop=shortref

    clause= "b5004">

    <classdef rcsnm=srassoc appnm= "short ref assoc"

    fullnm= "short reference association" clause= "b5004">

    <propdef rcsnm=shortref appnm= "short  ref"

    fullnm= "short reference delimiter" datatype=string strnorm=general

    clause= "b5004">

    <propdef rcsnm=entname appnm= "entity name" datatype=string strlex=name

    strnorm=entity clause= "b5004">

    <propdef irefnode rcsnm=entity datatype=node ac=entity clause= "b5001">

    </psmodule>

<!--短縮参照関係の SGML 文書文字列 (SDS) クラス及び特性-->

    <psmodule rcsnm=srsds fullnm= "shortref SGML document string

    dependon=basesdsl>

    <classdef rcsnm=usemap appnm= "short ref use decl"

    fullnm= "short reference use declaration" conprop=markup clause= "b6000">

    <propdef subnode rcsnm=markup datatype=nodelist

    ac= "entstart entend ssep comment gendelm name rname ignmrkup"


99

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    clause= "b6001">

    <note>

最初の子は,区切り子 mdo のためのクラス gendelm のノードとなり,最後の子は区切り子 mdc のため

のクラス gendelm のノードとなる。

    <propdef irefnode rcsnm=asseltps appnm= "assoc element types"

    fullnm= "associated element types" datatype=nodelist ac=elemtype

    clause= "a1501">

    <note>

SGML

では,既に短縮参照対応と関連付けた要素型を含まないと規定している。

    <when>

短縮参照使用宣言が,関連付けられた要素型を含む場合。

    <propdef irefnode rcsnm=srmap datatype=node ac=srmap clause= "b6002">

    <classdef rcsnm=shortref appnm= "short  ref"

    fullnm= "short reference delimiter" clause= "e4620">

    <propdef rcsnm=origdelm appnm= "original  delim"

    fullnm= "original delimiter" datatype=string clause= "96601">

    <desc>

入力と同じ短縮参照区切り子。

    <propdef subnode optional rcsnm=namecref appnm= "named char ref"

    fullnm= "named character reference" datatype=nodelist

    ac= "gendelm name refendre" clause= "95001">

    <when>

区切り子の最初の文字を,名前付き文字参照で入力した場合。

    <classdef rcsnm=srmapdcl appnm= "short ref map decl"

    fullnm= "short reference mapping declaration" mayadd clause= "b5000">

    <propdef subnode rcsnm=markup datatype=nodelist

    ac= "entstart entend ssep comment gendelm name rname literal"

    clause= "b5001">

    <note>

最初の子は区切り子 mdo のためのクラス gendelm のノードとなり,最後の子は区切り子 mdc のための

クラス gendelm のノードとなる。

    <propdef irefnode rcsnm=map datatype=node ac=srmap clause= "b5001">

    </psmodule>

<!--

連結関係の抽象クラス及び特性-->

    <psmodule rcsnm=linkabs fullnm= "link abstract" dependon=prlgabs0>

    <propdef subnode rcsnm=emptylks appnm= "empty link set" datatype=node ac=

linkset

    cn=sgmlcsts clause= "c3004">

    <desc>

現在の連結集合を,無効にするために使用した空の連結集合。


100

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <propdef subnode optional rcsnm=simplelk appnm= "simple link info"

    fullnm= "simple link information" datatype=nmndlist ac=simplelk

    acnmprop=linktype cn=element clause= "c1431">

    <when>

要素は文書要素で,活性単純連結処理がある。

    <propdef irefnode rcsnm=linkatts appnm= "link  attributes"

    datatype=nmndlist ac=attasgn acnmprop=name cn=element clause= "c1402">

    <desc>

属性割当てのリスト。その要素に関して宣言した各連結属性の各々に対して一つずつ存在する。

    <note>

連結属性の起点は,連結規則となる。

    <propdef derived rcsnm=rsltgi appnm= "result  gi"

    fullnm= "result element generic identifier" datatype=string strlex=name

    strnorm=general cn=element clause= "c2202">

    <when>

適用可能な明示的な連結規則が存在し,その結果要素が暗黙指定でない場合。

    <propdef irefnode rcsnm=rsltelem appnm= "result element type"

    datatype=node ac=elemtype cn=element clause= "c2202">

    <when>

適用可能な明示的な連結規則が存在し,その結果要素が暗黙指定でない場合。

    <propdef irefnode rcsnm=rsltatts appnm= "result  attributes"

    datatype=nmndlist ac=attasgn acnmprop=name cn=element clause= "c2203">

    <note>

属性の起点は,連結規則となる。

    <when>

適用可能な明示的な連結規則が存在し,その結果要素が暗黙指定でない場合。

    <propdef irefnode rcsnm=lksetinf appnm= "link set info"

    fullnm= "link set information" datatype=nodelist ac=linkrule cn=element

    clause= "c2205">

    <desc>

ソース要素型が,暗黙指定である現在連結集合内の連結規則。

    <when>

活性状態の明示的な連結処理が存在する場合。

    <propdef irefnode rcsnm=lksetinf appnm= "link set info"

    fullnm= "link set information" datatype=nodelist ac=linkrule cn=datachar>

    <desc>

ソース要素型が暗黙指定である現在連結集合内の連結規則。

    <when>

活性状態の明示的な連結処理及び内容中の文字出現がある場合。

    <classdef rcsnm=simplelk appnm= "simple link info"


101

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    fullnm= "simple link information" clause= "c1430">

    <propdef rcsnm=linktype appnm= "link type" datatype=string strlex=name

    strnorm=general clause= "c1001">

    <desc>

単純連結処理の連結型名。

    <propdef subnode rcsnm=atts appnm=attributes

    datatype=nmndlist ac=attasgn acnmprop=name clause= "c1402">

    <classdef rcsnm=linktype appnm= "link  type">

    <propdef rcsnm=name datatype=string strlex=name strnorm=general

    clause= "c1002">

    <propdef rcsnm=active datatype=boolean>

    <desc>

連結型が,活性状態の場合だけ真となる。

    <propdef rcsnm=ltkind appnm= "link type kind"

    fullnm= "kind of link type" datatype=enum clause= "c1001">

    <enumdef rcsnm=simple>

    <enumdet rcsnm=implicit>

    <enumdef rcsnm=explicit>

    <propdef rcsnm=srcname appnm= "source document type name" datatype=string

    strlex=name strnorm=general clause= "c1302">

    <propdef irefnode rcsnm=source appnm= "source document type" datatype=node

    ac=doctype clause= "c1305  c1306">

    <note>

単純連結型に対して,常に基本文書型となる。

    <propdef rcsnm=rsltname appnm= "result document type name" datatype=string

    strlex=name strnorm=general clause= "c1303">

    <propdef irefnode rcsnm=result appnm= "result document type" datatype=node

    ac=doctype clause= "c1306">

    <when>

連結型が,明示的な連結型の場合。

    <propdef subnode rcsnm=inilkset appnm= "initial link set" datatype=node

    ac=linkset clause= "c2004">

    <when>

連結型が,単純型ではない場合。

    <propdef subnode rcsnm=idlkset appnm= "id link set" datatype=node ac=linkset

    clause= "c2300">

    <when>

連結型宣言部分集合が,ID 連結集合宣言を含む場合。

    <propdef subnode rcsnm=linksets appnm= "link sets" datatype=nmndlist

    ac=linkset acnmprop=name clause= "c1401">


102

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <note>

宣言値#INITIAL,宣言値#EMPTY 又は ID 連結集合は含まない。

    <classdef rcsnm=linkset appnm= "link set" conprop=lkrules clause= "c2000">

    <propdef rcsnm=name datatype=string strlex=name strnorm=general

    clause= "c2003">

    <when>

連結集合が,宣言値#INITIAL,宣言値#EMPTY 又は ID 連結集合のいずれでもない場合。

    <propdef subnode rcsnm=lkrules appnm= "link rules" datatype=nodelist

    ac=linkrule clause= "c2002">

    <classdef rcsnm=linkrule appnm= "link rule" clause= "c2002">

    <propdef rcsnm=assgis appnm= "assoc  gis"

    fullnm= "associated generic identifiers" datatype=strlist strlex=name

    clause= "c2101">

    <desc>

関連する要素型の名前。

    <when>

連結規則が,ソース要素型が暗黙指定の明示的な連結規則ではない場合。

    <propdef irefnode rcsnm=asseltps appnm= "assoc element types"

    fullnm= "associated element types" datatype=nodelist ac=elemtype

    clause= "c2101">

    <when>

連結規則が,ID 連結集合宣言に出現する場合。

    <propdef rcsnm=id fullnm= "unique identifier" datatype=string strlex=name

    strnorm=general clause= "c2301  ">

    <when>

連結規則が,ID 連結集合宣言に出現する場合。

    <propdef irefnode rcsnm=uselink datatype=node ac=linkset clause= "c2104">

    <when>

連結型が,USELINK パラメタを含む場合。

    <propdef rcsnm=uselknm appnm= "uselink name" datatype=string strlex=rniname

    strnorm=general clause= "c2104">

    <desc>

USELINK

パラメタによって名前付けられた連結集合。

    <when>

連結規則が USELINK パラメタを含む場合。

    <propdef derived rcsnm=postlkrs appnm= "postlink restore" datatype=boolean

    clause= "c2101">

    <desc>

連結規則が,POSTLINK パラメタとして宣言値#RESTORE を含む場合に真となる。

    <propdef irefnode rcsnm=postlkst appnm= "postlink set" datatype=node


103

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    ac=linkset clause= "c2101">

    <when>

連結集合指定が,宣言値#RESTORE を指定しない場合。

    <propdef rcsnm=postlknm datatype=string strlex=rniname strnorm=general

    clause= "c2101">

    <desc>

POSTLINK

に続いて,連結集合指定に指定したトークン。

    <when>

連結規則が POSTLINK パラメタを含む場合。

    <propdef subnode rcsnm=linkatts appnm= "link  attributes"

    datatype=nmndlist ac=attasgn acnmprop=name clause= "c2102">

    <when>

連結規則が,ソース要素型に暗黙指定をもつ明示連結規則ではない場合。

    <propdef rcsnm=rsltgi appnm= "result  gi"

    fullnm= "result element generic identifier" datatype=string strlex=name

    strnorm=general clause= "c2202">

    <when>

連結規則が,結果要素型に暗黙指定をもたない明示連結規則の場合。

    <propdef irefnode rcsnm=rsltelem appnm= "result element type" datatype=node

    ac=elemtype clause= "c2202">

    <when>

連結規則が,結果要素型に暗黙指定をもたない明示連結規則の場合。

    <propdef subnode rcsnm=rsltatts appnm= "result  attributes"

    datatype=nmndlist ac=attasgn acnmprop=name clause= "c2203">

    <when>

連結規則が,結果要素型に暗黙指定をもたない明示連結規則の場合。

    </psmodule>

<!--連結関係の SGML 文書文字列 (SDS) クラス及び特性-->

    <psmodule rcsnm=linksds fullnm= "link SGML document string"

    dependon=basesdsl>

    <propdef irefnode rcsnm=lksetdcl appnm= "link set decl"

    fullnm= "link set declaration" datatype=node ac= "lksetdcl  idlkdcl"

    cn=linkset clause= "c2001">

    <when>

連結集合が宣言値#EMPTY ではない場合。

    <propdef irefnode rcsnm=lktpdcl appnm= "link type decl"

    fullnm= "link type declaration" datatype=node ac=lktpdcl cn=linktype

    clause= "c1001">

    <classdef rcsnm=lktpdcl appnm= "link type decl" fullnm= "link  type

declaration"


104

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    mayadd clause= "c1000">

    <propdef subnode rcsnm=markup datatype=nodelist

    ac= "ssep comment name rname literal msstart msignch msend

           entstart entend pi comdcl entdcl attdldcl lksetdcl idlkdcl"

           clause= "c1001">

    <propdef irefnode rcsnm=linktype appnm= "link type" datatype=node

    ac=linktype>

    <propdef subnode rcsnm=entity datatype=node ac=entity clause= "c1004">

    <when>

連結型定義が,外部識別子を含む場合。

    <classdef rcsnm=lksetdcl appnm= "link set decl" fullnm= "link set declaration"

    mayadd clause= "c2000">

    <propdef subnode rcsnm=markup datatype=nodelist

    ac= "entstart entend ssep comment gendelm name rname literal attvalue"

    clause= "c2001">

    <propdef irefnode rcsnm=linkset appnm= "link set" datatype=node

    ac=linkset clause= "c2001">

    <classdef rcsnm=idlkdcl appnm= "id link set decl"

    fullnm= "ID link set declaration" mayadd clause= "c2300">

    <propdef subnode rcsnm=markup datatype=nodelist

    ac= "entstart entend ssep comment gendelm name rname literal attvalue"

    clause= "c2301">

    <propdef irefnode rcsnm=linkset appnm= "link set" datatype=node ac=linkset

    clause= "c2301">

    <classdef rcsnm=uselink appnm= "link set use decl"

    fullnm= "link set use declaration" conprop=markup clause= "c3000">

    <desc>

無視しなかった連結集合指定宣言。

    <propdef subnode rcsnm=markup datatype=nodelist

    ac= "entstart entend ssep comment gendelm name rname ignmrkup"

    clause= "c3001">

    <note>

最初の子は,区切り子 mdo のためのクラス gendelm のノードとなり,最後の子は区切り子 mdc のため

のクラス gendelm のノードとなる。

    <propdef derived rcsnm=restore datatype=boolean clause= "c3002">

    <desc>

連結集合指定に,宣言値#RESTORE を指定した場合に真となる。

    <propdef irefnode rcsnm=linkset datatype=node ac=linkset clause= "c3002">

    <when>

連結集合指定に,宣言値#RESTORE を指定しなかった場合に真となる。


105

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    <propdef rcsnm=lksetnm datatype=string strlex=rniname strnorm=general clause

= "c3002">

    <desc>

連結集合指定に指定したトークン。

    <propdef rcsnm=linktpnm appnm= "link type name" datatype=string

    strlex=name strnorm=general clause= "c3001">

    <propdef irefnode rcsnm=linktype appnm= "link type" datatype=node

    ac=linktype clause= "c3001">

    </psmodule>

<!--副文書関係の抽象クラス及び特性-->

    <psmodule rcsnm=subdcabs fullnm= "subdoc abstract" dependon=baseabs>

    <classdef rcsnm=subdoc appnm=subdocument fullnm= "reference to subdocument">

    <desc>

副文書実体への参照の結果。

    <propdef rcsnm=entname appnm= "entity name" datatype=string strlex=name

    strnorm=entity clause= "a5101">

    <propdef irefnode rcsnm=entity datatype=node ac=entity clause= "c5501">

    </psmodule>

<!--副文書関係の SGML 文書文字列 (SDS) クラス及び特性-->

    <psmodule rcsnm=subdcsds fullnm= "subdoc SGML document string"

    dependon= "basesds1  subdabs">

    <propdef subnode optional rcsnm=markup datatype=nodelist

    ac= "gendelm name ssep entstart entend refendre shortref" cn=subdoc

    clause= "94401">

    <desc>

実体参照のマーク付け。

    <note>

クラス ssep,クラス entstart 及びクラス entend は,名前付き実体参照内の名前グループだけにおいて

出現可能とする。

    </psmodule>

<!--公式公開識別子関係の抽象クラス及び特性-->

    <psmodule rcsnm=fpiabs fullnm= "formal public identifier abstract"

    dependon=baseabs>

    <propdef subnode optional rcsnm=fpi appnm= "formal public id"

    fullnm= "formal public identifier" datatype=node ac=fpi cn=extid

    clause= "a2001">

    <when>

SGML

宣言において,FORMAL YES を指定した場合。

    <classdef rcsnm=fpi appnm= "formal public id" fullnm= "formal  public

identifier


106

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    clause= "a2000">

    <note>

このクラスが提供する文字列を値にもつ各特性の値文字列は,生成規則で指定された最小化データを

含む。これには"//","−//","+//"又は文字 s を含まない。

    <propdef rcsnm=ownertp appnm= "owner type" datatype=enum clause= "a2100">

    <desc>

所有者識別子の型。

    <enumdef rcsnm=iso>

    <enumdef rcsnm=regist appnm=registered>

    <enumdef rcsnm=unregist appnm=unregistered>

    <propdef rcsnm=ownerid appnm= "owner id" fullnm= "owner  identifier"

    datatype=string strlex=mindata clause= "a2100">

    <propdef rcsnm=textclas appnm= "text class" fullnm= "public text class"

    datatype=enum clause= "a2210">

    <enumdef rcsnm=capacity>

    <enumdef rcsnm=charset>

    <enumdef rcsnm=document>

    <enumdef rcsnm=dtd>

    <enumdef rcsnm=elements>

    <enumdef rcsnm=entities>

    <enumdef rcsnm=lpd>

    <enumdef rcsnm=nonsgml>

    <enumdef rcsnm=notation>

    <enumdef rcsnm=shortref>

    <enumdef rcsnm=subdoc>

    <enumdef rcsnm=syntax>

    <enumdef rcsnm=text>

    <propdef rcsnm=unavail appnm=unavailable datatype=boolean clause= "a2202">

    <desc>

利用不可テキスト指示子が指定された場合だけ真となる。

    <propdef rcsnm=textdesc appnm= "text  description"

    fullnm= "public text description" datatype=string strlex=mindata clause=

"a2221">

    <propdef rcsnm=textlang appnm= "text  language"

    fullnm= "public text language" datatype=string clause= "a2231">

    <when>

テキスト識別子が,公開テキスト言語を含む場合。

    <propdef rcsnm=textdseq appnm= "text designating sequence"

    fullnm=  "public text designating sequence" datatype=string clause= "a2241">

    <when>


107

X 4153 : 1998 (ISO/IEC 10179 : 1996)

テキスト識別子が,公開テキスト指示順序を含む場合。

    <propdef rcsnm=textdver appnm= "text display version"

    fullnm= "public text display version" datatype=string clause= "a2251">

    <when>

テキスト識別子が,公開テキスト表示版を含む場合。つまり,公開テキスト言語又は公開文指定列の

あとに//が存在する。

    </psmodule>

<!--文字列正規化規則-->

    <normdef rcsnm=general sd=SGML clause= "d4506">

    <desc>

宣言した具象構文の一般大文字小文字置換。

    <normdef rcsnm=entity sd=SGML clause= "d4506">

    <desc>

宣言した具象構文の実体大文字小文字置換。

    <normdef rcsnm=rcsgener sd=SGML clause= "d4506">

    <desc>

参照具象構文の一般大文字小文字置換。

    <datadef rcsnm=integer lextype=integer>

    <datadef rcsnm=boolean lextype=boolean>

    <datadef rcsnm=strlist fullnm= "string list" listof=string lextype=strlist>

    <datadef rcsnm=intlist fullnm= "integer list" listof=int lextype=intlist>

<!--字句型-->

<!--データ型-->

    <lexdef ltn=boolean norm model= "[01]">

    <lexdef ltn=integer unorm model= "'0' | marker">

    <lexdef ltn=intlist norm model= "integer+">

    <lexdef ltn=literal spec sd=SGML clause= "96107">

    <desc>

具象構文で宣言したとおりに区切ったリテラル。SGML 文書と同じく,リテラル内で区切り子文字列

を入力するために文字参照を使用してよい。

    <lexdef ltn=strlist  norm  model= "literal, (', ',literal)*">

    <desc>

データベース及び表計算プログラムで支持している,いわゆる“カンマ区切りの ASCII”形式の文字

列リスト。リテラルは,区切り子を除き,各文字列に適用可能な字句型に適合する。

<!--他の字句型-->

    <lexdef ltn=mindata spec sd=SGML clause= "a1702">

<desc>

最小化データ。

    <lexdef ltn=NAME spec sd=SGML clause= "93001">

<desc>

宣言した具象構文における名前。

    <lexdef ltn=NMTOKEN spec sd=SGML clause= "93004">


108

X 4153 : 1998 (ISO/IEC 10179 : 1996)

<desc>

宣言した具象構文での名前トークン。

    <lexdef ltn=number spec sd=SGML clause= "93002"〉

<desc>

宣言した具象構文の数値。

    <lexdef ltn=nmchar spec sd=SGML clause= "92103">

<desc>

宣言した具象構文の名前文字。

    <lexdef ltn=ATTNAME nmsp provider=element property=atts sd=SGML clause=

"b3201">

<desc>

要素の属性の名前。

    <lexdef ltn=attspecs spec sd=SGML clause= "79001">

<desc>

属性指定リスト。

    <lexdef ltn=ENTITY nmsp provider=sgmldoc property=entities sd=SGML

    clause= "a5101">

<desc>

一般実体名。

    <lexdef ltn=IDREF nmsp provider=sgmldoc property=elements sd=SGML

    clause= "79403">

<desc>

(文書中で指定された)要素の ID

    <lexdef ltn=GI nmsp provider=doctype property=elemtps sd=SGML clause=

"78001">

<desc>

(dtd : effecdve が真の場合)要素型名。

    <lexdef ltn=rniname spec sd=SGML>

<desc>

区切り子 RNI に続く,オプションの名前。

9.7

DSSSL SGML

グローブ設計

DSSSL

では,DSSSL 指定内の体系形式 sgml-grove-plan によって指定する単一のグローブ設計を規定す

る。7.1.2 を参照のこと。

10.

標準文書照会言語 (SDQL) 

標準文書照会言語 (SDQL) は,データ型 node-list 及びデータ型 named-node-list の二つを式言語に追加す

る。SDQL は式に次の構文を追加する。SDQL では,式 expression が出現可能なすべての文脈において,式

special-query-expression

が出現してよい。

核照会言語と呼ぶ SDQL の部分集合を,10.2.4 において定義する。

データ型 node-list は,グローブ内の 0 個以上のノードの順序リストで表現する。

備考1.  ノードを表す型はない。一つのノードは,一つの要素をもつ node-list で示す。

2.

ノードリストは,典型的には遅延を用いて実装する。つまり,ノードリストの内部表現はノ

ードのリストではなく,そのノードリストを構成する指定の表現となる。例えば,応用が手

続き node-list-count を使用した場合,ノードリストを構成するのは非効率的で,単純に幾つ

のノードがノードリストの指定に合致するかを数えたほうがよい。

単一の要素をもつノードリストを,単一要素ノードリストと呼ぶ。

データ型 named-node-list は,データ型 node-list の下位型であって,各要素がノードリスト内のそのノー

ドを一意に識別する文字列を値とする特性をもつ。

引数表記において,次の規約を用いる。


109

X 4153 : 1998 (ISO/IEC 10179 : 1996)

a)

n1

を,ノードリストの場合に用いる。

b)  sn1

を,単一要素ノードリストの場合に用いる。

c)

nn1

を,名前付きノードリストの場合に用いる。

10.1

基本手続き

この 10.1 内の手続きは,基本手続きとする。他のすべての SDQL 手続きは,これらの手続きに関連して

定義できる。しかし,10.1 の手続きは,他の手続きに関連して定義できない。

10.1.1

応用束縛

    (current-node)

単一要素ノードリストを返す。この手続きの意味は,その手続きが出現した SDQL 式の文脈によって定

義する。

    (current-root)

単一要素ノードリストを返す。この手続きの意味は,その手続きが出現した SDQL 式の文脈によって定

義する。

10.1.2

ノードリスト

    (node-list? obj)

引数 obj がノードリストの場合#t を,その他の場合に#f を返す。

    (node-list-empty? nl)

引数 nl が空ノードリストの場合に#t を,その他の場合に#f を返す。

    (node-list-first nl)

引数 nl が空でない場合に,その最初の要素を含むノードリストを,その他の場合に空ノードリストを返

す。

    (node-list-rest n1)

引数 nl が少なくとも一つの要素をもつ場合に,その最初の要素以外の要素を含むノードリストを返却し,

その他の場合に空ノードリストを返す。

    (node-list nl

1

 nl

2

 ...)

引数 nl

1

,引数 nl

2

,...のノードリストを結合したノードリストを返す。引数がない場合には,空ノードリ

ストを返す。

    (node-list=? nl

1

 nl

2

)

引数 nl

1

及び引数 nl

2

が,同じ要素を同じ順序で含むノードリストの場合に#t を,その他の場合に#f を返

す。

    (node-list-no-order nl)

引数 nl と同じ要素を含むノードリストを返すが,要素の順序は規定しない。

備考  実装は, (node-list-no-order q)  を より効率よく実装できる。

10.1.3

名前付きノードリスト

    (named-node-list? obj)

引数 obj が名前付きノードリストの場合に#t を,その他の場合に#f を返す。

    (named-node string nnl)

引数 nnl において,名前が引数 string に等しいノードがある場合,そのノードを含む単一要素ノードリ

ストを返す。存在しない場合,空ノードリストを返す。引数 string,は,引数 nnl の要素と比較する以前に,

引数 nnl に関連する文字列正規化規則に基づいて正規化する。


110

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    (named-node-list-normalize string nnl symbol)

引数 symbol によって指定するクラスに適用可能な,引数 nnl の正規化規則に基づいて,引数 string を正

規化して返す。

    (named-node-list-names nnl)

引数 nnl の各要素の名前のリストを,要素の配列順で返す。結果は引数 nnl と同じ数の要素をもつ,文

字列のリストとなる。

10.1.4

エラー報告

    (node-list-error string nl)

手続き error と類似の方法でエラーを発生する。この手続きによってエラーが発生した場合,処理系は引

数 nl ノードリストに関してエラーが発生したことを利用者に報告することが望ましい。報告の方法は,処

理系依存とする。

10.1.5

応用名変換

SDQL

のあらゆる文脈において,応用名は次の通常変換の対象となる。

a)

スペースをハイフンに置き換える。

b)

宣言したデータ型が型 boolean のオブジェクトの特性の場合,その応用名に疑問符(?)を追加する。

10.1.6

特性値

    (node-property propname snl #!key default: null: rcs?:)

引数 snl で示すノードが,特性 propname に関して開示する特性の値を返す。ノードが特性 propname 

開示せず,引数 default :  が指定されている場合には,その値を返す。引数 default :  が指定されていない場

合,エラーを発生する。ノードがその特性についてヌル値を開示し,引数 null : に値が指定されている場

合,その値を返す。引数 null :  に値が指定されず,default :  に値が指定されている場合,default :  で指定し

た値を返す。それ以外の場合エラーを発生する。

引数 propname は,シンボル又は文字列であって,応用名又は特性の RCS 名のいずれかを示す。引数

propname

と特性名の比較は,文字の大小の区別なしで行う。

特性値は,その抽象データ型に基づいて式言語オブジェクトとして表現する。

a)

抽象文字型 (abstract character) は,型 character のオブジェクトで表現する。

b)

抽象文字列型 (abstract string) は,型 string のオブジェクトで表現する。

c)

抽象型 boolean のオブジェクト (abstract boolean) は,型 bool のオブジェクトで表現する。

d)

抽象整数型 (abstract integer) は,型 integer のオブジェクトで表現する。

e)

抽象整数リスト  (abstract integer list)  は,整数のリストで表現する。

f)

抽象文字列リスト  (abstract string list)  は,文字列のリストで表現する。

g)

列挙型 (enumeration) は,列挙値の応用名を通常変換した名前のシンボルで表現する。

h)

構成要素名 (component name) は,シンボルで表現する。シンボルの名前は,10.1.5 に規定する変換を

施した後の応用名とする。ただし,引数 rcs?に真の値が指定されている場合,RCS 名を用いる。

i)

抽象構成要素名リスト  (abstract component name list)  は,各構成要素の名前を表現するシンボルのリス

トで表現する。

j)

抽象ノード (abstract node) は,単一要素ノードリストで表現する。

k)

抽象ノードリスト (abstract nodelist) は,型 node-list のオブジェクトで表現する。

l)

抽象名前付きノードリスト (abstract nmndlist) は,型 named-node-list のオブジェクトで表現する。

m)

ヌル値は,式言語表現をもたない。


111

X 4153 : 1998 (ISO/IEC 10179 : 1996)

10.1.7  SGML

グローブ構築

    (sgml-parse string #!key active: parent:)

SGML

文書又は副文書を解析し,SGML 特性集合を用いて構成したグローブの根となるノードを含む単

一要素ノードリストを返す。引数 string は,SGML 文書実体又は SGML 副文書実体のシステム識別子とす

る。引数 active :  は,活性状態の DTD 又は LPD の名前を指定する文字列とする。活性状態の DTD は,

高々一つでなければならない。引数 parent : を指定した場合,実体は SGML 副文書実体として解析する。

引数 parent : の値は,単一要素ノードリストであって,副文書がグローブ内のその位置で宣言されたとし

て取り扱う。この手続きは,応用依存の方式で決定する無指定時グローブ設計を用いる。

10.2

派生手続き

幾つかの手続きに関して,式言語の形式的定義を提供する。それらは,簡素化のためエラーの処理を含

んでいない。正しい実装では,手続き原型及び手続き記述が示す型に,引数が適合することを最初に検証

する必要がある。

10.2.1  HyTime

支援

HyTime

支援の機能を,スタイル言語又は変換言語で用いるには,機能 hytime を必要とする。抽象デー

タ型 grovepos は,各要素が次のいずれかとなるリストで表現する。

a)

整数

b)

シンボル

c)

シンボル及び文字列から成るリスト

d)

シンボル及び整数から成るリスト

    (value-proploc propname snl #!key apropsrc?: default:)

引数 snl の要素が,引数 propname で示す名前をもつ特性に関して開示する値を返す。引数 propname は,

シンボル又は文字列であって,その解釈は手続き node-property と同じとする。引数 snl の要素が,引数

propname

を名前にもつ特性に関して値を開示しない場合,又はヌル値を開示する場合に,引数 default :  が

指定してあればその値が返し,その他の場合エラーとする。引数 apropsrc? :  が真の場合,JIS X 4155 の体

系形式 proploc に関して,属性 apropsrc に属性値 apropsrc に指定するのと同じ効果をもつ。

    (list-proploc propname nl #!key apropsrc?: ignore-missing?:)

引数 nl の各要素に関して,引数 propname の名前をもつ特性が開示する値を取り出し,そのリストを返

す。引数 propname は,シンボル又は文字列であって,その解釈は手続き node-property と同じとする。引

数 nl の幾つかの要素が,引数 propname を名前にもつ特性に関して値を開示していない場合,又はヌル値

を開示している場合には,引数 ignore-missing? : が真なら,結果のリストはその要素に対応するオブジェ

クトを含まない。引数 ignore-missing? :  が偽であればエラーを発生する。引数 apropsrc? :  の要素が真の場

合,JIS X 4155 の体系形式 proploc に関して,属性 apropsrc に属性値 apropsrc に指定するのと同じ効果をも

つ。

    (node-list-proploc propname nl #!key apropsrc?: ignore-missing?:)

引数 nl の要素であって,引数 propname の名前をもつ特性を開示する各要素の値を結合したノードリス

トを返す。引数 propname は,シンボル又は文字列であって,その解釈は手続き node-property と同じとす

る。引数 nl の各要素において,引数 propname が指定する特性は型 nodal でなければならない。引数 nl 

幾つかの要素が,引数 propname を名前にもつ特性に関して値を開示していない場合,又はヌル値を開示

している場合には,引数 ignore-missing? : が真なら,結果のリストはその要素に対応するオブジェクトを

含まず,引数 ignore-missing? :  が偽であればエラーを発生する。引数 apropsrc? :  の要素が真の場合,JIS X 


112

X 4153 : 1998 (ISO/IEC 10179 : 1996)

4155

の体系形式 proploc に関して,属性 apropsrc に属性値 apropsrc 属性を指定するのと同じ効果をもつ。

    (listloc dimlist nl #!key overrun:)

    (listloc dimlist list #!key overrun:)

    (listloc dimlist string #!key overrun:)

JIS X 4155

で定義する,体系形式 listloc と同一の方法で第二引数から要素を特定する。第二引数の型に

従って,ノードリスト,リスト又は文字列を返す。引数 dimlist は,整数のリストとする。引数 overrun :  は,

シンボル error,シンボル wrap,シンボル truncate,シンボル ignore のいずれかを値とする。無指定時は,

シンボル error とする。

    (nameloc nmlist nnl #!key ignore-missing?:)

引数 nmlist の各要素に対して一つの要素を含むノードリストを返す。ここで引数 nmlist は,文字列,シ

ンボル,シンボル又は文字列から成るリストのいずれかとする。引数 nmlist の任意の要素が,引数 nl のう

ちの幾つかの名前と一致しない場合,引数 ignore-missing? :  が真でなければエラーとなる。

    (groveloc list nl #!key overrun:)

JIS X 4155

が定義する,体系形式 groveloc と同一の方法で探索し,結果のノードリストを返す。引数 list

は,抽象データ型 grovepos の表現形式と同じ形式のリストとする。overrun :  の解釈は,listloc と同様とす

る。

    (treeloc marklist nl #!key overrun: treecom?:)

JIS X 4155

が定義する,体系形式 treeloc と同一の方法で探索し,結果のノードのリストを返す。引数

marklist

は,整数のリストとする。引数 overrun : の解釈は,listloc と同一とする。引数 treecom? : が真の

場合,属性値 treecom をもつ treecom 属性に対応する。

    (pathloc dimlist nl #!key overrun: treecom?:)

JIS X 4155

が定義する,体系形式 pathloc と同一の方法で探索し,結果のノードリストを返す。引数 dimlist

は,整数のリストとする。引数 overrun :  の解釈は,listloc と同一とする。引数 treecom? :  が真の場合,属

性値 treecom をもつ treecom 属性に対応する。

    (relloc-anc dimlist nl #Ikey overrun:)

    (relloc-esib dimlist nl #!key overrun:)

    (relloc-ysib dimlist nl #!key overrun:)

    (relloc-des dimlist nl #!key overrun:)

JIS X 4155

が定義する,体系形式 relloc と同一の方法で探索し,結果のノードリストを返す。手続き

relloc-anc

,手続き relloc-esib,手続き relloc-ysib,及び手続き relloc-des は,それぞれ属性 relation に,属性

値 anc,属性値 esib,属性値 ysib,及び属性値 des を指定した場合に対応する。引数 dimlist は,整数のリス

トとする。引数 overrun :  の解釈は,listloc と同一とする。

備考  親及び子の関係は,それぞれ手続き parent,手続き children で扱う。

    (datatok nl #!key filter: concat: catsrcsp: catressp: tokensep:

    ascp: stop: min: max: nlword: stem?:)

JIS X 4155

が定義する,体系形式 datatok と同一の方法で探索し,結果のノードリストを返す。

a)

引数 filter :  は,属性 filter に指定可能なシンボルのいずれかを値とする。

b)

引数 concat :  の解釈は,属性 concat と同様とし,シンボル catshi,シンボル catslo,シンボル cattk,シ

ンボル catshitk,シンボル catslotk,シンボル catrhitk,シンボル catrlotk,シンボル nconcat のいずれか

を値とする。


113

X 4153 : 1998 (ISO/IEC 10179 : 1996)

c)

引数 catsrcsp :,引数 catressp :,引数 tokensp :,引数 ascp :  の解釈は同名の属性と同様とし,文字列を

値とする。

d)

引数 nlword :  は,ISO 639 で定義する言語符号を指定する文字列とする。

e)

引数 stem? :  が真の場合,属性 nlword に属性値#STEM を指定するのと同じ効果をもつ。

f)

引数 stop :  は文字列リストを値とし,停止リストを意味する。無指定時値は,空リストとする。

g)

引数 min :  は整数を値とし,切捨てを行わない最小トークン長を意味する。

h)

引数 max :  は整数を値とし,切捨てを行わない最大トークン長を意味する。

    (make-grove string nl)

手続き make-grove は新規のグローブを構築し,グローブ根を含むノードリストを返す。引数 string は,

グローブ設計の名前とする。引数 nl は,入力テキストとする。

    (literal-match string nl #!key level: boundary:

    min-hits: max-hits:)

    (hylex-match string nl #!key norm?: level: boundary:

    min-hits: max-hits:)

引数 nl の各要素のデータ内で見つかった,重複しない合致ごとに,データトークン化特性集合を用いて

構築した,一つのトークン化文字列ノードを含む新規のグローブを構築する。すべてのトークン化した文

字列ノードをノードリストとして返す。

a)

引数 boundary : の解釈は,JIS X 4155 が定義する要素 HyLex の属性 boundary と同一とし,シンボル

sodeod

,シンボル sodiec,シンボル isceod,及びシンボル isciec を値とする。

b)

引数 level : は数値であって,文字列比較を行う際に,現言語の照合指定における比較レベルを表す。

引数 level :  が指定されない場合,単純に文字列を構成する文字によって比較する。

c)

引数 min-hits :  及び引数 max-hits :  は正の整数を値とし,任意の合致対象の親ノードが指定した範囲の

数の合致を含まない場合には,返すノードリストからその合致対象を削除する。引数 min-hits : の無

指定時値を 1 とする。引数 max-hits :  が指定されない場合,最大合致数の制限はない。

d)

引数 norm? :  は型 boolean のオブジェクトであって,字句モデルが正規化されているかを指定する。

    (compare proc list)

引数 proc は,二つの文字列を引数にもち,型 boolean のオブジェクトを返す手続きとする。引数 list 中

の連続する二つずつの文字列に,引数手続き proc を適用し,そのすべてが#t を返す場合に#t を返す。この

手続きは,次のとおりに定義できる。

(define (compare proc l)

  (if (null? l)

      #t

      (let loop ((prey (car l))

                   (rest (cdr l)))

        (cond ((null? rest) #t)

              ((proc prev (car rest))

               (loop (car rest) (cdr rest)))

              (else #f)))))

(ordered-may-overlap? nl)

(ordered-no-overlap? nl)


114

X 4153 : 1998 (ISO/IEC 10179 : 1996)

引数 nl の要素となる各ノードは,補助グローブ内のノードとし,すべての入力ノードは単一の木内とす

る。入力ノードがその属する木内で,順序付けられている場合に#t を返却し,その他の場合に#f を返す。

手続き ordered-no-overlap?に関しては,各引数ノードについて,そのすべての入力ノードが,次の引数ノー

ド の 入 力 ノ ー ド に 先 行 す る 場 合 に , 入 力 ノ ー ド が 順 序 付 け ら れ て い る と み な す 。 手 続 き

ordered-may-overlap?

に関しては,各引数ノードについて,その入力ノードの最初のノードが,次の引数ノ

ードの入力ノードの最初のノードに先行する場合に,入力ノードが順序付けられているとみなす。

    (span nl symbol)

引数 nl の各ノードは,補助グローブ内のノードとし,すべてのノードの入力ノードは単一の木内とする。

入力ノードの最初と最後の間の量子数を返す。引数 symbol は量子を指定する。引数 symbol には,手続き

datatok

の引数 filter :  で指定できる値のいずれかを指定する。

10.2.2

リスト手続き

これらの手続きは,通常のリストに対する手続きに類似している。

    (empty-node-list)

この手続きは,空ノードリストを返す。

    (node-list-reduce nl proc obj)

引数 nl が要素をもたない場合,引数 obj を返却し,その他の場合に手続き node-list-reduce に,次のそれ

ぞれを引数として適用した結果を返す。

a)

引数 nl から最初の要素を除いたすべてを含むノードリスト。

b)

引数 proc

c)

引数 proc を,引数 obj 及び引数 nl の最初の要素に適用した結果。

手続き node-list-reduce は,次のとおり定義できる。

(define (node-list-reduce nl combine init)

  (if (node-list-empty? nl)

        init

        (node-list-reduce (node-list-rest nl)

              combine

              (combine init (node-list-first nl)))))

(node-list-contains? nl snl)

引数 nl が,引数 snl の要素と等しいノードを含む場合に#t を返却し,その他の場合に#f を返す。この手

続きは,次のとおり定義できる。

(define (node-list-contains? nl snl)

  (node-list-reduce nl

                    (lambda (result i)

                      (or result

                          (node-list=? snl i)))

                    #f))

(node-list-remove-duplicates nl)

先行する任意の要素に等しい要素を取り除くこと以外では,引数 nl と同一のノードリストを返す。この

手続きは,次のとおり定義できる。

(define (node-list-remove-duplicates nl)


115

X 4153 : 1998 (ISO/IEC 10179 : 1996)

  (node-list-reduce nl

                    (lambda (result snl)

                      (if (node-list-contains? result snl)

                          result

                          (node-list result snl)))

                    (empty-node-list)))

(node-list-union #!rest args)

すべての引数ノードリストの和集合を返す。結果は,重複を含まない。引数がない場合,空ノードリス

トを返す。この手続きは,次のとおり定義できる。

(define (node-list-union #!rest args)

  (reduce args

          (lambda (nl1 nl2)

            (node-list-reduce nl2

                              (lambda (result snl)

                                (if (node-list-contains? result

                                                         snl)

                                    result

                                    (node-list result snl)))

                              nl1))

          (empty-node-list)))

ここで,手続き reduce は,次のとおり定義できる。

(define (reduce list combine init)

  (let loop ((result init)

             (list  list))

    (if (null? list)

        result

        (loop (combine result (car list))

              (cdr list)))))

(node-list-intersection #!rest args)

この手続きは,引数ノードリストの積集合を含むノードリストを返す。結果は,重複を含まない。引数

がない場合,空ノードリストを返す。この手続きは,次のとおり定義できる。

(define (node-list-intersection #!rest args)

  (if (null? args)

      (empty-node-list)

      (reduce (cdr args)

              (lambda (nl1 nl2)

                (node-list-reduce nl1

                                  (lambda (result snl)

                                    (if (node-list-contains? n12 snl)

                                        (node-list result snl)


116

X 4153 : 1998 (ISO/IEC 10179 : 1996)

                                        result))

                                  (empty-node-list)))

                (node-list-remove-duplicates (car args)))))

(node-list-difference #!rest args)

この手続きは,引数ノードリストすべての差集合を含むノードリストを返す。集合の差は,最初の引数

ノードリストの要素であって,任意の他の引数ノードリストの要素とはならない要素から成る集合と定義

できる。結果は,重複を含まない。引数がない場合,空ノードリストを返す。この手続きは,次のとおり

定義できる。

(define (node-list-difference #!rest args)

  (if (null? args)

      (empty-node-list)

      (reduce (cdr args)

              (lambda (nl1 nl2)

                (node-list-reduce nl1

                                  (lambda (result snl)

                                    (if (node-list-contains? nl2 snl)

                                        result

                                        (node-list result snl)))

                                  (empty-node-list)))

                (node-list-remove-duplicates (car args)))))

(node-list-symmetric-difference #!rest args)

この手続きは,すべての引数ノードリストの対称差集合を含むノードリストを返す。対称差集合は,引

数ノードリストグループの中で一度しか出現しないノードから成る集合と定義する。結果は,重複を含ま

ない。引数がない場合,空ノードリストを返す。この手続きは,次のとおり定義できる。

(define (node-list-symmetric-difference #!rest args)

  (if (null? args)

      (empty-node-list)

      (reduce (cdr args)

              (lambda (nl1 nl2)

                (node-list-difference (node-list-union nl1 nl2)

                                      (node-list-intersection nl1 nl2)))

                (node-list-remove-duplicates (car args)))))

(node-list-map proc nl)

引数 nl の各要素について,その要素だけを含む単一要素ノードリストを作成し,引数 proc を適用した

結果をノードリストに付加した結果を返す。引数 proc が,引数 nl の任意の要素に関してノードリストを

返却しない場合エラーとする。この手続きは,次のとおり定義できる。

(define (node-list-map proc nl)

  (node-list-reduce nl

                    (lambda (result snl)

                      (node-list (proc snl)


117

X 4153 : 1998 (ISO/IEC 10179 : 1996)

                                 result))

                    (empty-node-list)))

(node-list-union-map proc nl)

引数 nl の各要素について,その要素だけを含む単一要素ノードリストを作成し,引数 proc を適用した

結果のノードリスト和集合を返す。引数 proc が,引数 nl の任意の要素に関してノードリストを返却しな

い場合エラーとする。この手続きは,次のとおり定義できる。

(define (node-list-union-map proc nl)

  (node-list-reduce nl

                    (lambda (result snl)

                      (node-list-union (proc snl)

                                       result))

                    (empty-node-list)))

(node-list-some? proc nl)

引数 nl の各要素について,その要素だけを含む単一要素ノードリストを作成し,そのノードリストを引

数 proc を適用した結果のうち,#f を返却するものがない場合に#t を返却し,その他の場合に#f を返す。引

数 nl の幾つかに関して,引数手続き proc がエラーを発生した場合,この手続きの実装はエラーを発生し

てもよいが,必す(須)とはしない。この手続きは,次のとおり定義できる。

(define (node-list-some? proc nl)

  (node-list-reduce nl

                    (lambda (result snl)

                      (if (or result (proc snl))

                          #t

                          #f))

                    #f))

(node-list-every? proc nl)

引数 nl の各要素について,その要素だけを含む単一要素ノードリストに引数 proc を適用し,すべての

結果が#f を返さない場合に#t を返却し,その他の場合#f を返す。引数 nl の幾つかについて,引数 proc 

エラーを発生した場合,この手続きの実装はエラーを発生してよい。この手続きは,次のとおり定義でき

る。

(define (node-list-every? proc nl)

  (node-list-reduce nl

                    (lambda (result snl)

                      (if (and result (proc snl))

                          #t

                          #f))

                    #t))

(node-list-filter proc nl)

引数 nl の各要素について,その要素だけを含む単一要素ノードリストに引数 proc を適用し,その結果

が#f にならない要素から成るノードリストを返す。この手続きは,次のとおり定義できる。

(define (node-list-filter proc nl)


118

X 4153 : 1998 (ISO/IEC 10179 : 1996)

  (node-list-reduce nl

                    (lambda (result snl)

                      (if (proc snl)

                          (node-list snl result)

                          result))

                    (empty-node-list)))

(node-list->list nl)

引数 nl の各要素についてその要素だけを含む単一要素ノードリストを作成し,そのリストを返す。この

手続きは,次のとおり定義できる。

(define (node-list->list nl)

  (reverse (node-list-reduce nl

                              (lambda (result snl)

                              (cons snl result))

                            '())))

(node-list-length nl)

引数 nl の要素数を返す。この手続きは,次のとおり定義できる。

(define (node-list-length nl)

  (node-list-reduce nl

                    (lambda (result snl)

                      (+ result  1))

                    0))

(node-list-reverse nl)

引数 nl の要素を逆順で含むノードリストを返す。この手続きは,次のとおり定義できる。

(define (node-list-reverse nl)

  (node-list-reduce nl

                    (lambda (result snl)

                      (node-list snl result))

                    (empty-node-list)))

(node-list-ref nl k)

引数 nl の引数 の示す位置(0 を基底とする)のノードを含むノードリストを返す。引数 に対応する

要素が存在しない場合,空ノードリストを返す。この手続きは,次のとおり定義できる。

(define (node-list-ref nl i)

  (cond ((< i 0)

         (empty-node-list))

        ((zero? i)

        (node-list-first nl))

       (else

        (node-list-ref (node-list-rest nl) (- i 1)))))

(node-list-tail nl k)

引数 nl から最初の引数 の要素を除いたノードリストを返す。引数 nl が引数 より少ない個数の要素を


119

X 4153 : 1998 (ISO/IEC 10179 : 1996)

もつ場合,空ノードリストを返す。この手続きは,次のとおり定義できる。

(define (node-list-tail nl i)

  (cond ((< i 0) (empty-node-list))

        ((zero? i) nl)

        (else

         (node-list-tail (node-list-rest nl) (- i 1)))))

(node-list-head nl k)

引数 nl の最初の引数 個の要素から成るノードリストを返す。引数 nl が,引数 より少ない個数の要素

をもつ場合,引数 nl を返す。この手続きは,次のとおり定義できる。

(define (node-list-head nl i)

  (if (zero? i)

      (empty-node-list)

      (node-list (node-list-first nl)

                  (node-list-head nl (- i 1)))))

(node-list-sublist nl k

1

 k

2

)

引数 nl の中で引数 k

1

以上,引数 k

2

未満の要素に先行される要素を含むノードリストを返す。0 を基底と

した指標で引数 k

1

以上,引数 k

2

未満の要素を選択することに等しい。この手続きは,次のとおり定義でき

る。

(define (node-list-sublist nl i j)

  (node-list-head (node-list-tail nl i)

                  (- j i)))

(node-list-count nl)

引数 nl 内の異なる要素の数を返す。この手続きは,次のとおり定義できる。

(define (node-list-count nl)

  (node-list-length (node-list-remove-duplicates

nl)))

(node-list-last nl)

引数 nl が空ノードリストでない場合に最後の要素を返却し,その他の場合に空ノードリストを返す。こ

の手続きは,次のとおり定義できる。

(define (node-list-last nl)

  (node-list-ref nl

                 (- (node-list-length nl) 1)))

手続き node-list-some?,手続き node-list-every?,手続き node-list-filter 及び手続き node-list-union-map を使

用する場合,最初の引数はしばしば仮引数を伴う lambda 式となる。この規格では,これらの式内で明示的

な lambda 式を使用する必要性を避けるための構文を提供する。

[146] special-query-expression

there-exists?-expression

|for-all?-expression | select-each-expression | union-for-each-expression

[147] there-exists?-expression

= (there-exists? variable expression expression)

次の二つの式は等価となる。


120

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    (there-exists? var nl-expr expr)

    (node-list-some? (lambda (varexprnl-expr)

これは,

“変数 var を用いた条件式 expr を満たす,ノードリスト nl-expr 内のノードが存在するか?”と読

む。

[148] for-all?-expression

= (for-all? variable expression expression)

次の二つの式は等価となる。

    (for-all? var nl-expr expr)

    (node-list-every? (lambda (varexprnl-expr)

これは,

“変数 var を用いた条件式 expr を,

ノードリスト nl-expr 内のノードすべてが満たすか?”

と読む。

[149] select-each-expression

= (select-each variable expression expression)

次の二つの式は等価となる。

    (select-each var nl-expr expr)

    (node-list-filter (lambda (varexprnl-expr)

これは,

“変数 var を用いた条件式 expr を満たすノードを,

ノードリスト nl-expr から選択する”と読む。

[150] union-for-each-expression

= (union-for-each variable expression expression)

次の二つの式は等価となる。

    (union-for-each var nl-expr expr)

    (node-list-union-map (lambda (varexprnl-expr)

これは,

“変数 var を用いた条件式 expr を満たす,ノードリスト nl-expr 内の各要素の和集合”と読む。

10.2.3

共通特性操作

これらの手続きは,任意のグローブに対して機能するが,内在特性においてだけ使用できる。

次に示す手続きのうちの多くが,ノードに対する関数をノードリスト全体に写像した結果を返す。これ

は,ノードリストの各要素に機能を適用した結果を順に付加してできたノードリストとして定義できる。

    (node-list-property propname nl)

ノードが,引数 propname の名前をもつ特質を開示をしている場合には,その値を返し,開示していな

い場合,又はヌル値を開示している場合には,空ノードリストを返す関数を,引数 nl 全体に対応させた結

果を返す。引数 propname は,node-property 手続きで可能な任意の方法で指定できる。引数 nl の任意のノ

ードが,ヌル値ではなく,型 nodal でない値を propame の名前で公開している場合エラーとする。この手

続きは,次のとおり定義できる。

(define (node-list-property prop nl)

  (node-list-map (lambda (snl)

                  (node-property prop snl default: (empty-node-list)))

                  nl))

(origin ni)

この手続きは,次の定義に等しい。

(define (origin nl)

  (node-list-property 'origin nl))

(origin-to-subnode-rel snl)

引数 snl の要素が,特性 origin-to-subnode-rel-property-name を開示している場合にその値を,開示してい

ないか又はヌル値を開示している場合には,#f を返す。


121

X 4153 : 1998 (ISO/IEC 10179 : 1996)

この手続きは,次のとおり定義できる。

(define (origin-to-subnode-rel snl)

  (node-property 'origin-to-subnode-rel-property-name snl default: #f))

(tree-root nl)

この手続きは,次の定義に等しい。

(define (tree-root nl)

  (node-list-property 'tree-root nl))

(grove-root nl)

この手続きは,次の定義に等しい。

(define (grove-root nl)

  (node-list-property 'grove-root nl))

(children nl)

ノードの子ども特性が存在すればその値を,その他の場合空ノードリストを返す関数を,引数 nl 全体に

写像した結果を返す。この手続きは,次のとおり定義できる。

(define (children nl)

  (node-list-map (lambda (snl)

                    (let ( (childprop (node-property ' children-property-name

                                                      snl

                                                      default: #f)))

                      (if childprop

                          (node-property childprop

                                         snl

                                         default:  (empty-node-list))

                          (empty-node-list))))

                  nl))

(data nl)

引数 nl の各要素のデータを結合した内容の文字列を返す。ノードのデータは,次のとおりに定義する。

a)

ノードがデータ特性をもつ場合,その特性値を必要に応じて文字列に変換した結果。

b)

子ノードが子ども特性をもつ場合,各子ノードのデータを特性 data-separator の特性値がヌル値でなけ

れば,その値で各データを区切って連結した結果。

c)

その他の場合は,空文字列。

    (parent nl)

この手続きは,次の定義に等しい。

(define (parent nl)

  (node-list-property 'parent nl))

(source nl)

この手続きは,次の定義に等しい。

(define (source nl)

(node-list-property 'source nl))

(subtree nl)


122

X 4153 : 1998 (ISO/IEC 10179 : 1996)

引数 nl の各要素を,ノードの部分木を返す関数で写像したものを返す。ただし,ノードの部分木は,そ

のノード及びそれに続いてそのノードの子の部分木をリストしたノードリストと定義する。

この手続きは,次のとおり定義できる。

(define (subtree nl)

  (node-list-map (lambda (snl)

                    (node-list snl (subtree (children snl))))

                  nl))

(subgrove nl)

引数 nl の各要素を,ノードの部分グローブを返す関数で写像したものを返す。ただし,ノードの部分グ

ローブは,そのノード及びそれに続いてそのノードの下位ノード (subnode) 特性の各値の要素の部分グロ

ーブをリストしたノードリストと定義する。

この手続きは,次のとおり定義できる。

(define (subgrove nl)

  (node-list-map

   (lambda  (snl)

     (node-list  snl

                (subgrove

                 (apply  node-list

                        (map (lambda (name)

                               (node-property name snl))

                             (node-property  'subnode-property-names

                                            snl))))))

  nl))

(descendants nl)

引数 nl の各要素を,ノードの子孫を返す関数で写像したものを返す。ただし,ノードの子孫は,そのノ

ードの子の部分木を追加したノードリストと定義する。

この手続きは,次のとおり定義できる。

(define (descendants nl)

  (node-list-map (lambda (snl)

                   (subtree (children snl)))

                  nl))

(ancestors nl)

引数 nl の各要素を,ノードの先祖を返す関数で写像したものを返す。ただし,ノードの先祖は,そのノ

ードが根の場合には空ノードリスト,そうでなければ,ノードの親の先祖にノードの親を付加した結果の

ノードリストと定義する。

(define (ancestors nl)

  (node-list-map (lambda (snl)

                   (let loop ((cur (parent snl))

                              (result (empty-node-list)))

                    (if (node-list-empty? cur)


123

X 4153 : 1998 (ISO/IEC 10179 : 1996)

                        result

                        (loop (parent snl)

                              (node-list cur result)))))

                nl))

(grove-root-path nl)

引数 nl の各要素をグローブ根経路を返す関数で写像した結果を返す。ただし,グローブ根経路は,ノー

ドが根ノードであれば空ノードリスト,その他の場合には,ノードの起点のグローブ根経路にノードの起

点を付加した結果と定義する。この手続きは,次のとおり定義できる。

(define (grove-root-path nl)

  (node-list-map (lambda (snl)

                    (let loop ((cur (origin snl))

                             (result (empty-node-list)))

                    (if (node-list-empty? cur)

                        result

                        (loop (origin nl)

                              (node-list cur result)))))

                nl))

(rsiblings nl)

引数 nl の各要素を,再帰兄弟関数で写像した結果を返す。ただし,ノードの再帰兄弟は,そのノードが

起点をもてばその起点の特性 origin-to-subnode となり,起点をもたなければそのノード自体と定義する。

(define (rsiblings nl)

  (node-list-map (lambda (snl)

                   (let ((rel (origin-to-subnode-rel snl)))

                    (if rel

                        (node-property rel

                                       (origin  snl)

                                       default:  (empty-node-list))

                        snl)))

                nl))

(ipreced nl)

引数 nl の各要素を,直前兄弟が存在する場合にそれを返す関数で写像した結果を返す。この手続きは,

次のとおり定義できる。

(define (ipreced nl)

  (node-list-map (lambda (snl)

                   (let loop ((prey (empty-node-list))

                              (rest (rsiblings snl)))

                     (cond ((node-list-empty? rest)

                            (empty-node-list))

                           ((node-list=? (node-list-first rest) snl)

                            Prev)


124

X 4153 : 1998 (ISO/IEC 10179 : 1996)

                            (else

                             (loop (node-list-first rest)

                                   (node-list-rest  rest))))))

                nl))

(follow nl)

引数 nl の各要素を,直後兄弟が存在する場合にそれを返す関数で写像した結果を返す。この手続きは,

次のとおり定義できる。

(define (ifollow nl)

  (node-list-map (lambda (snl)

                   (let loop ((rest (rsiblings snl)))

                     (cond ((node-list-empty? rest)

                            (empty-node-list))

                           ((node-list=? (node-list-first rest) snl)

                            (node-list-first (node-list-rest rest)))

                           (else

                           (loop (node-list-rest rest))))))

                nl))

(preced nl)

引数 nl の各要素を,先行兄弟が存在する場合にそれを返す関数で写像した結果を返す。この手続きは,

次のとおり定義できる。

(define (preced nl)

  (node-list-map (lambda (snl)

                   (let loop ((scanned (empty-node-list))

                              (rest (rsiblings snl)))

                     (cond ((node-list-empty? rest)

                            (empty-node-list))

                           ((node-list=? (node-list-first rest) snl)

                            scanned)

                           (else

                            (loop (node-list scanned

                                             (node-list-first  rest))

                                  (node-list-rest rest))))))

                nl)

(follow nl)

引数 nl の各要素を,後続兄弟が存在する場合にそれを返す関数で写像した結果を返す。この手続きは,

次のとおり定義できる。

(define (follow nl)

  (node-list-map (lambda (snl)

                   (let loop ((rest (rsiblings snl)))

                     (cond ((node-list-empty? rest)


125

X 4153 : 1998 (ISO/IEC 10179 : 1996)

                            (empty-node-list))

                           ((node-list=? (node-list-first rest) snl)

                            (node-list-rest rest))

                           (else

                            (loop (node-list-rest rest))))))

                nl))

(grove-before? snl

1

 snl

2

)

引数 snl

1

が,グローブ順において引数 snl

2

に先行する場合#t を返す。引数 snl

1

と引数 snl

2

とが同じグロ

ーブ内にない場合はエラーとする。この手続きは,次のとおり定義できる。

(define (grove-before? Snl1 snl2)

  (let ((sorted

         (node-list-intersection (subgrove (grove-root snl1))

                                 (node-list snl1 snl2))))

    (and (= (node-list-length sorted) 2)

         (node-list=? (node-list-first sorted) snl1))))

(sort-in-tree-order nl)

引数 nl の要素を,木順で整列したノードリストを返す。重複するノードは取り除く。引数 nl の要素が,

すべて同じ木内でなければエラーとする。この手続きは,次のとおり定義できる。

(define (sort-in-tree-order nl)

  (node-list-intersection (subtree (tree-root nl))

                          nl))

(tree-before? snl

1

 snl

2

)

引数 snl

1

が,木順において引数 snl

2

より先行する場合に#t を返す。引数 snl

1

と引数 snl

2

とが同じ木内で

なければエラーとする。この手続きは,次のとおり定義できる。

(define (tree-before? snl1 snl2)

  (let ((sorted

         (sort-in-tree-order (node-list snl1 snl2))))

    (and (= (node-list-length sorted) 2)

         (node-list=? (node-list-first sorted) snl1))))

(tree-before nl)

引数 nl の各要素を,同じ木内において先行するノードを返す関数で写像した結果を返す。この手続きは,

次のとおり定義できる。

(define (tree-before nl)

  (node-list-map (lambda (snl)

                   (node-list-filter (lambda (x)

                                       (tree-before? x snl))

                                     (subtree  (tree-root  snl))))

                nl))

(property-lookup propname snl if-present if-not-present)

引数 snl が引数 propname に関して非ヌル値を開示している場合,引数 if-present をその値に適用した結果


126

X 4153 : 1998 (ISO/IEC 10179 : 1996)

を,その他の場合には引数 if-not-present を引数なしで呼び出した結果を返す。引数 propname は,手続き

node-property

に対して可能な任意の方法で指定できる。この手続きは,次のとおり定義できる。

(define (property-lookup name snl if-present if-not-present)

  (let ((val (node-property name snl default: #f)))

    (cond (val (if-present val))

          ((node-property name snl default: #t) (if-not-present))

          (else (if-present val)))))

(select-by-class nl sym)

引数 nl の要素のうち,ノードのクラスとして引数 sym をもつノードから成るノードリストを返す。引数

sym

は,10.1.5 で規定のとおりに変換したクラスの応用名又は RCS 名とする。

    (select-by-property nl sym proc)

引数 nl の要素であって,引数 sym の名前をもつ型 nodal でない特性が非ヌル値を開示しており,その値

に引数 proc を適用した場合に真の値を返すノードから成るノードリストを返す。

    (select-by-null-property nl sym

引数 nl の要素であって,引数 sym が示す特性に関してヌル値を開示しているものから成るノードリスト

を返却する。

    (select-by-missing-property nl sym

引数 nl の要素であって,引数 sym が示す特性に関して値を開示していないものから成るノードリストを

返却する。

10.2.4

核照会言語

この項は,SDQL の部分集合を定義する。この部分集合では,10.2.4 で定義する手続きに加え,手続き

current-node

,手続き node-list-empty?,手続き node-list?,手続き parent 及び手続き node-list-error を利用で

きる。この部分集合は,ノードリストが一つ以上のノードを決して含まず,ノードリストが含むすべての

ノードが型 element となる設計がなされている。

次に示す各手続きでは,型 node-list の引数を省略でき,その場合には (current-node)  が指定されたと解

釈する。引数 osnl (optional singleton node-list)  は,ノードを 0 個又は 1 個含むノードリストを意味する。

10.2.4.1

探査

    (ancestor string osnl

引数 osnl の先祖であって,

共通識別子として引数 string をもつ最も近いものを含むノードリストを返す。

そのようなノードリストが存在しない場合又は osnl が空ノードリストの場合には,空ノードリストを返却

する。

    (gi osnl)

引数 osnl に含まれるノードの特性 gi の値を返す。引数 osnl が空の場合,引数 osnl の要素が特性 gi をも

たない場合又は特性 gi にヌル値をもつ場合には,#f を返す。

    (first-child-gi osnl)

引数 osnl の要素の子であって,クラスが element の最初のものの特性 gi の値を返す。引数 osnl が空の場

合又はそのような子をもたない場合には#f を返す。

    (id osnl)

引数 osnl に含まれるノードの特性 id の値を返す。引数 osnl が空の場合,特性 id をもたない場合又は特

性 id がヌル値をもつ場合には,#f を返す。


127

X 4153 : 1998 (ISO/IEC 10179 : 1996)

10.2.4.2

計数

    (child-number snl)

引数 snl の子番号を返す。

要素の子番号は,現要素と同じ共通識別子をもち,現要素に先行する兄弟の数に 1 を加えたものとなる。

    (ancestor-child-number string snl)

共通識別子が引数 string に等しい最も近い先祖の子番号を返す。それらの先祖が存在しない場合には#f

を返す。

    (hierarchical-number list snl)

引数 list の要素数と等しい数の非負整数からなるリストを返す。引数 list は,文字列のリストとする。返

すリストの最後の要素は,引数 snl の先祖であって,その共通識別子が引数 list の最後の要素に等しい最も

近いものの子番号とする。返すリストの最後から 2 番目の要素は,引数 snl の先祖であって,その共通識

別子が引数 list の最後から 2 番目要素に等しい最も近いものの子番号とする。引数 list の各要素について同

様とする。

    (hierarchical-number-recursive string snl)

非負整数のリストを返却する。返すリストの最後の要素は,引数 snl の要素の先祖であって,その共通

識別子が引数 string に等しいものの子番号となる。返すリストの最後から 2 番目の要素は,上述の要素の

先祖であって,その共通識別子が引数 string に等しいものの子番号となる。同様に現要素の先祖であって,

共通識別子が引数 string に等しい各要素に関して続ける。このリストの長さは,string の入れ子のレベルに

等しいことに注意。

    (element-number snl)

引数 snl と同じ共通識別子をもち,引数 snl と同じ又は先行する要素の数を返す。

    (element-number-list list snl)

非負整数のリストを返す。引数 list は,文字列のリストとする。引数 list の各要素について,番目の整

数は次の条件を満たす要素の数となる。

a)

引数 snl に先行する又は等しい。

b)

共通識別子が,引数 list の 番目の要素に等しい。

c)

i

が l より大きい場合,引数 snl の要素に先行し,その共通識別子が引数 list の i-l 番目の要素に等しい

最後の要素に後続する。

備考1.  実効上各引数のためのカウンタは,直前の引数によって参照される要素の先頭でリセットさ

れる。

2.

要素はその親より後と考える。

3.

この手続きは,リストの最後の数を用いることで脚注を章内で連続する番号を振るために利

用できる。これはコンテナ要素をもたない DTD での見出しの番号付けにも利用できる。

10.2.4.3

属性値のアクセス

次の手続きでは,属性値はクラス attribute-assignment のノードに手続き data を適用して,文字列として

表現する。

    (attribute-string string osnl)

引数 string に等しい名前をもつ,引数 osnl の属性値の文字列表現を返す。引数 osnl が指定した名前の属

性をもたない場合,属性が暗黙指定の場合,又は引数 osnl が空の場合には,#f を返す。

    (inherited-attribute-string string onsl)


128

X 4153 : 1998 (ISO/IEC 10179 : 1996)

引数 string に等しい名前をもち,引数 osnl の属性値又は引数 osnl の先祖であってその属性が暗黙指定で

ない,最も近いものの値の文字列表現を返す。それらの要素が存在しない場合,又は引数 osnl が空の場合

には,#f を返す。この手続きに関しては,ノードはそれ自体の先祖とみなす。

    (inherited-element-attribute-string string

1

 string

2

 onsl)

引数 osnl の先祖であって,その共通識別子が引数 string

1

に等しく,名前が引数 string

2

に等しい明示的な

属性をもつ,最も近いものの属性値の文字列表現を返す。それらの要素がない場合,又は引数 osnl が空の

場合,#f を返す。この手続きに関しては,ノードはそれ自体の先祖とみなす。

10.2.4.4

現所在の判定

    (first-sibling? snl)

引数 snl が,同じ共通識別子の先行する兄弟をもたない場合に#t を,その他の場合に#f を返す。

    (absolute-first-sibling? snl)

引数 snl が,先行する兄弟要素をもたない場合に#t を,その他の場合に#f を返す。

    (last-sibling? snl)

引数 snl が,同じ共通識別子の後続する兄弟をもたない場合に#t を,その他の場合に#f を返す。

    (absolute-last-sibling? snl)

引数 snl が,後続する兄弟要素をもたない場合に#t を,その他の場合に#f を返す。

    (have-ancestor? obj snl)

引数 obj は,文字列又は文字列のリストとする。引数 obj が文字列の場合,have-ancestor?は引数 snl が引

数 obj に一致する共通識別子の先祖をもつ場合に#t を,その他の場合に#f を返す。

10.2.4.5

実体及び記法

この 10.2.4.5 において,snl は実体を探す文書を特定する。

    (entity-public-id string snl)

引数 snl と同じグローブを律する文書型内の一般実体で,その名前が引数 string となるノードの特性

external-id

の値ノードのもつ特性 public-id の値を返す。名前が引数 string となる実体がない場合,実体が

特性 external-id にヌル値をもつ場合,又は特性 external-id の値が特性 public-id にヌル値をもつ場合には,

#f

を返す。

    (entity-system-id string snl)

引数 snl と同じグローブを律する文書型内の一般実体で,その名前が引数 string となるノードの特性

external-id

の値ノードのもつ特性 system-id の値を返す。名前が引数 string となる実体がない場合,実体が

特性 external-id にヌル値をもつ場合,又は特性 external-id の値が特性 system-id にヌル値をもつ場合には,

#f

を返す。

    (entity-generated-system-id string snl)

引数 snl と同じグローブを律する文書型内の一般実体で,その名前が引数 string となるノードの特性

external-id

の値ノードのもつ特性 generated-system-id の値を返す。

名前が引数 string となる実体がない場合,

実体が特性 external-id にヌル値をもつ場合,又は特性 external-id の値が特性 generated-system-id にヌル値を

もつ場合には,#f を返す。

    (entity-text string snl)

引数 snl と同じグローブを律する文書型内の一般実体で,その名前が引数 string となるノードの特性 text

の値を返す。名前が引数 string となる実体がない場合,特性 text にヌル値をもつ場合には,#f を返す。

    (entity-notation string snl)


129

X 4153 : 1998 (ISO/IEC 10179 : 1996)

引数 snl と同じグローブを律する文書型内の一般実体で,その名前が引数 string となるノードの特性

notation-name

の値を返す。名前が引数 string となる実体がない場合,特性 notation-name にヌル値をもつ場

合には,#f を返す。

    (entity-attribute-string string

1

 string

2

 snl)

引数 snl と同じグローブを律する文書型内の一般実体で,その名前が引数 string

1

となるノードの,引数

string

2

の名前をもつ属性の値の文字列表現を返す。名前が引数 string

1

となる実体がない場合,又はその属

性が暗黙指定の場合には,#f を返す。

    (entity-type string snl)

引数 snl と同じグローブを律する文書型内の一般実体で,

その名前が string となるノードの特性 entity-type

の値を返す。名前が string となる実体がない場合,特性 entity-type にヌル値をもつ場合には,#f を返す。

    (notation-public-id string snl)

引数 snl と同じグローブを律する文書型内の一般記法実体で,その名前が引数 string となるノードの特性

external-id

の値ノードのもつ特性 public-id の値を返す。名前が引数 string となる実体がない場合,実体が

特性 external-id にヌル値をもつ場合,又は特性 external-id の値が特性 public-id にヌル値をもつ場合には,

#f

を返す。

    (notation-system-id string snl)

引数 snl と同じグローブを律する文書型内の一般記法実体で,その名前が string となるノードの特性

external-id

の値ノードのもつ特性 system-id の値を返す。名前が引数 string となる実体がない場合,実体が

特性 external-id にヌル値をもつ場合,又は特性 external-id の値が特性 system-id にヌル値をもつ場合には,

#f

を返す。

    (notation-generated-system-id string snl)

引数 snl と同じグローブを律する文書型内の一般実体で,その名前が引数 string となるノードの特性

external-id

の値ノードのもつ特性 generated-system-id の値を返す。

名前が引数 string となる実体がない場合,

実体が特性 external-id にヌル値をもつ場合,又は特性 external-id の値が特性 generated-system-id にヌル値を

もつ場合には,#f を返す。

0.2.4.6

名前正規化

    (general-name-normalize string snl)

引数 snl が出現するグローブのもつ,一般大小代替文字列正規化規則を用いて,引数 string を変換した結

果を返す。この手続きは,次のとおり定義できる。

(define (general-name-normalize string snl)

  (named-node-list-normalize string

                             (node-property 'elements (grove-root snl))

                             'element))

(entity-name-normalize string snl)

引数 snl が出現するグローブのもつ,実体大小代替文字列正規化規則を用いて,引数 string を変換した結

果を返す。この手続きは,次のとおり定義できる。

(define (entity-name-normalize string snl)

  (named-node-list-normalize string

                             (node-property 'entities (grove-root snl))

                             'entity))


130

X 4153 : 1998 (ISO/IEC 10179 : 1996)

10.2.5  SGML

特性操作

この 10.2.5 の手続きは,

SGML

のための特性集合によって定義された特定の特性の取扱いを可能にする。

    (attributes nl)

これは,次の定義に等しい。

(define (attributes nl)

  (node-list-property 'attributes nl))

(attribute string nl)

名前が引数 string に等しい特性 attributes の値の要素を返す関数を nl に適用した結果を返す。この手続き

は,次のとおり定義できる。

(define (attribute name nl)

  (node-list-map (lambda (snl)

                   (named-node name (attributes snl)))

                  nl))

(element-with-id string snl)

引数 snl と同じグローブ内にあって一意識別子が引数 string となる要素を含む単一要素ノードリストを返

す。

名前が引数 string となる要素が存在しない場合には,

空ノードリストを返す。

引数 snl が無指定の場合,

(current-node)

と解釈する。

    (referent nl)

これは,次の定義に等しい。

(define (referent nl)

  (node-list-property 'referent nl))

(match-element? pattern snl)

引数 snl が,引数 pattern に合致するクラス element のノードの場合に#t を返す。引数 pattern は,リスト,

単一の文字列又は単一シンボルのいずれかとする。単一の文字列又は単一のシンボルは,その文字列又は

シンボルだけを含むリストと等しく解釈する。リストには,文字列又はシンボルを含むことができる。リ

ストの最後の文字列又はシンボルがその要素の特性 gi に合致し,それ以前が順次,その要素の親,祖父,

それ以前の複数の先祖に一致する場合に,その要素がリストに合致するとみなす。各文字列又はシンボル

は,オプションで偶数個の文字列又はシンボルから成るリストを後続させてよい。その場合,要素が合致

するためには,リストに先行する文字列又はシンボルが特性 gi に合致し,さらにリスト内のすべての属性

と値の対をもたなければならない。

例えば,この式は次の条件をすべて満たす場合に真を返す。

    (match-element? ' (e1 (a1 v1 a2 v2) e2 (a3 v3) e3 e4) n)

a)

引数 n のもつ特性 gi が e4 である。

b)

引数 n の親のもつ特性 gi が e3 である。

c)

引数 n の祖父のもつ特性 gi が e2 である。

d)

引数 n の祖父が,値が v3 の属性 a3 をもつ。

e)

引数 n の曾祖父のもつ特性 gi が e1 である。

f)

引数 n の曾祖父が値が v2 の属性 a2 をもつ。

g)

引数 n の曾祖父が値が v1 の属性 a1 をもつ。

引数 snl が無指定の場合,current-node と解釈する。


131

X 4153 : 1998 (ISO/IEC 10179 : 1996)

パターン内の文字列又はシンボルを特性値と比較し,特性値が大文字代替されていた場合,文字列比較

の前に比較対象の大文字代替を行う。

    (select-elements nl pattern)

引数 nl 内の要素であって,手続き match-element?によって定義したとおりに,引数 pattern に合致するノ

ードから成るノードリストを返す。

    (q-element pattern nl)

    (q-element pattern)

引数 nl の各要素を根とする部分グローブ内から,手続き match-element?によって定義したとおりに

pattern

に合致する要素を探索する。引数 nl が無指定の場合, (current-node) と解釈する。

    (q-class symbol nl)

    (q-class symbol)

引数 nl の各要素を根とする部分グローブ内から,クラスが symbol である要素を探索する。引数 nl が無

指定の場合, (current-node) と解釈する。

    (q-sdata string nl)

    (q-sdata string)

引数 nl の各要素を根とする部分グローブ内から,クラスが sdata であってその特性 sysdata が string であ

る要素を検索する。引数 nl が無指定の場合, (current-node) と解釈する。

10.3

補助解析

10.3.1

単語検索

この項の機能をスタイル言語又は変換言語で用いる場合,機能 word が必要となる。

    (word-parse nl string)

    (word-parse nl)

次に示すデータトークン化処理特性集合を用いて補助解析を行い,新規のグローブを構築する。引数

string

を指定した場合,その内容は ISO 639 の言語符号であって,何が単語を構成するか決定するために

仮定する言語を指定する。この規格では,使用するアルゴリズムを指定しない。

    <propset psn=a fullnm= "Data Tokenizer Property Set">

    <classdef rcsnm=tokroot appnm= "tokenized root" conprop=strings>

    <propdef rcsnm=strings datatype=nodelist ac=tokenstr>

    <classdef rcsnm=tokenstr appnm= "tokenized string" conprop=string>

    <propdef rcsnm=string datatype=string>

引数 nl の各要素に関して,その要素のデータ内の各単語ごとにトークン化文字列ノードが作成される。

補助グローブの根は,それらのトークン化文字列ノードを子としてもつ。すべてのトークン化文字列ノー

ドから成るノードリストを返す。引数 nl の要素 が,他の要素,つまり引数 nl 内の を子孫として含む場

合に,のデータは を単語に解析する前に,のデータからは除かれる。

    (select-tokens nl string)

引数 nl の要素であって,特性 string が引数 string に等しいトークン化文字列ノードから成るノードリス

トを返す。

10.3.2

ノード正規式

この項の機能をスタイル言語又は変換言語で用いる場合,機能 regexp が必要となる。

型 regexp は,ノード正規式を表す。ノード正規式は,グローブの補助解析の実行に用いることのできる


132

X 4153 : 1998 (ISO/IEC 10179 : 1996)

オブジェクトとする。この補助解析は,もともとのグローブに対応するノードをまとめたノードを含むグ

ローブを作成する。ノード正規式の意味は,任意のノードリスト 及び の部分リストとなる任意のノー

ドリスト について,が についてノード正規式に合致するかどうかを定義する。これは正規式を構築す

る各手続きについて帰納的に定義される。は,検索リストとして参照する。

ノードリスト 及び の両方の要素すべてを含むノードリスト において,ノードリスト は次の a)

b)

又は c)の条件を満たす場合に の直前となる。

a)

s

が空の場合

b)  t

が空の場合

c)

s

の要素で の中で最後に出現するものが,の要素出 の中で最初に出現するものより前に出現し,

次の 1)及び 2)を満たす の中のノードが存在しない。

1)

s

の中で出現する のすべての要素に後続する

2)

t

の中で出現する のすべての要素に先行する

    (regexp? obj)

引数 obj が正規表現の場合に#t を,その他の場合に#f を返す。

10.3.3

正規式構築子

この 10.3.3 の手続きで正規式を構築するものは,部分解析手続きで用いられる。

    (regexp-node proc)

任意の検索リストに関して,ノードリストが一意ノードを含み,そのノードリストに引数 proc を適用し

た結果が真の値を返す場合に合致する正規式を返す。

    (regexp-seq regexp

1

 regexp

2

 ... regexp

n

)

手続き regexp-seq は,検索リスト に関して,ノードリストが部分リスト s

1

s

2

,...,s

n

に分割でき,検

索リストにおいて引数 regexp

i

が,が 1

≤ ≤ の範囲で s

i

に合致し,さらに s

i

が 1

≤ ≤ n

1

の範囲の につ

いて直前にある場合にノードリストと合致する正規式を返す。

    (regexp-or regexp

1

 regexp

2

 ... regexp

n

)

手続き regexp-or は,1

≤ ≤ の範囲にある において,検索リスト に関して引数 regexp

i

に合致するノ

ードリストに合致する正規式を返す。

    (regexp-and regexp

1

 regexp

2

 ... regexp

n

)

手続き regexp-and は,1

≤ ≤ の範囲にある各 に関して,引数 regexp

i

に合致するノードリストに合致す

る正規式を返す。

    (regexp-rep regexp)

手続き regexp-rep は,

ノードリストが空の場合,

整数 n

≤ に関してノードリストが,部分リスト s

1

s

2

...

s

n

に分割でき,s

i

が 1

≤ ≤ の範囲の のそれぞれについて引数 regexp に合致し,≤ ≤ n

1

の範囲の各 i

について,s

i

1

が に関して直前にあるノードリストの場合に合致する正規式を返す。

    (regexp-plus regexp)

手続き regexp-plus は,ノードリストがある整数 n

≥ について部分リスト s

1

s

2

,...,s

n

に分割でき,1

≤ ≤ n

の範囲の のそれぞれについて引数 regexp に合致し,1

≤ ≤ n

1

の範囲の各 に関して s

i

が s

i

1

の直前とな

るノードリストの場合に合致する正規式を返す。

    (regexp-opt regexp)

手続き regexp-opt は,ノードリストが空の場合又はノードリストが検索リスト について引数 regexp 

合致する場合に,合致する正規式を返す。


133

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    (regexp-range regexp k

1

 k

2

)

手続き regexp-range は,ノードリストを s

1

s

2

,...,s

n

に分割できる,ある整数 nk

1

≤ ≤ k

2

が存在し,

1

≤ ≤ の範囲の各 について,s

i

が引数 regexp に合致し,s

i

が 1

≤ ≤ n

1

の各 について s

i

が s

i

1

の直前と

なるノードリストに合致する正規式を返す。k

1

が 0 の場合,返される正規式は空ノードリストに合致する。

    (string->regexp string)

手続き string->regexp は,引数 string が示す正規式を返す。引数 string が正しい正規式表現でない場合に

はエラーとする。引数 string が ISO 9945-2 で定義する拡張正規式とする。引数 string 内の通常の文字は,

値がその文字となる特性 char をもつノードと合致する。

参考  これは,前述のプリミティブを用いて実装されるかもしれない。

10.3.4

正規式探索手続き

この 10.3.4 の手続きは,次に示す正規式特性集合を用いて新たに補助グローブを作成するために正規式

を用いる。

    <propset psn=regexp fullnm= "Regular Expression Property Set">

    <classdef rcsnm=root conprop=groups sd=DSSSL>

    <desc>

    グローブ根

    <propdef rcsnm=groups datatype=nodelist ac=group sd=DSSSL>

    <classdef rcsnm=group sd=DSSSL>

    (regexp-search nl regexp)

正規式特性集合を用いて構築した新たな補助グローブを返す。グローブは,nl に関して regexp に合致す

る nl の部分リストごとに一つのグループノードを含む。各グループノードの入力特性は,合致する部分リ

スト内のノードを含む。

備考  入力特性は,補助グローブ内のすべてのノードの特性として内在する。

    (regexp-search-disjoint nl regexp)

これは部分リストが連続でないことを除いて regexp-search と同じとなる。二つの部分リストに重なりが

あり,nl 内の要素で他方のリストのすべての要素に先行する要素が存在する場合,その要素を含むリスト

を優先して合致させる。一方の部分リストが他方の部分リストを包含する場合,包含する部分リストを優

先して合致させる。

11.

変換言語

この 11.は DSSSL の変換言語を規定する。DSSSL 変換言語は,データの内容記法となる。この記法を用

いる要素の内容は,構文 transformation-language-body として解析する。

[151]  transformation-language-body

 

[[unit-declaration* | added-char-properties-declaration* | character-property-declaration* |

trans-literation-map-definition* | language-definition* | default-language-declaration? | definition* |

association*]]

変換言語は,8.で定義する式言語,及び 10.で定義する SDQL を利用する。

変換処理は,単一のグローブを入力として要求し,構文 association の指定どおりに変換する。関連は他

のグローブも変換してよい。変換中のグローブは,現グローブとして参照する。

11.1

機能


134

X 4153 : 1998 (ISO/IEC 10179 : 1996)

次に挙げる機能は,変換言語でオプションとする。

a)

機能 combine-char は,要素型形式 character-combination-declaration を利用可能とする。

b)

機能 keyword は,構文 formal-argument-list 内で#!key を利用可能とする。

c)

機能 multi-source は,手続き transform-grove を利用可能とする。

d)

機能 multi-result は,複数の結果グローブを出力可能とする。

e)

機能 regexp は,10.3.2 で定義するノード正規式を利用可能にする。

f)

機能 word は,10.3.1 で定義する語検索を利用可能にする。

g)

機能 hytime は,10.2.1 で定義する HyTime の所在番地付けを利用可能にする。

h)

機能 charset は,要素型形式 char-repertoire,要素型形式 combine-char,要素型形式 features,及び要素

型形式 sgml-grove-plan 以外の宣言要素型形式を利用可能にする。

11.2

関連

変換処理は,関連の集合を用いて指定する。

[152] association

=  (=>query-expression transform-expression priority-expression?)

[153] query-expression

expression

[154] transform-expression

expression

[155] priority-expression

expression

各関連は,三つまでの構成要素をもつ。

a)

ノードリストを返却する照会式。この照会式はノードリストを返却し,そのノードリスト内のノード

が,関連を適用する候補となる。

b)

関連を適用するノードのそれぞれについて評価する変換式。返却値は,結果グローブ内ノード(複数

も可能)に関する記述であって,それらは入力グローブで選択したノードに対応する。

c)

オプションの優先順位式は,関連を適用する候補ノードの適用の判断に影響する。

式 query-expression は,評価の結果ノードリストとなる。式 query-expression が返却したノードリスト内

のすべてノードは,

現グローブ又は現グローブに由来する補助グローブのノードとなる。

補助グローブは,

9.5

で定義する。式 query-expression 内の手続き current-root は,現グローブの根を含む単一要素ノードリス

トを返却する。

式 priority-expression は,評価の結果整数となる。数値は,関連の優先順位を定義する。関連において式

priority-expression

が省略された場合,その関連の優先順位を 0 とする。数値が大きい方が,より優先度が

高いことを示す。

関連を適用する可能性のある各ノードは,現グローブ内に構成要素集合をもつ。ノードが現グローブ内

にある場合,構成要素集合はそのノードだけを含む。ノードが補助グローブ内にある場合,構成要素集合

はその補助グローブ内のノードの入力特性の値として出現する現グローブ内のノードを含む。関連は,実

際には候補となった任意のノード に適用できる。しかし,ノード の構成要素集合内のノードを構成要

素集合としてもつノードがあり,そのノードにより高い優先順位の関連を適用する場合には,前述の関連

は適用可能ではない。


135

X 4153 : 1998 (ISO/IEC 10179 : 1996)

11.3

変換式

式 transform-expression 内において手続き current-node は,変換中のノードを含む単一要素ノードリスト

を返す。各変換式は,型 create-spec,型 transform-grove-spec,型 create-spec 若しくは型 transform-spec から

成るリスト又は空リストを返す。型 create-spec の各オブジェクトは,結果グローブ内の指定した位置への

部分グローブの作成を記述する。部分グローブは,ノード又はノードを根とした複数のノードから成る。

部分グローブを生成する位置は,結果グローブの根又は結果グローブ内の他のノード相対で指定できる。

結果グローブ内で生成した各ノードについて,変換によって結果グローブにノードを生成した組成要素の

それぞれから,生成されたノードへの対応関係が生成される。これらの対応関係を矢と呼ぶ。矢は式言語

オブジェクトを用いてラベル付けする。矢の開始点は,終点の変換起点と呼ぶ。入力グローブ内のノード

の矢は,そのノードが変換の結果どこに行くかを示す。矢のラベルは一つのノードに適用された,複数の

異なる変換を区別可能にする。ノードの変換式は,作成した部分グローブの行き先として,結果グローブ

の根を指定するか,又は他のノードの変換結果の結果グローブ内のノードに相対での位置を指定する。

11.3.1

部分グローブ指定

作成する部分グローブは,型 subgrove-spec のオブジェクトを用いて記述する。

    (subgrove-spec #!key node: subgrove: class: add: null: remove:

    children: sub: label: sort-children:)

手続き subgrove-spec は,型 subgrove-spec のオブジェクトを返す。

引数 node : は単一要素ノードリストとする。この引数は,作成する部分グローブの根ノードが,引数

node :

の値と同じクラスのノードであって,引数 node :  の値と同じ非ノード型・非内在型の特性をもち,

引数 node :  の値と同じヌル値を値とする特性をもつと指定する。ただし,非ノード型・非内在型の特性は

引数 add :  及び引数 remove :  によって変更を受け,ヌル値を値とする特性は引数 null :  及び引数 remove :

によって変更を受ける。

引数 subgrove :  は,単一要素ノードリストとする。この引数は,作成される部分グローブが引数ノード

を根とする部分グローブの複製となると指定する。

引数 class :  はシンボルであって,作成するノードのクラスを指定する。引数 node ;,引数 subgrove :  及

び引数 class :  の一つだけを指定しなければならない。

引数 add : は,非ノード型・非内在型であってヌル値を値としない特性をノードへ追加することを指定

する。引数 add :  は二つの要素をもつリストのリストとし,その要素リストの第一要素は特性の名前とし,

第二要素は特性の値とする。特性はそのノードのクラスのもつ非ノード型・非内在型の特性とする。引数

add :

で指定した特性値は,引数 node :  に指定されたノードのもつ任意の特性の値を置換する。

引数 null : はシンボルのリストであって,そのノードに指定した名前へのヌル値をもつ非内在特性の追

加を指定する。この指定は引数 node :  で指定されたノードがもつ非ヌル値特性を置換する。

引数 remove :  は,

引数 node :  で指定されたノード及び作成ざれるノードがもつ非内在特性のリストとし,

空リストを無指定時値とする。この引数はヌル値を値とする特性及びヌル値を値としない特性の両方の削

除に利用できる。

引数 sub :  は,手続き subgrove-spec が返す部分グローブの根ノードのための下位ノードを指定するリス

トとする。リストの要素は,最初の要素が部分ノード特性の名前を指定するシンボルであって,残りの要

素が特性の値として指定するノードのための,複数の型 subgrove-spec のオブジェクトとする。この引数は

空リストを無指定時値とする。

引数 children :  は型 subgrove-spec のオブジェクトのリストであって,手続き subgrove-spec の返す部分グ


136

X 4153 : 1998 (ISO/IEC 10179 : 1996)

ローブの根ノードの子ども特性の値としてそれらのノードを指定する。

備考  これらは引数 sub :  を用いて指定することもできるが,引数 children :  を用いるほうが通常は簡

便である。

この引数は空リストを無指定時値とする。

引数 label :  は矢のためのラベルを指定し,その矢は入力グローブの変換したノードから,結果グローブ

内に作成中の部分グローブの根にあたるノードへ作成される。

ラベルは任意の式言語オブジェクトでよい。

無指定時値は,#f とする。

引数 sort-children :  は根ノードの子の順序に影響する手続きとする。11.3.2 を参照のこと。

クラス及び特性は SGML 特性集合で定義するとおり,10.1.5 に記述のある通常変換を伴う応用名によっ

て名付ける。

11.3.2

生成指定

    (create-spec? obj)

手続き create-spec は,引数 obj が型 create-spec の場合に#t を返し,その他の場合に#f を返す。

    (create-root obj sg)

結果グローブの根の生成を指定する型 create-spec のオブジェクトを返す。引数 sg は結果グローブの根を

指定する型 subgrove-spec のオブジェクトとする。引数 obj は結果グローブの識別子とする。

    (create-sub snl sg #!key property: label: result-path: optional: unique:)

    (create-preced snl sg #!key label: result-path: optional: unique:)

    (create-follow snl sg #!key label: result-path: optional: unique:)

手続き create-sub,手続き create-preced 及び手続き create-follow は,引数 snl を開始点とし引数 label :  で

ラベルされた矢ごとに,引数 sg で指定した部分グローブの結果グローブにおける作成の指定を行う。手続

き create-sub,手続き create-preced 又は手続き create-follow の評価は,それ自体では結果グローブへのノー

ドの作成を引き起こさない。変換式以外が返却した型 create-spec のオブジェクトは無視する。

引数 label :  は任意の式言語オブジェクトであってよく,#f を無指定時値とする。

引数 optional :  の値が#f の場合,指定した矢が存在しない場合にはエラーとする。引数 optional :  は#f を

無指定時値とする。

引数 result-path : は手続きであって,各矢においてその終点を一意要素とする結果ノードリストに適用

する。引数 result-path : の手続きは,グローブの構築の際に様々な点で結果ノードリストに適用される。

グローブ構築のある時点で,手続きは要素を一つだけ含む結果ノードリストを返さなければならない。こ

れが生成起点となる。この手続きはどの時点でも,二つ以上の要素を含む結果ノードリストを返してはな

らない。引数 result-path :  が指定されない場合,同じ値を返す手続きを無指定時値とする。

手続き create-sub において,引数 property :  はシンボル又は文字列であって,特性名を指定する。この特

性は生成起点の部分ノード特性となり,部分グローブは生成起点のその特性の要素として作成される。引

数 property : が省略された場合,生成起点の子ども特性を無指定時値とする。生成起点が子をもたない場

合には,省略してはならない。手続き create-preced では,部分グローブは生成起点の先行する兄弟として

生成される。手続き create-follow では,部分グローブは生成起点の後続する兄弟として生成される。

二つの部分グローブにおいて,部分グローブの根がともに同じ生成起点,同じ生成手続きである場合に

だけ,二つの部分グローブは同じ生成法と呼ぶ。ただし,生成手続きが手続き create-sub の場合には,同

じ特性 propname をもたなければならない。

引数 unique :  が値#f でない場合,この部分グローブは同じ生成法で生成される一意部分グローブでなけ


137

X 4153 : 1998 (ISO/IEC 10179 : 1996)

ればならない。引数 unique :  は,値#f を無指定時値とする。

引数 unique :  が値#f をもたない場合,同じ生成法で生成される部分グローブの相対順序は,部分グロー

ブの生成順とは独立に決定する。あるノードを生成起点として手続き create-follow 又は手続き create-preced

によって生成した兄弟を,ノードに直接依存する兄弟をと呼ぶ。あるノードに直接依存する兄弟及び直接

依存する兄弟に依存する兄弟をノードに依存する兄弟をと呼ぶ。同じ生成手続き及び同じ生成起点によっ

て生成されたノードを作成中の部分グローブの生成兄弟と呼ぶ。さらに,部分グローブが手続き create-sub

を用いて挿入された場合,挿入された部分グローブの兄弟となるノード及び起点ノードと同じ部分グロー

ブの一部として生成された任意のノードを生成兄弟として扱う。部分グローブを挿入する位置を,最初に

生成兄弟との相対で決定する。次に部分グローブが後続しなければならない生成兄弟の依存する兄弟すべ

てに後続し,部分グローブが先行しなければならない生成兄弟の依存する兄弟すべてに先行する位置に挿

入する。その結果,その部分グローブとその生成起点の間にノードは存在しない。ただし,その生成起点

は生成兄弟,生成兄弟の依存する兄弟のいずれかであってはならない。

部分グローブの根ノードが,部分グローブの起点ノードの子となる場合,その部分グローブの生成兄弟

内での位置は,起点ノードの順序判定に従う。順序判定は手続きであって,手続き subgrove-spec の引数

sort-children :

に指定する。順序判定には,比較する変換起点,つまり二つの結果グローブ内のノードが渡

される。順序判定は,最初のノードが二番目のノードに先行する場合に真を返す。順序判定が指定されな

い場合,手続き tree-before?を順序判定として用いる。この場合,部分グローブの変換起点及びその生成兄

弟すべてが同じ木になければエラーとする。部分グローブの根ノードが起点ノードの子でない場合,部分

グローブのその生成兄弟内での位置は,順序判定として手続き grove-before?を指定したこの場合と同じ方

法で決定する。

矢は他の矢の契機となる場合がある。それは第二の矢が,第一の矢の開始点を最初の引数に,第一の矢

のラベルを引数 label :  に指定している生成手続きによって生成された場合とする。複数の矢が連鎖して各

矢が次の矢の契機となり,最後の矢が最初の矢と同じ開始点及びラベルをもつ場合はエラーとなる。

備考  この要求は,無限ループの可能性を避けるためのものである。

11.3.3

結果ノードリスト

型 result-node-list は,結果グローブ内のノードのリストを表す。型 result-node-list のオブジェクトには,

型 node-list に適用可能な演算の部分集合が適用できる。手続き原型では,引数名 rnl が型 result-node-list を

示す。

備考  適用可能な演算は,結果グローブ内ノードが結果グローブ構成のある時点で式を評価した結果

として得られる結果ノードリストに含まれる場合,結果グローブを構成するそれ以降の任意の

時点において,その式を評価した結果にはそのノードが含まれていることを保証する設計がな

されている。

    (node-list-union rnl ...)

    (node-list-intersection rnl ...)

    (children rnl)

    (attributes rnl)

    (preced rnl)

    (follow rnl)

    (parent rnl)

    (ancestors rnl)


138

X 4153 : 1998 (ISO/IEC 10179 : 1996)

    (descendants rnl)

    (origin rnl)

    (select-by-class rnl sym)

    (select-by-property rnl sym proc)

    (select-by-null-property rnl sym)

    (select-by-missing-property rnl sym)

これらの手続きは,対応する型 node-list に対する演算と同様に振舞うが,返す値は型 node-list ではなく

型 result-node-list となる。

    (select-by-relation rnl i proc)

手続き select-by-relation は,引数 rnl に含まれるノードであって,そのノードだけを含む結果ノードリス

トに,引数の手続き proc を適用した結果が,引数 i 個以上の要素をもつ結果ノードリストを返すノードを

含む,結果ノードリストを返す。

例えば,次の式は,子ノードから共通識別子に para をもつ要素を子孫にもつノードを選択する。

(lambda (x)

  (select-by-relation (children x)

                      1

                      (lambda (y)

                        (select-elements (descendants y) "para"))))

(select-by-attribute-token rnl string

1

 stming

2

)

引 数 rnl 内 の ノ ー ド で あ っ て , そ の 属 性 が ク ラ ス attribute-value-token を 子 に も ち , そ の ク ラ ス

attribute-value-token

の子として特性 token をもち,その値及び引数 string

2

に適用可能な文字列正規化を施し

た結果が等しいノードを含む結果ノードリストを返す。

11.3.4

変換グローブ指定

型 transform-grove-spec のオブジェクトは,現在のグローブに加えて変換されるグローブを示す。

    (transform-grove-spec? obj)

引数 obj が型 transform-grove-spec の場合に#t を返し,それ以外の場合に#f を返す。

    (transform-grove snl obj ...)

引数 snl はグローブ根とする。手続き transform-grove は,引数 snl から新規のグローブを生成して,特性

transform-args

をグローブ根に追加し,その値となるリストに obj,...,を含め,新規のグローブの変換を指

定する型 transform-grove-spec のオブジェクトを返す。

    (select-grove nl obj)

引数 nl の要素であって,そのグローブ根が特性 transform-args をもち,その要素が obj に等しいものを選

択する。

11.3.5  SGML

前書き解析

    (sgml-parse-prolog string)

SGML

文書の前書きを解析することによって構築されるグローブ根ノードだけを含むノードリストを返

す。引数 string は,SGML 文書実体のシステム識別子とする。このグローブは無指定時のグローブ設計を

変更してモジュール instabs を除外して構築する。

備考  この手続きは,典型的には入力と出力が異なる DTD を用いる場合に,手続き subgrove-spec :  の

引数 subgrove :  を指定するために用いる。


139

X 4153 : 1998 (ISO/IEC 10179 : 1996)

11.4  SGML

出力処理

SGML

出力処理は,結果グローブから SGML 文書又は SGML 副文書を生成する。SGML 出力処理の動

作は,検証グローブとの関連で指定する。検証グローブは,結果グローブを SGML 特性集合の,すべての

クラス及び特性を含んだグローブ設計を用いて生成した SGML 文書又は SGML 副文書を解析することに

よって構築される。

備考  実装は検証グローブを構成することを要求されない。

結果グローブは,その結果グローブから,11.4.1 に記載の要求を満たす検証グローブへの検証対応が存

在し,適合 SGML 文書又は適合 SGML 副文書を生成できる場合に適正と呼ぶ。結果グローブが適正な場

合,実装はその SGML 文書又は SGML 副文書を生成する。実装は結果グローブが不正であることは,結

果グローブが不正の場合だけ報告する。

11.4.1

検証対応

すべての結果グローブは,次の要求を満たす。

a)

結果グローブのノードは,下位ノード特性以外には,宣言データ型が型 nodal の特性の値を開示しな

い。

b)

結果グローブ内のノードは,区分 derived に含まれる特性の値は開示しない。

検証対応 は,結果グローブの各ノードを検証グローブのノードに対応させる。ノード V  (n)  は,検証

対応 をノード に適用した結果を意味する。特性値 n  [p]  は,ノード が特性 について開示している

値を示す。検証グローブ内のノード n'は,ノード V  (n)  がノード n'となる結果グローブ内のノード が存

在する場合だけ,基盤をもつと呼ぶ。

検証対応 は,次の要求を満たさなければならない。

a)

ノード が結果グローブ根であった場合,ノード (n)  は検証グローブ根となる。

b)

結果グローブ内の相異なるノード 及びノード において,

ノード (m)  とノード (n)  とが異なる。

c)

結果グローブの各ノード において,ノード (n)  はノード と同じクラスをもつ。

d)

結果グローブ内の各ノード と,ノード V  (n)  がヌル値を開示する非ノード型の宣言データ型をもつ

各非内在特性 とにおいて,ノード は,特性 が区分 derived 又は区分 optional ではない場合,特性

p

に関してヌル値を開示する。

e)

結果グローブ内の各ノード と,

ノード (n)  がヌルでない非ノード型の値を開示する各非内在特性 p

とにおいて,ノード は,特性 が区分 derived 又は区分 optional ではない場合,特性 に関して値を

開示する。

f)

検証グローブ内のノードは,そのクラスが属性値 mayadd をもち,次のいずれかの場合に基盤をもつ。

1)

兄弟のいずれかが基盤をもつ。

2)

ノードの起点が基盤をもち,起点の,起点から下位ノード関係特性が区分 optional でない。

g)

結果グローブの各ノード 及び がヌル値を開示している非内在特性 において,ノード V  (n)  は特

性 に関してヌル値を開示する。

h)

結果グローブ内の各ノード 及びノード が非ヌル値を開示している各非ノード型特性 において,

特性値 n  [p]  の特性集合によってその特性に指定された,適用可能な文字列正規化を適用した後の値

は,特性値 (n)[p]  に等しい。

i)

結果グローブの各ノード 及び が非ヌル値を開示するノード型と宣言された各部分ノード特性 

おいて,(n)[p]  は (n)[p]  に等しい。

j)

結果グローブの各ノード n

ノード が非ヌル値を開示する,

抽象データ型が型 nodelist 又は型 nmndlist


140

X 4153 : 1998 (ISO/IEC 10179 : 1996)

と宣言された各下位ノード特性及び特性値 n  [p]  内の各ノード において,ノード V  (s)  は特性値 

(n)[p]

に属する。

k)

結果グローブ内の各ノード 及びノード が値を開示する,抽象データ型が型 nodelist と宣言した下

位ノード特性及び特性値 [p]  内に存在する任意のノード 及びノード において,ノード がノード

s

に結果グローブ内で先行する場合,検証グローブ内でノード (r)  はノード (s)  に先行する。

特性 transliteration(11.4.2 に記載)は,検証対応では考慮しない。

これらの規則の例外として,検証グローブ内のクラスがクラス attribute-assignment のノードは,SGML

宣言に適用する ISO 8879 の規則において SHORTTAG YES の指定があり,属性値の指定が必要ではない場

合には,基盤をもつ必要はない。

11.41.2

文字変換

[156] transliteration-map-definition

= (define-transliteration-map variable transliteration-entry)

[157] transliteration-entry

=  (character character-list)

[158] character-list

=  (character+)

構文 transliteration-map-definition は,変数 variable を型 transliteration-map のオブジェクトに束縛する。型

transliteration-map

は , 特 定 の 文 字 列 を 一 つ 以 上 の 文 字 列 で 表 現 す る 文 字 変 換 を 指 定 す る 。 各 構 文

transliteration-entry

は,最初の文字が構文 character-list 内の文字列で表現することを指定する。

    (transliteration-map? obj

引数 obj が型 transliteration-map の場合に#t を,その他の場合に#f を返す。

結果グローブ内の各ノードは,その値が型 transliteration-map のオブジェクトの非ノード型の特性

transliteration

をもってよい。ノードに特性 transliteration が指定されない場合,特性 transliteration の値はノ

ードの起点の値となる。結果グローブの根ノードに特性 transliteration が指定されない場合,その値は空の

文字変換対応となる。

同じ文字変換対応特性をもつ,結果グローブ内の一連のノード data-char に関して,文字変換対応と関連

して結果グローブ内の文字列を表す文字列が,結果グローブ内の一連の文字の代わりに出力される。あい

まいな場合には,最も長い構文 transliteration-entry を用いる。

12.

スタイル言語

この 12.においてスタイル言語を規定する。構文的には,スタイル言語は,ISO 8879 が規定するデータ

内容記法にほかならない。この記法の要素内容は,構文 style-language-body として構文解析される。

[159] style-language-body

[[unit-declaration* | definition* | construction-rule* | mode-construction-rule-group* |

application-flow-object-class-declaration* | application-characteristic-declaration* |

application-char-characteristic

property-declaration* | initial-value-declaration* |

reference-value-type-declaration* | page-model-definition* | column-set-model-definition* |

added-char-properties-declaration* | character-property-declaration* | language- definition* |

default-language-declaration?]]

この規格が規定するスタイル言語は,8.6 に示す中核式言語(又はオプションで,8.に示す完全仕様式言

語)を用い,10.2.4 に示す中核照会言語(又はオプションで,10.に示す完全仕様照会言語)を用いる。

[160] style-language-expression

make-expression | style-expression | with-mode-expression

構文 style-language-body の中では,式  (expression)  として式 style-language-expression を用いてよい。


141

X 4153 : 1998 (ISO/IEC 10179 : 1996)

備考  style-expression は,継承された特質の値を指定するために用いる。

12.1

機能

スタイル言語においては,次の機能をオプションとする。

a)

機能 expression の指定によって,完全仕様式言語を利用可能にする。この機能を指定しない場合には,

中核式言語だけを用いなければならない。

b)

機能 multi-process の指定によって,手続き process-children 及び 12.4.4 に示す関連手続きを制限なしで

利用できる。

c)

機能 query の指定によって,10.に示す完全仕様の照会言語の利用及び関連機能の利用を可能にする。

この 機 能 を 指 定 しな い 場 合 に は , 中核 照 会 言 語 だ け を 用 い な け れ ばな ら な い 。 こ れ は , 機 能

multi-process

を含む。

d)

機能 regexp の指定によって,10.3.2 に示すノード正規式の使用を可能にする。

e)

機能 word の指定によって,10.3.1 に示す語探索のための機能の使用を可能にする。

f)

機能 hytime の指定によって,10.2.1 に示す HyTime 所在番地付けのための機能の利用を可能にする。

g)

機能 combine-char の指定によって,要素型形式 combine-char を可能にする。

h)

機能 keyword の指定によって,構文 formal-argument-lists において,#!key 形式でキーワード引数を利

用可能にする。

i)

機能 side-by-side の指定によって,流し込みオブジェクトクラス side-by-side,及び流し込みオブジェ

クトクラス side-by-side-item を利用可能にする。

j)

機能 sideline の指定によって,流し込みオブジェクトクラス sideline を利用可能にする。

k)

機能 aligned-column の指定によって,

流し込みオブジェクトクラス aligned-column を利用可能にする。

l)

機 能 bidi の 指 定 に よ っ て , 表 記 方 向 左 向 き  (right-to-left) 及 び 流 し 込 み オ ブ ジ ェ ク ト ク ラ ス

embedded-text

を利用可能にする。

m)

機能 vertical の指定によって,表記方向下向き (top-to-bottom) を利用可能にする。

n)

機能 math の指定によって,12.6.26 に示す数式に関する流し込みオブジェクトクラスを利用可能にす

る。

o)

機能 table の指定によって,

12.6.27

に示す表に関する流し込みオブジェクトクラスを利用可能にする。

p)

機能 table-auto-width の指定によって,表の列幅を自動計算を可能にする。これは,機能 table を含む。

q)

機能 simple-page の指定によって,12.6.3 に示す簡単なページレイアウトに関する機能の使用を可能に

する。

r)

機能 page の指定によって,流し込みオブジェクトクラス page-sequence,流し込みオブジェクトクラ

ス column-set-sequence 及び関連機能利用可能にする。

s)

機能 multi-column の指定によって,複数段を含む段集合を利用可能にする。これは,機能 page を含む。

t)

機能 nested-column-set の指定によって,流し込みオブジェクト column-set-sequence を先祖にもつ流し

込みオブジェクトクラス column-set-sequence を利用可能にする。これは,機能 multi-column 及び機能

page

を含む。

u)

機能 general-indirect の指定によって,手続き general-indirect-sosofo を利用可能にする。

v)

機能 inline-note の指定によって,流し込みオブジェクトクラス inline-note を利用可能にする。

w)

機能 glyph-annotation の指定によって,流し込みオブジェクトクラス glyph-annotation を利用可能にす

る。

x)

機能 emphasizing-mark の指定によって,流し込みオブジェクトクラス emphasizing-mark を利用可能に


142

X 4153 : 1998 (ISO/IEC 10179 : 1996)

する。

y)

機能 included-container の指定によって,流し込みオブジェクトクラス included-container を利用可能に

する。

z)

機能 actual-characteristic の指定によって,各継承特性 c に関する手続き actual-c を利用可能にする。

aa)

機能 online の指定によって,12.6.28 に示す機能を利用可能にする。

ab)

機能 font-info の指定によって,12.5.7 に示す機能を利用可能にする。

ac)

機能 cross-reference の指定によって,手続き process-element-with-id を利用可能にする。

ad)

機能 charset の指定によって,要素型形式 char-repertoire,要素型形式 combine-char,要素型形式 features

及び要素型形式 sgml-grove-plan 以外の宣言要素型形式を利用可能にする。

12.2

流し込みオブジェクト木

流し込みオブジェクト木は,フォーマット指定と入力文書とを併合したものを抽象的に表現する。流し

込みオブジェクト木のノードは,流し込みオブジェクトと呼ぶ。各流し込みオブジェクトは,流し込みオ

ブジェクトクラスと呼ぶ型をもち,流し込みオブジェクトは,そのクラスのインスタンスとなる。流し込

みオブジェクトは,特質の集合をもつ。流し込みオブジェクトに適用可能な特質は,流し込みオブジェク

トクラスに依存する。流し込みオブジェクトがもつクラス及び特質は,共に流し込みオブジェクトに関し

て必要となるフォーマティング動作の指定を構成する。

各流し込みオブジェクトは,ポート集合をもち,各ポートに対して流し込みオブジェクトの順序付きリ

ストを附属できる。ポート集合は,空でもよい。ポートをもつすべての流し込みオブジェクトにおいて,

一つのポートは主ポートとして区別してもよい。主ポートには,名前付けを行わない。その他のポートは

すべて名前をもち,その名前が流し込みオブジェクトの文脈の中でそのポートを一意に識別する。ポート

に附属した流し込みオブジェクトのリストを,ストリームと呼び,そのリストの要素を,ストリームの要

素と呼ぶ。流し込みオブジェクト木の中においてどのストリームの要素ともならない,流し込みオブジェ

クトが一つだけ存在する。この流し込みオブジェクトを流し込みオブジェクト木の根と呼ぶ。流し込みオ

ブジェクト木の中の他のすべての流し込みオブジェクトは,ただ一つのストリームの要素となる。このス

トリームを流し込みオブジェクトが属するストリームと呼ぶ。流し込みオブジェクトの属するストリーム

が附属している流し込みオブジェクトを,その流し込みオブジェクトの流し込み親と呼ぶ。流し込みオブ

ジェクトがもつポート集合は,そのクラスによって制御され,あるクラスに関してはその特質によっても

制御される。ポートをもたない流し込みオブジェクトを,原子流し込みオブジェクトと呼ぶ。インスタン

スが常に原子流し込みオブジェクトになる流し込みオブジェクトクラスを,原子流し込みオブジェクトク

ラスとする。異なるストリームにおける流し込みオブジェクトの相対的位置決めは,流し込みオブジェク

トを同期することによって制限できる。さらに,特質の値から流し込みオブジェクトを生成してよい。

12.3

領域

領域の概念は,流し込みオブジェクトに意味を与えるために用いる。根以外の流し込みオブジェクトを

フォーマットした結果は,領域の列となる。これらの領域の性質は,この規格では完全には規定しない。

領域は,四角形の箱であって,固定した幅及び高さをもつ。領域は,表示媒体上に可視化できるマーク集

合の指定でもある。領域は,他の領域を含んでもよい。特に領域は,グリフを含んでもよい。領域を生成

した流し込みオブジェクト及びその領域を用いる文脈に依存して,情報を領域に附属することもできる。

領域は,行外領域及び行内領域の二つの種別をもつ。行外領域及び行内領域の概念を,

図 に示す。


143

X 4153 : 1998 (ISO/IEC 10179 : 1996)

図 4  行外配置の領域及び行内配置の領域

12.3.1

行外領域

行外領域は,直接的には行の部分とはならない領域とする。行外領域は,もともと絶対的な方向性をも

つ。

備考  非公式な言い方では,箱には“こちらが上”と示す矢印がある。

行外領域の位置決めは,領域コンテナによって指定する。領域コンテナは,左下角を原点とする独自の

座標系をもち,水平に右に伸びる正の 軸及び垂直に上に伸びる正の 軸をもつ。

領域コンテナは,それ自体の座標系によって指定する流し込み方向をもつ。流し込み方向は,互いに反

対の開始端及び終了端を与える。領域コンテナの大きさは,流し込み方向に直交する方向において常に固

定される。このことは,開始端及び終了端の長さが常に固定され,互いに等しいことを意味する。

流し込み方向の領域コンテナの大きさは固定でき,流し込まれる領域に合わせて,必要に応じて成長す

ると指定してもよい。領域コンテナに流し込まれる行外領域は,流し込み方向に直交する方向における大

きさを,その方向における領域コンテナの大きさと常に等しくして生成される。これを領域の行外サイズ

という。領域コンテナは,次のとおりに行外領域の列で流し込む。最初の行外領域は,領域コンテナの開

始端と,その領域の開始端を一致させて位置付ける。次の行外領域は,その前の領域の終了端と,その行

外領域の開始端を一致させて位置付ける。以降同様とする。これを

図 に示す。


144

X 4153 : 1998 (ISO/IEC 10179 : 1996)

図 5  領域コンテナ及び行外領域

取り込みコンテナ領域流し込みオブジェクトを親とする領域コンテナは,回転を指定し,それに流し込

む行外領域のすべてに適用してよい。回転の角度は,90°の倍数に限定する。この回転は各行外領域に適

用するので,行外領域の開始端及び終了端をも変更する。

備考  異なる回転の領域を組み合わせるには,取込み領域コンテナの使用が必要となる。

行外領域の開始端から終了端にいたる方向を,行外領域の配置方向とする。行外領域は,その領域の配

置方向に対して垂直な表記方向をもつ。


145

X 4153 : 1998 (ISO/IEC 10179 : 1996)

図 6  右向き表記方向に関する配置方向

表記方向は,右向き (left-to-right) ,左向き (right-to-left) 又は下向き (top-to-bottom) のいずれかとする。

図 を参照のこと。

図 7  いろいろな表記方法

12.3.2

行内領域

行内領域は,行の部分とする。行内領域は,その箱の辺にある位置決め点をもち,送り方向という方向

をもつ。その方向は,位置決め点のある箱の辺に垂直となる。位置決め点から送り方向にあり,その箱の

反対の辺の位置を,行内領域の送り位置とする。

備考  非公式な言い方では,箱の上には位置決め点から伸びる矢印があり,“現在行と並行にせよ”と

の指示を行っているともいえる。

行内領域は位置決めされて,次に示す方法で行を形成する。段落に関連する表記モードは,その段落の

行内進行方向を与える。行の構成処理と関連して,配置点がある。最初の行内領域は,その送り方向を段

落の行内進行方向と同じ方向に向け,その領域の送り位置を現配置点とする。次の領域は,その位置決め

点を現配置点に一致させて配置し,その送り方向を段落の行内進行方向と同じ方向に向け,送り位置を次


146

X 4153 : 1998 (ISO/IEC 10179 : 1996)

の領域を置くための現配置点とする。これを

図 に示す。

図 8  行内領域の配置及び位置決め

カーニングの利用は,

図 に示すとおり,位置決めを修正する。

図 9  カーニングを伴う位置決め

段落の表記モードが決定する方向をもち,行内領域の位置決め点を含むパスを,配置パスという。右向

きの表記モードの場合を

図 10 に,左向きの表記モードの場合を図 11 に示す。


147

X 4153 : 1998 (ISO/IEC 10179 : 1996)

図 10  右向き表記方向に関するグリフの位置決め

図 11  左向き表記方向に関するグリフの位置決め

段落が複数の表記モードを使う場合,追加の処理段階が必要となる。例えば

図 12 では,英語テキストに

関する右向きの行内進行方向に加えて,ヘブライ語テキストに関する左向きの行内進行方向を用いる。こ

の場合,行分割は更に複雑となる。

図 12  ヘブライ語及び英語に関する混植表記方向

フォント資源の並びモード属性によって指定する並びモードも,グリフの位置決めに影響を与える。そ

の影響を

図 13 に示す。行内流し込みオブジェクトには,この処理を修飾できる特質がある。


148

X 4153 : 1998 (ISO/IEC 10179 : 1996)

図 13  混植並びモードのスクリプト

行内領域は,行進行方向をもつ。行進行方向は,その段落の行内進行方向に直交する。行内領域の幾つ

かの特質は,行進行方向と関連して指定する。

12.3.3

行内及び行外の流し込みオブジェクト

フォーマットの結果,行内領域の列を生成する流し込みオブジェクトを,

“行内である”という。フォー

マットの結果,行外領域の列を生成する流し込みオブジェクトを,

“行外である”という。幾つかの流し込

みオブジェクトクラスのインスタンスは行内だけになり,幾つかの流し込みオブジェクトクラスのインス

タンスは行外だけになり,インスタンスが行内又は行外のどちらともなる流し込みオブジェクトクラスも

ある。どちらにもなる流し込みオブジェクトの場合,行内又は行外の指定は,流し込みオブジェクトの特

質によって行う。特質によって制御しない場合,そのポートに附属する流し込みオブジェクトが行内・行

外のどちらかに従って制御する。流し込みオブジェクトのクラスは,その流し込みオブジェクトの各ポー

トに関して,そのポートに関連する流し込みオブジェクトが,行内だけ,行外だけ又は行内若しくは行外

のどちらかだけになることを決定する。

備考  12.6.16 に規定する取込みコンテナ領域流し込みオブジェクトは,行外だけになり得る流し込み

オブジェクトが,改行することなく行の中に間接的に現れることを可能にする。例えば,縦書

きの日本語を改行せずに英語テキストの行の中に混在させてもよい。

12.3.4

添付領域

行外領域は,添付領域と呼ぶ多くの関連する行内領域をもつことができる。それらを

図 14 に示す。図

14

は,行外領域の両側に添付した側線及び図形の利用を示す。

備考  添付領域は,側線,行番号及び傍注のために用いる。


149

X 4153 : 1998 (ISO/IEC 10179 : 1996)

図 14  添付領域

各添付領域は,添付点と呼ぶ行外領域の箱の上の点に対して,相対的に位置決めする。添付点は,行外

領域の各添付領域に関して異なってもよい。添付点は,配置方向に平行な行外領域の辺にある。

各添付領域に関して,添付対象の行外領域の辺を示す指定を行う。各添付領域は並び点をもち,それを

対応する添付点と同じ位置にし,配置方向を同じにして配置する。

各添付領域は,行外領域からの分離間隔を指定する。添付領域が,表記モードが決定する方向の開始点

である辺にある場合,その分離間隔は,添付領域の並び点から添付点までのその方向の間隔であり,添付

領域の並び点をその送り点とする。添付点が,表記モードが決定する方向の終了点である辺にある場合,

その分離間隔は,添付点から添付領域の並び点までのその方向の間隔であり,添付領域の並び点をその位

置決め点とする。

備考  分離間隔に対する負の値は,添付点が行外領域の内部にあることを示す。

12.4

流し込みオブジェクト木構成

12.4.1

構成規則

[161] construction-rule

= query-construction-rule | id-construction-rule | element-construction-rule | root- 

construction-rule | default-element-construction-rule

要素型形式 style-specification 内(7.1 を参照のこと。

)の構成規則は,入力グローブのノードをどのよう

に処理するかを指定する。各構文 construction-rule は,入力グローブ内のノードの幾つかの集合,ときには

空の集合に合致する。グローブ及びこの規格でのグローブ使用に関しては,9.を参照のこと。

構文 construction-rule は,

式 construct-expression を含む。

それは型 sosofo のオブジェクトを返す式とする。

型 sosofo は,流し込みオブジェクト木に追加する流し込みオブジェクトの列の指定 (Specification Of a

Sequence Of Flow Objects)

を意味する。12.4.3 を参照のこと。構文 construction-rule の規則をノードに適用

すると,式 construct-expression が評価される。その規則を適用するノードが,その式 construct-expression

を評価するための現ノードとなる。

ノードに合致する構文 construction-rule の規則のうち,次に定義する最も適格な規則をそのノードに適用

する。


150

X 4153 : 1998 (ISO/IEC 10179 : 1996)

備考  ノードの処理には副作用がなく,単に値を返すだけである。

ノードは現処理モードに応じて処理される。構文 mode-construction-rule-group によって指定する名前付

きの処理モードに加えて,名前なしの初期モードが存在する。どの構文 mode-construction-rule-group の規

則グループに属さないすべての構文 construction-rule の規則は,処理モードが初期処理モードの場合にも,

名前付きモードの場合にもノードに合致する。流し込みオブジェクト木は,入力グローブの根ノードを初

期処理モードで処理することによって,入力グローブから構成される。その結果の sosofo によって指定さ

れる流し込みオブジェクトは,流し込みオブジェクト木の根の子として追加される。この型 sosofo によっ

て指定される流し込みオブジェクトは,すべてラベルなしとなり,そのすべてが流し込みオブジェクトク

ラ ス scroll , 流 し 込 み オ ブ ジ ェ ク ト ク ラ ス page-sequence , 又 は 流 し 込 み オ ブ ジ ェ ク ト ク ラ ス

simple-page-sequence

のインスタンスとなる。

[162] mode-construction-rule-group

= (mode mode-name construction-rule*)

[163] mode-name

identifier

構文 mode-construction-rule-group 内の構文 construction-rule の規則は,現処理モードが識別子 mode-name

の場合にだけ,ノードに合致する。

構文 construction-rule の規則の相対的な適格性を,次のとおりに定義する。

a)

構文 mode-construction-rule-group 内の構文 construction-rule の規則は,構文 mode-construction-rule-group

外の構文 construction-rule よりも適格性が高いとする。

b)

先 行 規 則 に よ っ て 同 じ 適 格 性 を も つ 構 成 規 則 の 中 で は , あ る 構 文 style-specification 部 の 構 文

construction-rule

の規則が,後続する部のすべて構文 construction-rule の規則よりも適格性が高い(7.1

を参照のこと。

c)

先行規則によって同じ適格性をもつ構成規則の中では,次に示す各項はそれぞれその次の項よりも適

格性が高い。

1)

構文 query-construction-rule

2)

構文 id-construction-rule

3)

構文 element-construction-rule

4)

構文 default-element-construction-rule

5)

構文 root-construction-rule

d)

構文 query-construction-rule は,それより低い優先度をもつ他の構文 query-construction-rule の規則より

も適格性が高い。

e)

節 qualified-gi を使用した指定は,節 qualified-gi を使用しない規則より適格性が高い。節 qualified-gi

を使用する規則の間では,より多くの節 gi をもつ規則の方が適格性が高い。

適格性が等しい複数の構成規則がノードに合致する場合は,エラーとする。

構文 style-language-body で明示的に指定する構成規則に加えて,暗黙の無指定時構成規則がある。無指

定 時 構 成 規 則 は , 入 力 グ ロ ー ブ の ど の ノ ー ド に も 合 致 す る が , 明 示 的 に 指 定 さ れ た ど の 構 文

construction-rule

の規則よりも適格性が低い。無指定時構成規則が返す結果は,次に示すとおりに,適用す

るノードの型に依存する。

a)

クラス sgml-document のノードに関しては, (process-children) を返す。

b)

クラス element のノードに関しては, (process-children) を返す。

c)

クラス char のノードに関しては, (make character) を返す。

d)

クラス attribute-assignment のノードに関しては, (process-children) を返す。


151

X 4153 : 1998 (ISO/IEC 10179 : 1996)

e)

その他の任意のノードに関しては, (empty-sosofo)  を返す。

[164] query-construction-rule

= (query style-query-expression construct-expression priority-expression)

構文 query-construction-rule は,式 style-query-expression が返すノードリスト内のどのノードにも合致す

る。構文 query-construction-rule を使用するには,機能 query を利用可能にしなければならない。

[165] style-query-expression

expression

式 style-query-expression は,型 node-list のオブジェクトを返す。式 style-query-expression 内では,手続き

current-root

及び手続き current-node は,共に現在処理中のグローブのグローブ根を返す。

[166] construct-expression

expression

式 construct-expression は,型 sosofo のオブジェクトを返す。機能 query を利用可能とした場合,式

construct-expression

内では手続き current-node は現在処理中のノードを返す。

[167] priority-expression

expression

式 priority-expression は,構文 query-construction-rule の規則の優先度を指定する。その値は,評価の結果

数値となる。式 priority-expression が省略された場合,その優先度は 0 とする。より大きい数値が,より高

い優先度を示す。

[168] elementt-construction-rule

= (element (gi | qualified-gi) construct-expression)

[169] gi

string | symbol

[170] qualified-gi

= ((gi+))

構文 elementt-construction-rule の規則は,クラス element に属し,節 gi 又は節 qualified-gi に合致する任意

のノードに合致する。

ノードはその共通識別子が,

型 string 又は型 symbol と等価の場合に節 gi に合致する。

ノードは,節 qualified-gi 内の最後の節 gi がそのノードに合致し,そのノードの親が最後から 2 番目の節

gi

に合致し,同様に節 qualified-gi 内の各節 gi が対応するノードの先祖に合致する場合に,節 qualified-gi

と合致する。

[171] default-element-construction-rule

= (default construct-expression)

構文 default-element-construction-rule の規則は,そのクラスがクラス element のノードに合致する。

[172] root-construction-rule

= (root construct-expression)

構文 root-construction-rule は,そのクラスがクラス sgml-document のノードに合致する。

[173] id-construction-rule

= (id unique-id construct-expression)

[174] unique-id

symbol | string

構文 id-construction-rule は,クラスがクラス element であって,節 unique-id の指定に等しい一意識別子

をもつノードに合致する。

12.4.2

主要流し込みオブジェクト

流し込みオブジェクトは,現ノードから構成され,流し込みオブジェクト木の上にある(つまり参照値

又は特質値でない)場合に,入力グローブ内のノードと関連する。暗黙の無指定時構成規則を用いて作成

された流し込みオブジェクトは,明示的な構成規則を用いて作成された流し込みオブジェクトと同様に,

その規則を適用した入力グローブ内のノードと関連する。

あるノードに関連付けられた流し込みオブジェクトは,次の場合にそのノードに関連付けられた他の流

し込みオブジェクトより密接に関連する。

a)

ある流し込みオブジェクトが,現処理モードが初期処理モードで作成されており,他の流し込みオブ

ジェクトが初期処理モード以外で作成されている場合。

b)

あるオブジェクトが他のオブジェクトを,直接又は間接的に含んでいる場合。


152

X 4153 : 1998 (ISO/IEC 10179 : 1996)

あるノードに他の任意の流し込みオブジェクトより密接に関連している流し込みオブジェクトが存在す

る場合,その流し込みオブジェクトをそのノードの主要流し込みオブジェクトと呼ぶ。

12.4.3  Sosofo

型 sosofo のオブジェクトは,

流し込みオブジェクト木に追加する流し込みオブジェクト列の指定とする。

備考1.  式言語が流し込みオブジェクトを直接操作することは決してなく,データ型 sosofo を用いて

それらの指定だけを操作する。

2.

実装は,入力グローブのノードに適用された構文 construction-rule 内の式 construct-expression

が型 sosofo のオブジェクトを返した時点で,そのオブジェクト内の情報を流し込みオブジェ

クト木の一部を構成するために用いる。

型 sosofo のオブジェクトによって指定される各流し込みオブジェクトは,シンボルでラベル付けしてよ

い。指定する対象のすべてがラベルなしの型 sosofo のオブジェクトを,ラベルなし sosofo と呼ぶ。

備考  流し込みオブジェクトは,式 make-expression で引数 label :  を指定してラベル付けする。

    (sosofo? obj)

引数 obj が型 sosofo の場合に#t を,その他の場合に#f を返す。

[175] make-expression

= (make flow-object-class-name keyword-argument-list content-expression*)

[176] content-expression

expression

式 make-expression を評価した結果は,型 sosofo のオブジェクト(結果 sosofo)であって,その最初の要

素は,引数 flow-object-class-name で指定した名前のクラスの流し込みオブジェクトとなる。この流し込み

オブジェクトは,構成された流し込みオブジェクトと呼ぶ。それぞれの式 content-expression は,型 sosofo

のオブジェクトを返す。式 content-expression が返す型 sosofo のオブジェクトは,連結されて内容を構成す

る型 sosofo のオブジェクトを形成する。引数 flow-object-class-name が原子流し込みオブジェクトクラスの

名前の場合,式 content-expression を指定してはならない。引数 flow-object-class-name が原子流し込みオブ

ジェクトの名前でなく,式 make-expression に式 content-expression を含まない場合, (process-children)  の効

果をもつ構文 content-expression を用いる。

それぞれの式 make-expression は,内容対応をもつ。内容対応はラベルをポートに対応させる。内容 sosofo

に指定した各流し込みオブジェクトは,順次考慮する。流し込みオブジェクトがラベル付きでない場合,

構成する流し込みオブジェクトが主ポートをもてば,その主ポートに附属されたストリームに追加する。

主ポートをもたない場合エラーとする。流し込みオブジェクトがラベル付きであって,内容対応によって

対応付けるラベルをもつ場合,その流し込みオブジェクトはラベルが対応付けたポートに附属するストリ

ームに追加される。それら以外の場合,流し込みオブジェクトは結果の型 sosofo のオブジェクトに追加さ

れる。つまり,これらの流し込みオブジェクトは結果の型 sosofo のオブジェクト内の構成された流し込み

オブジェクトに後続する。

キーワードは,式 content-expression としてではなく節 keyword-argument-list の一部として扱う。節

keyword-argument-list

内で 2 回以上同じキーワードが出現した場合,エラーとはしないが,最初に出現した

もの以外はすべて無視する。節 keyword-argument-list 内では,次のキーワードが出現してよい。

a)

特質の名前を示すキーワードは,12.4.6 に記述するとおり,その流し込みオブジェクトにおけるその

名前の特質の値を指定する。ただし,継承可能特質の場合には,その値を上書きされる。特質が継承

可能特質でない場合,その流し込みオブジェクトに適用可能な特質でなければならない。

b)

文字列 c が継承可能特質の名のキーワード force!c : 。その特質の値を指定するとともに,12.4.6 で記

述した値の上書きを抑制する。


153

X 4153 : 1998 (ISO/IEC 10179 : 1996)

c)

参照値型の名前を示すキーワード。構成する流し込みオブジェクトがその型の参照値を,指定した値

でもつことを指定する。

d)

キーワード use :  。12.4.6 で記述するとおり,構成する流し込みオブジェクトで用いるスタイルを指定

する。その値はスタイルオブジェクト又はスタイルを適用しないことを示す#f とする。

e)

キーワード content-map :  。その make-expression における内容対応を指定する。その値は,二つのオブ

ジェクトから成るリストのリストであって,最初のオブジェクトはラベルを指定するシンボルで,2

番目のオブジェクトはポート名を示すシンボル又は主ポートを示す#f のいずれかとする。内容対応で

は,ラベルは 2 回以上出現してはならない。

キーワード content-map :  が指定されない場合,その流し込みオブジェクトの主ポートでないポート

のそれぞれについて,そのポート名に等しい二つのシンボルから成るリストを内容対応として用いる。

f)

キーワード label :  。

結果の型 sosofo のオブジェクト内に構成した流し込みに対するラベルを指定する。

その値はシンボルとする。

[177] flow-object-class

identifier

構文 flow-object-class-name には,流し込みオブジェクトクラスの名前となる任意の識別子を指定できる。

[178] application-flow-object-class-declaration

= (declare-flow-object-class identifier steing)

識別子 identifier が,節 flow-object-class-name で指定する名前であって,文字列 string で指定した公開識

別子をもつと宣言する。

[179] with-mode-expression

= (with-mode mode-specification expression)

[180] mode-specification

mode-name | #f

式 with-mode-expression は,式 expression を引数 mode-specification で指定した処理モードで評価する。引

数 mode-specification の値#f は,無名の初期モードを示す。引数 mode-specification 内の識別子 mode-name

は,構文 mode-construction-rule-group 内で指定済みでなければならない。

    (empty-sosofo)

空の型 sosofo のオブジェクトを返す。

    (literal string ...)

引数 string 列内の各文字ごとに,

クラス character の流し込みオブジェクト一つを同じ順序で含む型 sosofo

のオブジェクトを返す。各文字流し込みオブジェクトは,クラス character を構文 flow-object-class-name 

し,

キーワード char :  に文字を指定した式 make-expression を評価して構成された場合と同じに構成される。

    (process-children)

現ノードの子を順に処理した結果の型 sosofo のオブジェクトを追加した結果の型 sosofo のオブジェクト

を返す。現ノードがクラス sgml-document の場合,特性 document-element をノードの子として扱う。

    (process-children-trim)

現ノードの子から,先頭及び末尾にあり,特性 input-white-space が真となる値を特質 char にもつノード

列を除いた後,順に処理した結果の型 sosofo のオブジェクトを追加した結果の型 sosofo のオブジェクトを

返す。

    (process-matching-children pattern ...)

現ノードの子で引数 pattern 列のいずれかに合致するノードを順に処理した結果の型 sosofo のオブジェク

トを連結した結果の型 sosofo のオブジェクトを返す。引数 pattern