EDB プログラマと管理者のための手引き

平成 30 年 12 月 8 日 18 時 49 分
大家 隆弘＠徳島大学

alex@db.tokushima-u.ac.jp

2

目次
第I部

EDB の概要

第 1 章 概要

1.1

まえがき . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2
1.3

要求事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
特徴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

第 2 章 EDB における情報管理

7
8
8
9
10

2.1

扱う情報情報について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11
11

2.2
2.3
2.4

EID と EOID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 つの時間軸 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
情報の表現 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11
12
12

2.5
2.6

XMLDB と RDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
テーブル，カラムの XML 名と SQL 名，名称 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12
12

第 3 章 EDB におけるデータ表現

13
13

3.1

名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.2
3.3
3.4

情報の記述

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ベース要素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
基本要素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13
14
14

3.5
3.6

要素の排列

16
17

3.7

期間限定属性 (chronological) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

要素名の階層化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.7.1
3.7.2

まえがき . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
期間限定したい情報の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17
17
17

3.7.3

基本方針 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

3
3.7.4
3.7.5
3.7.6
3.8
3.9

期間限定属性の XML での表現 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
どのテーブル，カラムについて期間限定を指定するか? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19
20
21

DTD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
テーブルの XML の意味 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2222

関係データベース (RDB) への反映 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

第 4 章 EDB における日付の扱い

4.1

日付の範囲

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28
28

4.2

存在しない日付の扱い . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

第 5 章 ソフトウェア構成

30

第 II 部

32

ライブラリ

第 6 章 LibEDB

33
33

6.1

情報識別子

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6.2
6.3

リンク (link). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

二分木 (binary tree) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33
38

6.4
6.5
6.6

BASE64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
画像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
コンテキスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

42
43
46

6.7

構造体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6.7.1

XMLDB 構造体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

46
46

6.7.2
6.7.3
6.7.4

BASE 構造体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TABLE 構造体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tuple 構造体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

48
50
54

6.7.5
6.7.6

TupleColumn 構造体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Datum 構造体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5560

6.8 データベース接続 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.9 NOTIFY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.10 データベースアクセス関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

63
65
66

6.11 テーブル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.12 タプル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

67
68

4
6.13 ドキュメント出力関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.14 カタログ (catalogue) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.15 コンディション (condition) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

68
74
77

6.16 見出しの生成と制御 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.17 プロセス制御 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

81
83

第 7 章 LibEDBPub

7.1

出力スタイルと文書作成言語 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

87
87

7.2
7.3
7.4

doc 関数系と print 関数系 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
コンテキスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ライブラリ制御関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

88
88
88

7.5
7.6

出力関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9091

ユーザ定義出力関数の登録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7.6.1
7.6.2
7.6.3
7.7

情報 (タプル) 単位 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
項目 (カラム) 単位 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
型 (タイプ) 単位. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

システムデフォルトの出力関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

92
97
97

7.7.1

libedbpub/modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

98
98

7.7.2

モジュール追加上の注意 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

100

第 8 章 LibEDBR と LibEDBPubR

101

第 III 部102

EDB 運用

第 9 章 EDB の設定と関連ソフトウェア

9.1

103
Operating System (FreeBSD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

9.2
9.3

File System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

9.4
9.5

Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
EDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
9.5.1 データベースの構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
9.5.2
9.5.3

データベースアクセス設定ファイル (edb.conf) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
データベース管理プログラム

108. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

5
第 10 章 EDB 運用のための準備

112

第 IV 部115

EDB/Dwarf について

第 11 章 Dwarf

116

11.1 Dwarf の配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
11.2 Dwarf のコマンドライン引数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
11.3 Dwarf へのコマンド送信 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
11.4 データベース間 (src-db → dst-db) の情報転送 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
11.5 担当データベース (dst-db) 内での XMLDB → RDB の情報の展開． . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

第V部

EDB/PKI121

第 12 章 概要

12212.1 EDB/PKI の目的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
12.2 EDB/PKI の運営・特徴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
12.3 EDB/PKI での制約事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

第 13 章 実装

124
13.1 site.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
13.2 ディレクトリ構造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
13.3 pki.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
13.4 関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
13.4.1 CA 管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
13.4.2 その他 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

第 VI 部EDB と外界131

第 14 章 外部からの情報参照

132
14.1 WWW/CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
14.1.1 閲覧 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
14.1.2 【画像】情報の参照 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

6
14.1.3 編集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
14.2 whois/TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
14.3 EDB/Gate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
14.3.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
14.3.2 接続方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
14.3.3 Character Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
14.3.4 Scheme of Request/Response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
14.3.5 Command Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
14.3.6 Format of Response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
14.3.7 Condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
14.3.8 Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
14.3.9 Status Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
14.3.10 Transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
14.3.11 Notice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
第 15 章 外部への情報参照

151

第 16 章 外部との情報交換

152
16.1 まず最初に考えること . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
16.2 基本事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
16.3 CSV (level-0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
16.4 行分割 (レベル-1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
16.5 XML (level-2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

第 VII 部

付録

156

第 17 章 FreeBSD5.3 での作業記録 (Dec. 28. 2004)

157

第 VIII 部

161

索引

第I部

EDB の概要

8

第1章

1.1

概要

まえがき

近年，政府機関，自治体，公共団体などの情報開示がすすむなかで，大学においても様々な情報の公開が望まれている．従来，公開のための情報の取りまとめは，調査文書の配布，職員がそれに記入という方法をとっていた．そのため，たとえ同様の公開情報のための調査であってもその都度記入作業が必要であり，また調査毎に様式が変更されるため様式を変更して記入するための手間が必要であった．また，書面による調査は，最終的に書面からワードプロセッサなどへの入力作業が発生し，事務（もしくは，教官，技官）の作業負担となるほか，入力誤りの検査のために校正刷りの確認作業が必要となる．このような作業は，年々増加の傾向にあり，全体の職務のなかで次第に大きな割合を占めるようになっている．
一方，情報工学の分野ではネットワークを介して情報を共有，管理する技術が進展していることは周知の事実であり，工学部の職員がいつまでも書面による作業負担に関わっていることは社会的な水準からみて時代遅れである．
データベースソフトウェアなどを用いてネットワークを介して情報を管理，共有することの利点としては，• 入力作業負担の分散
入力作業を分散させることにより，特定の部署に作業が集中することがなくなる．これにより調査開始から情報の取りまとめまでの期間を短縮することができる．また，個々の情報を，その情報に一番関係深い個人が入力することにより，単純な入力ミスの回避，および入力データの確認を行なうことができる．

• 情報の再利用
一度入力した情報は当然再利用できる．調査の際に足りない情報のみを新規に登録するだけでよい．

• 情報の表現様式の統一
かつて，フロッピーディスクや電子メールを用いた調査が行なわれたことがあるが，ディスクに格納されたファイルやメールの添付文
書の様式の不一致が情報収集者を悩ませる結果となった．

• 情報の即時性
従来，情報の公開は 1 年から数年のサイクルで行なわれ，また，調査から公開までは数ヵ月の期間が必要なため，公開時には既に情報は古くなっている．

第 1 章 概要

9

データベースから公開情報を作成する作業を自動化することによって，常に最新の情報を公開することが可能となる．

• インターネット上への情報公開促進
前項とも関連するが WWW 等のメディアに情報を変換することによって，従来手作業で行なっていた，Web 頁の作成を自動化することができる．
などがある．
我々ワーキンググループは，本学部の情報を一つのデータベースにより管理し，必要に応じて情報を取り出すシステムを構築している．本稿は，現在作成している工学部情報管理データベースの概要を述べたものである．

1.2

要求事項

組織の情報をデータベースにより管理し，公開する際には，情報の信頼性を考慮しなくてはならない．

• 情報の履歴
データベースの登録情報が「何時」，「誰によって」，「どのように（登録）変更された」を履歴として保存する必要がある．特に，利用者が学部教職員のように多数にまたがる場合，情報を登録（変更）した人物を特定することは重要である．事後において情報の操作者を特定できることにより，無責任な情報登録が減少し，全体の情報の信頼性を向上させることが可能である．

• 情報の権限
一方，登録されている情報の変更権限を各情報に付加しておくことも必要である．大学において悪意のある情報改変は少ないと思われるが，操作の誤りによって目的外の情報を変更してしまう可能性を減らすことができる．

• 統一された様式
データベースから情報を取り出し目的を果たす（冊子の編簒，統計情報の作成，他）には，登録情報が統一された様式により作成されていることが必要である．

• 情報の識別性
データベースに登録されている情報を分類する際に，情報を正しく分類することが必要である．例えば，論文などの著者による分類を行う場合を想定すると，人名には同姓同名の問題があるため，人名そのものによる分類には信憑性がない．

• 記述の統一性
データベースに登録されている情報を元に業績リストを作成する際に，雑誌名や組織名の統一が取られている必要がある．

第 1 章 概要

1.3

10

特徴

本節では，現在構築中のデータベースの目標としている特徴について述べる．

• アクセス方法– WWW による情報登録/修正– whois/TCP ポートを利用した情報の取り出し．
• 通知システムE-mail による notiﬁcation: 他者による登録情報の修正が発生したときに，情報の所有者および関係者に電子メールを用いて通知を行
なう．

• データ様式– 英文，和文，和文読み– 変更履歴の保存• 追記型登録
本データベースは登録情報の削除を行なわない．
登録・修正された情報は全て履歴として保存し，誰が，何時，どのような登録を行なったかを全て保存する．
削除の変わりに情報の無効化の機能を提供する．

• 参照型データ登録
同じ情報は複数のデータにまたがって登録されない．

• セキュリティ– SSL(https) による通信路暗号化– パスフレーズによるユーザ認証
パスフレーズ認証は，主にデータベースへのアクセスの可否を認証するために利用する．
言い替えると，データベース入口部分のログイン手順におよびアクセス不可な情報のチェックを個人認証により実現し， データの登録・修正は情報の前登録者，所有者に通知することで，登録データの確認作業を行なう．

11

第2章

EDB における情報管理

扱う情報情報について

2.1

基本原則として，現実世界においても唯一の情報を EDB においても唯一の情報として登録する．この考え方は，データベースの正規化と完全に合致するものである．

• 大原則: 「現実世界において 1 つの事柄を登録情報 1 つに対応させる」
複数著者の著作においても登録情報は 1 つであり，複数の著者がその情報を共有する．

• 参照型記述方式（他の情報を参照することによる情報記述）を採用．
個人情報を含む全ての情報に識別子 (EID) を割り当て，著作の著者には個人情報を選択，その EID を記述する．

• 大前提:「 参照型記述方式を用いた場合のみ，分類の対象となる」

2.2

EID と EOIDEDB では登録情報に個別に情報識別子 (EDB Identiﬁer) を割り振っている．これはテーブルおよびタプルの区別無く割り振られている．
すなわち，データベース内で EID は情報識別子としてユニークな状態を保っている．ただし，情報認証用のデータベースはこの範疇外である．

EOID (EDB Object Identiﬁer) は情報の表現として登録されるオブジェクトの識別子である．オブジェクトは一つの情報に複数登録されることがある．その場合 EOID はデータベース内の登録順を表す値となり，大きい値の方はより未来を表す．すなわち，EID に対して複数の EOID で表現されるオブジェクトが存在する場合には，EOID が最大のオブジェクトがデータベース内での EID に対応する情報の最新の表現であり，それ以外はその情報の変更履歴と解釈される．

EOID はデータベース内のオブジェクトに関してユニーク性を保っており，オブジェクトの登録とともに値を増やす．言い換えると，デー
タベース内に登録されているオブジェクトを EOID でソートすると，完全にこれまでのデータベース上の変更過程を再現することが可能である．

第 2 章 EDB における情報管理

2.3

12

2 つの時間軸

EDB を扱う過程で我々は 2 種の時間軸に遭遇する．一つは現実世界での時間の経過であり，もう一つは EDB での時間の経過である．これは一般的なデータベースにも共通する事柄であるが，EDB では情報の登録や更新年月日を陽にユーザに提示しているため，しばしばこれら 2 つの時間軸は混同されやすい．
もし貴方が EDB の登録情報を用いて何らかのデータ処理を行おうとするならば，情報の時間軸の上で分類する目的で，オブジェクトの登録年月日 (mtime) を用いるべきではない．

2.4

情報の表現

EDB では原典情報を XML の規格に沿って記述している．記述の内容は，情報が載るテーブルの定義による．テーブルの定義もまた XML
によって表現されている．

2.5

XMLDB と RDB

EDB では原典情報である XML 表現の登録内容をテーブル XMLDB に蓄積する．これとは別に，XML 表現の登録内容を関係データベー
ス (Relational Database; RDB) に展開したテーブルを保持している．
RDB に保持されている内容はあくまで XMLDB の複写・加工物であり，各々の情報の正確な登録内容を得るためには，XMLDB から情報を取り出すべきである．

2.6

テーブル，カラムの XML 名と SQL 名，名称

EDB におけるテーブルの定義では，テーブルやカラムに XML 表現における名前とは別に，SQL における名前，および人間にわかりやす
い名称を定義している．これは主にデータベースのコアに利用する DBMS の制約に依っている．
SQL における名前は，DBMS にアクセスする必要が生じたときのみに利用し，それ以外の部分では利用するべきではない．DBMS の制約の変更等により，SQL における名前は簡単に変更されてしまうからである．また，人間用に用意された名前はデータベース利用者が見るためのものであり，利用者の意見や要求によって簡単に変更されてしまうだろう．
これに対して，XML 名は EDB の上でテーブルを定義する場合に追加されることはあっても，従来利用していた名前が変更されることは(よほどの理由がない限り) ない．
EDB プログラマは，カラムの指定をハードコードする必要性やカラム指定を何らかの要求により行う場合には，必ず XML における名称を利用するべきである．XML から SQL 名への変換は面倒であるが，XML 名で指定することが作成したプログラムの長寿を保証する．

13

第3章

3.1

EDB におけるデータ表現

名前空間

他の XML との混在の利用可能性を損なわないように，名前空間「edb」を用いる．

3.2

情報の記述

EDB における情報の記述は，<?xml version="1.0" encoding="utf-8"?><!DOCTYPE edb:table-name SYSTEM "http://web.db.tokushima-u.ac.jp/dtds/table-name.dtd"><edb:table-name xmlns:edb="http://web.db.tokushima-u.ac.jp/dtds/"><edb:base base-attribute1 base-attribute2 base-attribute3 .../><edb:table-name.element-name1 element-attribute1 >element-name1 の登録内容 (テキスト)</edb:table-name.element-name1 ><edb:table-name.element-name2 element-attribute2 >element-name2 の登録内容 (テキスト)</edb:table-name.element-name2 ><edb:table-name.element-name3 element-attribute3 >element-name3 の登録内容 (テキスト)<edb:table-name.element-name3 .element-name3,1 element-attribute3,1 >element-name3,1 の登録内容 (テキスト)</edb:table-name.element-name3 element-name3,1 ></edb:table-name.element-name3 >...
</edb:table-name>第 3 章 EDB におけるデータ表現

14のようになる．

3.3

ベース要素

BASE 要素は，各登録情報に必ず一つ (のみ) 記述される，属性のみの情報である．
<edb:baseeid="eid" …情報識別子: EID
eoid="eoid" …オブジェクト識別子: EOID
mapto="mapto-eid" …マップ先の情報の EID
mtime="modified-time" …登録時刻 (UNIX time)
operator="operator-eid" …登録者の EID
avail="availabled" …有効 (true)/無効 (false)
date.from="aval-from-date" …有効期間 (はじまり)date.to="aval-to-date" …有効期間 (おわり)censor="censor-level" …検閲レベル
owner="owner-eid" …所有者の EID
read="read-permission" …読み権限レベル
write="write-permission" …書き権限レベル
delete="delete-permission" …削除権限レベル/>
date.from, date.to は テーブルの属性として chronological が指定されたときのみ有効となる．

3.4

基本要素

本データベースでは，蓄積情報を全て XML により表現している．基本要素は，<edb:element-name mapto="eid" date.from="avail-from-date" date.to="avail-to-date" read="read-permission" assert="assert" ><edb:english>english-value</edb:english><edb:japanese>japanese-value</edb:japanese><edb:pronounce>pronounce-value</edb:pronounce></edb:element-name>第 3 章 EDB におけるデータ表現

15である．ただし，「element-name」は XML の要素名，「eid」は参照識別子であり，「avail-from-date」，「avail-to-date」は有効期間，「read-

permission」は公開範囲を示す権限レベルである．「english-value」，「japanese-value」，「pronounce-value」はそれぞれ英語，日本語，日本
語の読みに対応する．
• mapto と edb:english, edb:japanese, edb:pronounce– 上記の表現において「eid」に有効な値が指定されたとき，「english-value」，「japanese-value」，「pronounce-value」は無視される．
– 型 NAME では，「english-value」，「japanese-value」，「pronounce-value」の全てを利用する．
– 型 SENTENCE, PARAGRAPH では，「english-value」，「japanese-value」，を利用する．
– 他の型においては，「english-value」，のみを利用する．
– 「english-value」，「japanese-value」，「pronounce-value」は改行文字を含まないテキストであり，
「<」
「>」
「”」
「&」
「’」はそれぞれ「&lt;」「&gt;」「&quot;」「&amp;」「&apos;」のようにエンコードされていなければならない．
• date.from と date.to– date.from, date.to はテーブルの定義におけるカラムの属性として chronological が指定されたときのみ有効となる．
– 「avail-from-date」「avail-to-date」で，要素の記述内容の有効期間を指定する．この有効期間とは，データベースでの読み書きの有効期間を示すものではなく，登録要素記述が現実世界で有効である期間を示す．
– 「avail-from-date」「avail-to-date」はともに省略可能で，両方とも省略された場合には，上位要素の値が代用される．上位要素を辿った結果，値が定まらない場合，それぞれの既定値は，∗ 「avail-from-date」: 西暦 0 年 0 月 0 日∗ 「avail-to-date」: 西暦 9999 年 99 月 99 日とする．

• read「read-permission」に指定できるものは，– inherit– public– university– user– personnel

第 3 章 EDB におけるデータ表現

16– teacher– limited– owner– staﬀ「read-permission」が省略された時の既定である．
「read-permission」として”inherit”が指定された時には省略されことがある．また，
値は”inherit”である．
「read-permission」が”inherit”の場合，上位要素，情報全体，カラム，テーブルの順番で属性を継承する．

• assert「assert」に指定できるものは，– nothingである．「assert」として”nothing”が指定された時には，登録対象なしを明示したとみなす．

3.5

要素の排列

XML では要素を任意に排列することが可能であるが，本データベースにおいては同名要素は全て連続して排列される．すなわち，<edb:name1 >...</edb:name1 ><edb:name1 >...</edb:name1 ><edb:name1 >...</edb:name1 ><edb:name1 >...</edb:name1 ><edb:name2 >...</edb:name2 ><edb:name2 >...</edb:name2 ><edb:name2 >...</edb:name2 ><edb:name3 >...</edb:name3 ><edb:name3 >...</edb:name3 >のように並べられる．ただし，同名要素の順序は保存される．
これは異名要素間の排列情報を用いないということであり，データベース登録インタフェースはデータ登録時に要素名のソーティングを行なう．したがって，利用者がこの排列を意識してデータを作成する必要はない．
例外として，属性 chronological が指定されている要素は，年代順に並べ替えることがある (属性の要素数が 1 に指定されている場合など)．

第 3 章 EDB におけるデータ表現

17

要素名の階層化

3.6

本データベースにおいて登録要素の階層化が生じる時には，要素名を下記のように階層化する．

<edb:name1 ><edb:name1 .name2 ><edb:name1 .name2 .name3 ></edb:name1 .name2 .name3 ></edb:name1 .name2 ></edb:name1 >階層化された要素名の区切り文字は「.」である．(各階層名には「.」は含まれない)

3.7

期間限定属性 (chronological)

3.7.1

まえがき

属性 chronological は，時間系列上で現実世界において• 有効とするのが望ましい ⇒ 無効とするのが望ましい• 無効とするのが望ましい ⇒ 有効とするのが望ましいとなる情報について，有効とするのが望ましい期間をデータベースシステムで統一的な手法により扱うために導入する．
これはデータベース上での情報の自動的な無効化を実現するものではない．すなわち，この期間限定属性を情報に付加したとしても，情報自体は常に有効な状態でデータベース中に存在する．期間限定属性はデータベースに対して発行するクエリにその条件が含まれている場
合のみ利用される．

3.7.2

期間限定したい情報の例• 組織の改組大学などの組織においては，不定期に学科や学部の改組が行われている．
組織の改組にともない，改組前の【組織】情報を破棄し，改組後の【組織】情報をデータベースに登録すれば何ら問題はないように思われるかも知れないが，本データベースでは，他の情報から【組織】情報を参照 (ex. 【著作】.[組織] で著作が属する組織を登録する)するため，古い【組織】情報を削除することが出来ない．

第 3 章 EDB におけるデータ表現

18

削除されない【組織】情報は已然としてデータベースの中で有効な状態で存在するため，例えば大学の組織の構成チャートを作成する
ときなどに問題が発生する．
この問題を回避するために，情報自体に有効期間を定義し，情報として抽出する場合に有効であるか否かを判断できる様にしておく必要がある．

• 委員の交替
本データベースでは，委員会委員などの定期的に個人が交替する情報を【擬人】情報として表現し，蓄積している．
現在，この情報には同時に一人の【個人】情報しか登録できないため，新しい個人を委員として登録すると，旧委員の内容は失われてしまう．もちろん，旧委員が誰であったかという記録は，情報の変更履歴に含まれていることになるが，変更履歴は単に編集の履歴を示すものであり，後登録の修正作業をも含まれるので，信頼性がない．また，いつからいつまでという期間の情報も含まれていない．
これに対処するためには，委員の登録内容に付加情報として期間を列記出来るようにすることが必要である．

3.7.3

基本方針

• 出来るだけ体系だてて
期間限定が上記に掲げたもののみに該当する事柄であれば，【組織】【擬人】の情報もしくはそれらの中の項目のみを特別扱いし，例外的な処理をシステムに組み込めばよい．
しかし，この種の期間限定の属性は，データベース中のほとんどの項目に必要性が生じる可能性がある．それらについてその都度特別なコードを記述し，例外処理を行うことは繁雑な作業をうみ，強いてはシステムの安定運用性，実現性に大きく関わってくる事柄となる．
結局のところ，可能な限り共通のコードを利用して上記の要件を解決する方法を考えておきたい． (つまり，楽をしたいということである)• 期間限定を行う箇所を指定する
全ての情報および全ての項目において，期間限定を可能とするのではなく，テーブルの定義もしくはテーブル中のカラムの定義において，期間限定が可能なテーブル，カラムを指定する．指定は，テーブルやカラムの属性 (<edb:attribute>...</edb:attribute>) に期
間限定 (chronological) を指定することによる．すなわち，– <edb:attribute>chronological</edb:attribute>と記述する．

第 3 章 EDB におけるデータ表現

19• 期間限定に対する EDB 最下層 (libedb) の処理
期間限定を行った情報について EDB の最下層 (libedb) では，– 期間限定された情報抽出要求が発行された場合のみ，それに合致する情報を抽出する．
– 権限が委譲される参照登録のカラムについては，現時刻に一致する要素のみが権限委譲の対象となる．
– 見出しに利用されるカラムについては，現時刻に一致する要素のみが見出しに利用される．
である．
すなわち，libedb では期間限定が行われている情報の解釈について特定の指針は与えず，期間限定を行った情報やカラムをどのように扱うかは上位層に委ねる．
要素数 N として定義されているカラムに期間限定属性 (chronological) が指定された場合，– 要素数を任意数として扱う．
– 各要素に登録されている期間が N 以上重複する場合にはエラーとする．
– 各要素を年代順に排列する．
を行う．

3.7.4

期間限定属性の XML での表現

• 期間限定の表現
期間限定の情報を XML で表現するために，これらを XML の要素 (ELEMENT) ではなく，属性 (ATTRIBUTE) として記述する．属
性名および指定方法は– date.from=”avail − f rom − date”– date.to=”avail − to − date”
である．
『avail − f rom − date』，『avail − to − date』は年月日 (YYYYMMDD) で指定し，0〜99999999 の整数値とする．実際に存在しない年月日を指定しても構わない．『avail − f rom − date』の既定値は 0，『avail − to − date』の既定値は 99999999 であり，それぞれの要素が省略された場合に用いられる．
ある一つの情報の全体を期間限定する場合には，その情報の base 要素に– <edb:base ... date.from="avail − f rom − date" date.to="avail − to − date" ... />第 3 章 EDB におけるデータ表現20と記述する．ただし，テーブル定義の属性に chronological が指定されていない場合には無視される．
ある一つの要素を期間限定する場合には，その要素の属性に– <edb:element ... date.from="avail − f rom − date" date.to="avail − to − date" ... >と記述する．ただし，カラム定義の属性に chronological が指定されていない場合には無視される．

• 期間判定ある日時 ( date ) が指定されたとき，期間に合致するかどうかは

avail − f rom − date ≤ date AND date ≤ avail − to − dateで判断される．等号が含まれていることに注意．
また，期間 ( f rom 〜 to ) が指定されたとき，期間の重複しないかどうかは，

avail − to − date < f rom OR to < avail − f rom − date1で判断される．等号が含まれていないことに注意．

• 期間限定属性の継承
階層化されたカラムにおいて期間限定の情報は継承される．継承は，– 情報 ⇒ 上位の要素 ⇒ 下位の要素の方向で行われ，下位の要素に期間限定属性の指定がない場合にも有効である．
これは，期間限定できない要素においても，暗黙のうちに期間限定される可能性を示している．実際の XML の記述内容に関する処理においては，全ての要素に期間限定の可能性があると想定しておく必要がある．

3.7.5

関係データベース (RDB) への反映

• 期間限定の表現
期間限定の情報は，全て SQL レベルにおいて用意されているテーブルのベースカラム (SQL: edb− base) に反映される．反映されるカ
ラムは，– date− from: date.from 属性の値．

第 3 章 EDB におけるデータ表現

21– date− to: date.to 属性の値．
である．既定値はなく，NULL になることもない．XML 上で date.from，date.to が指定されていない場合には，date− from, date− toはそれぞれ 0, 99999999 の値が記録される．

• 情報および要素の期間限定情報の記録場所
情報自体が期間限定されている場合には，最上位のテーブル– SqlT ableN ame.date− from
– SqlT ableN ame.date− toにその情報が記録される．libedb では SqlT ableN ame は (EdbTableInfo)→sqlname で参照できる．要素毎の期間限定情報は– SqlT ableN ame− SqlColumnN ame.date− from
– SqlT ableN ame− SqlColumnN ame.date− toに記録される．libedb では SqlT ableN ame− SqlColumnN ame は (EdbColumnInfo)→reldb− sqlname で参照できる．要素が階層化されている場合には，最下層の期間限定属性は– SqlT ableN ame− SqlColumnN ame1− SqlColumnN ame2 .date− from
– SqlT ableN ame− SqlColumnN ame1− SqlColumnN ame2 .date− toに記録される．libedb では SqlT ableN ame− SqlColumnN ame1− SqlColumnN ame2 は (EdbColumnInfo)→reldb− sqlname で参照できる．
これらは全て，期間限定属性を継承済みの期間である．

3.7.6

どのテーブル，カラムについて期間限定を指定するか?

期間限定を指定する際にどの情報やどのカラムに指定するのがよいのか，また，悪いのか?

• 短見出し (caption=1) に利用されるカラムには指定しない方がよい．
EDB では参照登録すると，自動的に参照先の情報の短い見出しを作成し，冗長な情報としてカラムのテキストに代入する．この代入
は，RDB 上で行われるとともに，補間 XML(cXML) にも反映される．期間限定が行われた場合，どの要素を見出しとするかは予想がしがたい．
組織の改組が名称の変更のみであったとしても，【組織】.[名称] を期間限定に指定するのではなく，その場合にはマップを用いた従来の情報の同一性を利用し，別の【組織】情報として登録しておくのがよい．この場合，

第 3 章 EDB におけるデータ表現– 改組前の【組織】情報の期間指定: date.from=”xxxx” date.to=”改組日の前日”– 改組後の【組織】情報の期間指定: date.from=”改組日”とする．

• 年限が確定している様な情報，または，年次毎に内容が変更されるような情報• 【擬人】情報の期間限定属性定義例 (情報: 徳島大学工学部長)– テーブルの定義– 登録情報の XML 表現– 登録情報の表示

3.8

DTD

各情報の登録様式に対応する DTD は http://web.db.tokushima-u.ac.jp/dtds/にある．

3.9

テーブルの XML の意味

本データベースでは，登録情報の様式も XML で表現している．情報の表現のための DTD は

http://web.db.tokushima-u.ac.jp/dtds/table.dtd
であり，各情報の登録様式を定義している XML は

http://web.db.tokushima-u.ac.jp/dtds/にある．

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE edb:table SYSTEM "http://web.db.tokushima-u.ac.jp/dtds/table.dtd"><edb:table xmlns:edb="http://web.db.tokushima-u.ac.jp/dtds/">
テーブルの定義．

<edb:base base-attributes-of-table/> …ベース情報．(出現回数＝ 1)<edb:xmlname>xmlname-of-table</edb:xmlname> …テーブルの XML 名．(出現回数＝ 1)

22

第 3 章 EDB におけるデータ表現

23<edb:sqlname>SQL-name-of-table</edb:sqlname> …テーブルの SQL 名．RDBMS(PostgreSQL) 中でのテーブル名．(出現回数＝ 1)<edb:name> …テーブルの名称（人間用）．(出現回数＝ 1)<edb:english>english-name-of-table</edb:english><edb:japanese>japanese-name-of-table</edb:japanese><edb:pronounce>pronounce-of-japanese-name-of-table</edb:pronounce></edb:name><edb:description> …テーブルの簡単な注釈（人間用）．(出現回数＝ 1)<edb:english>english-description-of-table</edb:english><edb:japanese>japanese-description-of-table</edb:japanese></edb:description><edb:explain> …テーブルの少し詳しい注釈（人間用）．(出現回数≦ 1)<edb:english>english-explain-of-table</edb:english><edb:japanese>japanese-explain-of-table</edb:japanese></edb:explain><edb:permtuple> …テーブルに登録されたタプル（情報）のデフォルトのアクセス権限．(出現回数＝ 1)<edb:permread>読出権限<edb:/permread><edb:permcreate>作成権限</edb:permcreate><edb:permwrite>変更権限</edb:permwrite><edb:permdelete>消去権限</edb:permdelete></edb:permtuple><edb:permcolumn> …テーブルに登録されたカラム（項目）のデフォルトのアクセス権限．(出現回数＝ 1)<edb:permread>読出権限<edb:/permread><edb:permcreate>作成権限</edb:permcreate><edb:permwrite>変更権限</edb:permwrite><edb:permdelete>消去権限</edb:permdelete></edb:permcolumn><edb:attribute>attribute-of-table</edb:attribute> …テーブルの属性 (出現回数≧ 0)．
現在，

auxiliary … 補助テーブル
hierarchical … 階層化される情報（【組織】情報）
censorship … 検閲が必要な情報
chronological … 有効期間を指定できる情報

第 3 章 EDB におけるデータ表現

24

がある．

<edb:module>path-name-of-module</edb:module> …テーブルのモジュール (出現回数＝ 1)．
テーブル依存の関数をインプリメントしたモジュールのパス名を記述する．

<edb:maplookup>{xmlname-of-mapto-table}</edb:maplookup>
情報全体の参照機能を利用する場合に参照できる先のテーブル指定．(出現回数≧ 0)<edb:column>
カラム（項目）の登録情報．(出現回数≧ 1)<edb:xmlname>xmlname-of-column</edb:xmlname> …カラムの XML 名．(出現回数＝ 1)<edb:sqlname>SQL-name-of-column</edb:xmlname> …カラムの SQL 名．RDBMS(PostgreSQL) 中でのカラム名．(出現回数＝ 1)<edb:name> …カラムの名前（人間用）(出現回数＝ 1)<edb:english>english-name-of-column</edb:english><edb:japanese>japanese-name-of-column</edb:japanese><edb:pronounce>pronounce-of-japanese-name-of-column</edb:pronounce></edb:name><edb:description> …カラムの簡単な注釈（人間用）(出現回数＝ 1)<edb:english>english-description-of-column</edb:english><edb:japanese>japanese-description-of-column</edb:japanese></edb:description><edb:explain> …カラムの少し詳しい注釈（人間用）(出現回数≦ 1)<edb:english>english-explain-of-column</edb:english><edb:japanese>japanese-explain-of-column</edb:japanese></edb:explain><edb:type>type-of-column</edb:type> …カラムの型．(出現回数＝ 1)<edb:minimum>minimum-value</edb:minimum> 値の最小値．(出現回数＝ 1)<edb:maximum>maximum-value</edb:maximum> 値の最大値．(出現回数＝ 1)<edb:default>default-value</edb:default> 値の既定値．(出現回数＝ 1)<edb:cryptography>type-of-cryptography</edb:cryptography> 値の暗号化手法．(出現回数＝ 1)．type=PASSPHRASE のときのみ．
<edb:elements>number-of-elements</edb:elements> …要素数．「*」は任意数を表す．(出現回数＝ 1)<edb:elasticity>elasticity-of-elements</edb:elasticity> …入力欄の数 (初期値+増分)．(出現回数≦ 1)<edb:permtuple> …情報のカラム単位のデフォルトのアクセス権．(出現回数＝ 1)<edb:permread>読出権限<edb:/permread><edb:permcreate>作成権限</edb:permcreate>第 3 章 EDB におけるデータ表現

25<edb:permwrite>変更権限</edb:permwrite><edb:permdelete>消去権限</edb:permdelete></edb:permtuple><edb:attribute>attribute-of-column</edb:attribute> …カラムの属性．(出現回数≧ 0)
現在，

authorize … 権限を指定された情報に委譲する
exclusive … 排他的登録項目
hierarchyparent … 階層化されるた時の上位情報 (テーブルの属性として，hierarchical 指定が必要)
personname … 人名が記述される項目
student … 学生が登録される可能性のある項目
pagenumber … 頁が記述される項目
patentnumber … 特許番号が記述される項目
nothing … 「該当なし」が指定できる項目
CLASSIFY … 大分類の対象となる．
classify … 小分類の対象となる．
alias … そのカラムに複数登録されているテキストはある事柄の別称であることを示す．
chronological … 有効期間を指定できるカラム
conductor … 情報のカラムの扱いを指定する情報の記述．このカラムに登録された EID を持つ情報がカラムの取捨選択を指定する．
multilingualcaption … 見出しに多言語の表示が望まれる．
required … 必須項目．
preferred … 推奨項目．
optional … 任意項目．
unused … 不用項目．
obsoleted … 廃止された項目．
がある．

<edb:conductor>mode</edb:conductor>…カラムの取捨選択のモード．"required", "preferred", "optional", "unused"が有効．

<edb:maplookup>{xmlname-of-mapto-table}</edb:maplookup>…参照機能を利用する場合に参照できる先のテーブル指定．(出現回数≧ 0)…{xmlname-of-mapto-table} の後に「CANDIDATE={ 条件式 }」のように候補の選択肢を提示するときの補助的な情報を定義することができる．
…{xmlname-of-mapto-table} の後に「CAPTION={column1 column2 }」のように見出しカラムを指定することが可能．各カラムは空白で区切る．

<edb:caption>caption-level</edb:caption>

第 3 章 EDB におけるデータ表現…見出し指定．（0... なし，1... 短見出しに利用，2... 長見出しに利用）(出現回数≦ 1)<edb:prefix> …前置詞．(出現回数≦ 1)<edb:english>english-prefix-of-column</edb:english><edb:japanese>japanese-prefix-of-column</edb:japanese></edb:prefix><edb:postfix> …後置詞．(出現回数≦ 1)<edb:english>english-postfix-of-column</edb:english><edb:japanese>japanese-postfix-of-column</edb:japanese></edb:postfix><edb:order>order-level</edb:order> …排列指定．（0... 利用しない，他... 優先順位）．(出現回数＝ 1)<edb:size>size-of-text</edb:size> …入力欄の大きさ（登録情報の文字の概数）．(出現回数＝ 1)<edb:column> …階層化された子カラムの定義．(出現回数≧ 0)(カラムの定義の繰り返し)</edb:column></edb:column></edb:table>
権限には，• inherit … 継承．
• public … 公開．
• university … 学内．
• user … EDB にログインできる利用者．
• personnel … 職員．
• teacher … 教官．
• limited … 情報の権限継承による制限．
• owner … 情報の所有者．
• staﬀ … 管理者．

26

第 3 章 EDB におけるデータ表現27が指定可能．

XML 名の省略記法
EDB の各所においては，長い XML 名を省略する目的で ‘@’ を利用することができる．‘@’ は現在最も近い場所にある XML 名またはその要素が持つ値を意味する．例えば，a という XML 名を利用したその内部では @ = a となる．このとき，@.b は a.b となる．別の例では，a.b の内部では @ = a.b となる．このとき @.c は a.b.c となる．
‘@−’ は @ の親要素を表す．(‘-’ の個数だけ階層を遡る)‘@1’ は @ の最上位の要素 (テーブルの XML 名) を表す．

@

a.b.c.d

最寄りの XML 名が a.b.c.d のときの@記法の意味
現在の要素の XML 名またはその値

@-

a.b.c

現在の要素の親要素の XML 名またはその値

@--

a.b

現在の要素の親要素の親要素の XML 名またはその値

@---

a

現在の要素の親要素... 親要素の XML 名またはその値

@----

a

現在の要素の親要素... 親要素の XML 名またはその値@1a

現在の要素の属する最上位の要素の XML 名 (テーブルの XML 名) またはその値 (EID)

@2

a.b

現在の要素の階層の上にある要素 の XML 名またはその値

@3

a.b.c

現在の要素の階層の上にある要素 の XML 名またはその値@4

a.b.c.d

現在の要素の階層の上にある要素 の XML 名またはその値@5a.b.c.d

現在の要素の階層の上にある要素 の XML 名またはその値@による記法で，取り出されるのが XML 名か値かはそれが記述される場所による．例えば，条件式の左辺にて記述されれば XML 名に置
き換わり，右辺で利用されれば値に置き換わる．

‘@’ の代わりに ‘@@’ を用いると外側にある XML 記述での現在最も近い XML 名を表す．外側に XML 記述がない場合にはエラーとなる．
値を取り出すときに@記法と XML 名を記述する場合とでは差異が生じることに注意して欲しい．@記法は現在の値を起点としてその上位を遡る記法であり，@記法で取り出される値は必ず 1 つである．一方，@1.b のようにカラムの XML 名を記述した場合には，@1.b に属する全ての値が取り出されることになる．これはそのカラムの要素数が複数の場合に違いが発生する．
ただし，以上はテーブルの定義内では現時点で利用できない．
特別なカラム名• REF, @.REF : 他の情報への参照リスト．
• PERM, @.PERM : 権限を委譲している他の情報への参照リスト．
• OWN, @.OWN : 所有者の EID．
• MAP, @.MAP : 他の情報へのマップ．

28

第4章

4.1

EDB における日付の扱い

日付の範囲

EDB における日付の指定は，
西暦 0000 年 00 月 00 日 ∼ 西暦 9999 年 99 月 99 日の範囲とする．西暦年は必ず 4 桁で記述する．このうち，• 西暦 0000 年 00 月 00 日…無限の過去を示す．
• 西暦 9999 年 99 月 99 日…無限の未来を示す．
は特別扱いとする．また，この範囲外の日付が指定された場合には，上記の範囲の最も近い日付に置き換えられる．
上述の規定は，日付属性の値 (DATE) に対して，ある日付 (date) 以前，以降という条件で検索を行う場合に• 0 ≤ DATE AND DATE ≤ date
• date ≤ DATE AND DATE ≤ 99999999のような検索式が記述される可能性を示している．
一方，期間を記述する場合に，終了日が未定の場合には，• 西暦 YYYY 年 MM 月 DD 日 ∼ 西暦 9999 年 99 月 99 日と指定するべきであることを示唆している．

4.2

存在しない日付の扱い

何らかの目的により，[date1 , date2 ] で指定された期間を正確な期日に変換する場合には，[date1 , date2 ] の期間内における最小の実存の日付と最大の実存の日付に変換されるべきものとして扱う．

第 4 章 EDB における日付の扱い

29

date

mean

date1

date2

YYYY 年 0 月 0 日

YYYY 年の最初を表す．

YYYY 年 1 月 1 日

YYYY-1 年 12 月 31 日

YYYY 年 99 月 99 日

YYYY 年の最後を表す．

YYYY+1 年 1 月 1 日

YYYY 年 12 月 31 日

YYYY 年 MM 月 0 日

YYYY 年 MM 月の最初を表す．

YYYY 年 MM 月 1 日

YYYY 年 MM-1 月 28,29,30 or 31 日

YYYY 年 MM 月 99 日

YYYY 年 MM 月の最後を表す．

YYYY 年 MM+1 月 1 日

YYYY 年 MM 月 28,29,30 or 31 日

混乱を避けるために，99 月 99 日，99 日は date1 に指定すべきではない．同様に，0 月 0 日，0 日は date2 に指定すべきではない．

30

第5章

ソフトウェア構成

下図に EDB のソフトウェア構成を示す．赤字のものが EDB サーバにおいて利用されているソフトウェア (ライブラリ/アプリケーション) であり，青字はクライアント PC において利用されるソフトウェアである．

WWW Server
Apache(2.x)

EdbClientcgiutil

EDB/SSLEDB/Gate

LibEDBPub

LibEDB

LibEDB-mod

PostgreSQL Library (libpg)

PostgreSQL Backend
backend-pg74
DB Storage

backend-pg74... PostgreSQL バックエンドプログラムに追加した EDB のモジュール．PostgreSQL にデータプリミティブタイプとして多言語プリミティブを追加．

第 5 章 ソフトウェア構成

LibEDB... PostgreSQL ライブラリアクセスライブラリ．
公開用ライブラリとして LibEDBR がある．

LibEDB-mod... テーブル依存のデータ処理モジュール．
LibEDBPub... EDB の登録情報出力用ライブラリ．文書スタイル (HTML, LATEX, ...) にあわせた出力を生成する．
公開用ライブラリとして LibEDBPubR がある．

cgiutil... WWW 経由の CGI プログラム群．
EDB/Gate... WWW に依らないアクセスを可能にするデータベースアクセスフロントエンド．
EDB/SSL... EDB/Gate とクライアントソフトウェア (e.g. EdbClient) 間の通信を SSL でトンネル化するためのモジュール．
EdbClient... EDB/Gate と通信を行なう PC 上のアプリケーション．

31

第 II 部

ライブラリ

33

第6章

6.1

LibEDB

情報識別子

EDB では登録情報に EID (EDB Identiﬁer) と呼ばれる情報識別子を割り振る．また，登録されるタプル (オブジェクト) 毎に EOID (EDB
Object Identiﬁer) を割り当てる．
これらの実体は非負の整数値であり，有効な EID, EOID は 10001 以上の値である．また，0 は対応するオブジェクト無しを意味し，1∼10000
は予約された値である．

EDB ライブラリでは，次の型により EID, EOID を取り扱う．
Type — 情報識別子，オブジェクト識別子

eid− teoid− tSynopsis :typedef int32− teid− t ;typedef int32− teoid− t ;Description :EID は EDB における情報の識別子であり，EOID はオブジェクト識別子である．

6.2

リンク (link)

LibEDB および LibEDB を利用するライブラリでは，下記の双方向リスト構造 (EDB ではこれをリンクと呼んでいる) を多用している．
Structure — リンク構造体のポインタ
Synopsis :

Link

l ;

Description :リンク構造体は一次元の双方向参照リスト構造を構成する．
リンク構造体の定義は下記のとおり．

Link

第 6 章 LibEDB

34

struct LINK {struct LINK *p;/* previous */struct LINK *n;/* next */void *d;/* object */void (*f)();/* free */};typedef struct LINK *Link;
リンクの終了は NULL で示す．

Function — リンクオブジェクトの生成/開放
Synopsis :Linklink− atom− new( void *obj, void (*free)() )voidlink− atom− free

( Link l )voidlink− atom− free2( void *context, Link l )link− atom− newlink− atom− freelink− atom− free2

Description :link− atom− new はリンク構造体 Link(3) を作成しそのポインタを返す．引数 obj はオブジェクトのポインタ，free はそのオブジェクトを開放するための関数へのポインタである．オブジェクトを開放する必要がない場合には NULL を指定する．
link− atom− free および link− atom− free2 はともにリンクオブジェクトを開放するための関数である．あらかじめリンク構造体に登録されているオブジェクトの開放関数を呼び出す．link− atom− free と link− atom− free2 の違いは，link− atom− free はオブジェクトの開放時にシステムコール free(2)と同じく free(obj) の形式で関数を呼び出すのに対して，link− atom− free2 では free(context, obj) の形式で開放のための関数を呼び出す．
link− atom− free および link− atom− free2 はリンクを操作しているモジュール内で呼び出される関数であり，一般にユーザがこれを利用することは稀である．
Function — リンクの開放
Synopsis :voidlink− free

( Link l )voidlink− free2( void *context, Link l )Description :link− free および link− free2 はともにリンクを開放する関数である．
link− free と link− free2 の違いは，link− free はオブジェクトの開放時に link− atom− free(4) を呼び出し，link− free2 は link− atom− free2(4) を呼び出す．
link− free2 を利用する必要がある場合，すべてのリンクオブジェクトに関して link− atom− free2(4) で渡すコンテキスト context は共通にしておかな
いといけない．

link− freelink− free2

第 6 章 LibEDB

35

Return Values :なし．

Function — リンクの先頭/最期を得る
Synopsis :Linklink− head

( Link l )Linklink− tail( Link l )link− headlink− tailDescription :link− head はリンクの先頭を，link− tail はリンクの最期を得る．
Return Values :リンクの先頭/最期のリンク構造体のポインタ．

Function — リンクの結合

link− append

Synopsis :Linklink− append( Link link1, Link link2 )Description :リンクを結合する．
link1, link2 はともに NULL であっても良い．
ほとんどの場合，戻り値は link1 となるが，変更される可能性もあるので link− append の戻り値は必ず元のリンク変数に代入すること．
Return Values :結合後のリンクポインタ

Function — リンクオブジェクトの移動

link− atom− move− top

Synopsis :Linklink− atom− move− top( Link link, Link l )Description :指定したオブジェクトをリンクの先頭に移動させる．
Return Values :移動後のリンクポインタ

Function — リンクの長さ

link− atoms

第 6 章 LibEDB

36

Synopsis :intlink− atoms( Link link )Description :リンクオブジェクトの数，すなわちリンクの長さを数える．
引数 link が NULL の場合 (すなわち，リンクが存在しない場合) には 0 を返す．
Return Values :リンクオブジェクトの数．

Function — リンクの並べ換え

link− reverse
link− sort

Synopsis :Linklink− reverse
Linklink− sort

( Link link )( Link link, int (*cmp)(), void * (*aux)(), void *context, void (*free)() )Description :link− reverse は現在の並びを逆順に並べ換える．
link− sort はリンクオブジェクトを引数 cmp で指定した比較関数の返す値により並べ換えを行う．この関数は，内部で qsort(3) を呼び出している．
並べ換えにあたり，補助的なオブジェクトを一時的に作成する必要がある場合には，引数 aux, context を指定する．また，これらのオブジェクトを開放する関数を引数 free で指定する．いずれも，NULL 値を指定可能である．
Return Values :並べ換え後のリンクポインタ．
Function — リンクの n 番目のオブジェクト

link− get− obj
link− get− link

Synopsis :void *
link− get− obj( Link link, int n )Linklink− get− link

( Link link, int n )Description :link− get− obj はリンクから n 番目のオブジェクトのポインタを得るための関数である．
link− get− link はリンクから n 番目のオブジェクトが登録されているリンク構造体ポインタを得るための関数である．
Macro — リンクのスキャン

ForLink

第 6 章 LibEDB

37

Synopsis :ForLink( Link l, Link link )Description :引数 link をスキャンするためのマクロ．実体は，for 文．引数 l はループ変数となる．

Example — リンクのスキャン
Link(3) l, link;...
ForLink(12) (l, link) {char *data = l->d;...
}Macro — リンクオブジェクトの追加

LinkAppend
LinkAppendTop

Synopsis :Link
LinkAppend( Link link, Link l )Link
LinkAppendTop( Link l , Link link )Description :通常，link− append の戻り値は元のリンク変数に代入される．

LinkAppend は link と l を結合し，その結果を link で指定した変数に代入する．すなわち，l で指定したリンクが link の末尾に追加される．
LinkAppendTop は l と link を結合し，その結果を link で指定した変数に代入する．すなわち，l で指定したリンクが link の先頭に追加される．

リンク構造を用いて簡易のスタック構造を模擬することが出来る．以下は，そのために用意されているマクロである．
Macro — スタック操作
Synopsis :void
LinkPush( Link link, void *d )void *
LinkPop( Link link )Description :リンクをスタック (Last-in First-out; LIFO) として利用するためのマクロ．

LinkPush
LinkPop第 6 章 LibEDB

38

リンクの先頭がスタックの先頭 (次に取り出されるオブジェクト) となる．

LinkPush でスタックにプッシュし，LinkPop でスタックからオブジェクトをポップする．
LinkPush および LinkPop はオブジェクトの開放を行わない (リンク構造体の開放は行う) ので，スタックに登録するオブジェクトの管理はすべて利用者が責任をもつこと．

6.3

二分木 (binary tree)

LibEDB および LibEDB を利用するライブラリにおいて高速にオブジェクトの検索を要するような局面では，下記の二分木を利用する．
Structure — 二分木構造体

BiTreeSynopsis :BiTreebt ;Description :二分木オブジェクトの定義は以下のとおりである．

/* Binary Tree */typedef uint32− t BiTree− hint− t;
typedef void * BiTree− obj− t;
struct BITREE {struct BITREE *p, *n;/* branch */int bal;/* balance */BiTree− obj− t obj;/* object */BiTree− hint− t hint;/* hint */};typedef struct BITREE *BiTree;

二分木にはどのようなタイプのオブジェクトのポインタも登録できるが，登録するオブジェクトは何らかの方法で再現的に比較できる必要があり，かつ比較の結果同値になることは許されない．
比較のための関数はFunction — 二分木オブジェクトの比較
Synopsis :typedef int(*BiTree− cmp− t)( BiTree− obj− t obj1, BiTree− obj− t obj2 )Description :obj1<obj2 のとき負値．
obj1=obj2 のとき 0．
obj1>obj2 のとき正値．

BiTree− cmp− t

第 6 章 LibEDB

39

Return Values :比較の結果を示す負値，0，正値．

で呼び出される．

LibEDB で実装している二分木では，より高速に検索を実行するために，オブジェクト比較関数を呼び出す前にあらかじめ指定された hintを用いて比較を行う．hint の実体は整数値であり，BiTree(15) のメンバとしてオブジェクト毎に登録される．hint はオブジェクト比較関数を呼び出すオーバヘッドを省略するためのものであるので，オブジェクト比較関数を用いる場合，その戻り値と矛盾してはいけない．
なお，オブジェクト比較関数に依らず hint のみで比較が完結する場合がある．その場合には，比較関数に NULL を指定して二分木を利用することが出来る．

hint は EDB で定義されている eid− t(2) , eoid− t(2) を収容できる．
二分木についての関数群を以下に説明する．
Function — 二分木に登録されているオブジェクトの数

bitree− num

Synopsis :intbitree− num( BiTree bt )Description :二分木に登録されているオブジェクトの数を返す．オブジェクトをスキャンしないので時間はかからない．
Return Values :オブジェクト数．

Function — 二分木の深さ

bitree− depth

Synopsis :intbitree− depth( BiTree bt )Description :デバッグ用に用意されている．
Return Values :二分木の深さ．

Function — 二分木にオブジェクトを追加
Synopsis :BiTreebitree− add( BiTree bt, BiTree− obj− t obj, BiTree− hint− t hint, BiTree− cmp− t cmp, int (*err)(), void *err− ctxt )bitree− add第 6 章 LibEDB

40

Description :引数 bt で示される二分木にオブジェクト obj を追加する．hint はオブジェクトの比較のための hint である．hint による比較でオブジェクトの比較が解決しなかった場合，関数 cmp(obj, obj2) が呼び出される．
関数 cmp(obj, obj2) の呼び出しによってもオブジェクトの比較が解決しない，すなわち同値のオブジェクトが存在すると判断された場合には，オブジェクトの追加を断念し，関数 err(obj, object− in− bitree, err− ctxt) を呼び出す．
Return Values :オブジェクトが追加された二分木のポインタ

Function — 二分木からオブジェクトを削除

bitree− remove

Synopsis :BiTreebitree− remove( BiTree bt, BiTree− obj− t obj, BiTree− hint− t hint, BiTree− cmp− t cmp, BiTree− obj− t *robj )Description :引数 bt で示される二分木からオブジェクト obj を削除する．hint, cmp は，bitree− add(19) と同じ意味である．
*robj には，削除されたオブジェクトのポインタがセットされる．目的のオブジェクトが存在しない場合，*robj が NULL にセットされる．
Return Values :オブジェクトが削除された二分木のポインタ

Function — 二分木の検索

bitree− search

Synopsis :BiTree− obj− tbitree− search( BiTree bt, BiTree− obj− t obj, BiTree− hint− t hint, BiTree− cmp− t cmp )Description :Return Values :見つかったオブジェクトのポインタ．

Function — 二分木の開放
Synopsis :void
bitree− free

( BiTree bt, void (*free)() )void
bitree− free2( BiTree bt, void (*free2)(), void *ctxt )Description :二分木を開放する．
bitree− free はオブジェクトの開放に free(obj) を呼び出し，bitree− free2 はオブジェクトの開放に free2(ctxt, obj) を呼び出す．

bitree− freebitree− free2

第 6 章 LibEDB

41

Return Values :なし．

Function — 二分木からのコールバック

bitree− callback
bitree− callback− hint

Synopsis :intbitree− callback( BiTree bt, int (*cb)(), void *data )int
bitree− callback− hint

( BiTree bt, int (*cbh)(), void *data )Description :すべてのオブジェクトについて，cb(obj, data) または cbh(obj, hint, data) を呼び出す．呼び出す順番は，二分木内での排列順である．
cb(obj, data) および cbh(obj, hint, data) はコールバックを継続するか否かを示す論理値を返す．コールバックを途中で終了したい場合には偽値を返せば良い．
Return Values :コールバックがすべてのオブジェクトについて行われたことを示す論理値．

Function — 文字列オブジェクトのヒント
Synopsis :BiTree− hint− tbitree− hint− ucs4str( ucs4− t *u )BiTree− hint− tbitree− hint− ucs4strcase
BiTree− hint− tbitree− hint− strbitree− hint− ucs4str
bitree− hint− ucs4strcase
bitree− hint− strbitree− hint− strcase( ucs4− t *u )( char *s )BiTree− hint− tbitree− hint− strcase( char *s )Description :文字列を二分木に登録する際に利用できる Built-in のヒント生成関数．
Return Values :生成したヒント．

Function — 文字列オブジェクトの比較関数

bitree− compare− strbitree− compare− strcase
bitree− compare− ucs4str
bitree− compare− ucs4strcase

第 6 章 LibEDB

42

Synopsis :intbitree− compare− str( BiTree− obj− t o1, BiTree− obj− t o2 )int
bitree− compare− strcase( BiTree− obj− t o1, BiTree− obj− t o2 )int
bitree− compare− ucs4str( BiTree− obj− t o1, BiTree− obj− t o2 )int
bitree− compare− ucs4strcase( BiTree− obj− t o1, BiTree− obj− t o2 )Description :文字列を二分木に登録する際に利用できる Built-in の比較関数．

Macro — 二分木にオブジェクトを追加

BiTreeAdd

Synopsis :void
BiTreeAdd( bt, o, h, c, e, d )Description :二分木にオブジェクトを追加するためのマクロである．
引数は bitree− add(19) と同じ．

bitree− add(19) の戻り値を自動的に bt に代入しているだけ．

6.4

BASE64

Function — base64 エンコード
Synopsis :unsigned char *base64− encode ( unsigned char *s, int slen )Description :引数で与えられた文字列 s，長さ slen の文字列を base64 でエンコードする．エンコードされた文字列は戻り値で返される．エンコード文字列は，’\0’
でターミネートされている．
得られた文字列は，呼び出し側で開放 (free(3)) すること．
Return Values :base64 エンコードされた文字列．

base64− encode

第 6 章 LibEDB

43

See Also :base64− decode(28)Function — base64 デコード

base64− decode

Synopsis :unsigned char *base64− decode ( unsigned char *s, int *plen )Description :引数 s で与えられた base64 エンコード文字列をデコードする．デコードされた文字列のポインタは戻り値で，長さは*plen に返される．
得られた文字列は，呼び出し側で開放 (free(3)) すること．
Return Values :base64 デコードされた文字列．
See Also :base64− encode(27)

6.5

画像

Structure — 画像オブジェクト
Synopsis :EdbPicture

picture ;Description :構造体の定義は下記のとおり．

struct EDB− PICTURE {int xsize;/* 画像の横の画素数 */int ysize;/* 画像の縦の画素数 */char *mimetype;/* MIME タイプ */char *body;/* 画像データ */int bytes;/* 画像データのバイト数 */int dpi;/* 画像のデフォルトの解像度 */double height;/* 画像の高さ (文字の高さ=1) */double depth;/* 画像の深さ (文字の高さ=1) */};typedef struct EDB− PICTURE *EdbPicture;

EDB における画像の取り扱いは，LATEX 処理系における画像の取り扱いに類似している．すなわち，

EdbPicture

第 6 章 LibEDB

44• 画像を文字の一つとして扱う．
• 画像を浮遊するオブジェクトの一つとして扱う．
の両方をサポートする．
画像を文字の一つとして扱う場合には，画像構造体のメンバ height および depth を用いる．それぞれ，前後の文字の標準の高さを 1 としたときの，画像オブジェクトの高さ (ベースラインより上の部分) と深さ (ベースラインよりも下の部分) である．これらのサイズは，画像を実際に表示する部分で上書きされることがあり，画像オブジェクトに登録されるこれらの値は既定値である．
画像が浮遊して存在する場合には，メンバ dpi を用いる．これも表示部分において上書きされる可能性があり，既定値である．
画像オブジェクトを操作するために用意されている関数には以下がある．
Function — サポート画像

edb− picture− body− is− supported

Synopsis :intedb− picture− body− is− supported( EdbContext ec, unsigned char *body, int bytes )Description :画像データのポインタ body およびデータの長さ bytes から，サポートしている画像かどうかを判定する．
Return Values :サポートを示す論理値．

Function — 画像情報の MIME タイプ

edb− picture− mimetype

Synopsis :char *
edb− picture− mimetype( EdbContext ec, EdbTupleInfo tuple )Description :【画像】に登録されているタプル情報がもつ画像データの MIME タイプを得る．
Return Values :画像の MIME タイプ．静的文字列であり，開放してはいけない．

Function — 画像オブジェクトの作成/開放
Synopsis :EdbPictureedb− picture− new( EdbContext ec, EdbTupleInfo tuple )voidedb− picture− free

( EdbContext ec, EdbPicture picture )edb− picture− newedb− picture− free第 6 章 LibEDB

45

Description :edb− picture− new は画像タプルから，画像オブジェクトを作成する．
edb− picture− new で作成した画像オブジェクトは edb− picture− free で開放する．
Return Values :edb− picture− new は画像オブジェクトのポインタを返す．edb− picture− free の戻り値はなし．
Function — 画像オブジェクトの属性変更

edb− picture− set− attribute

Synopsis :intedb− picture− set− attribute( EdbContext ec, EdbPicture picture, char *attribute )Description :画像オブジェクトの属性を変更する．引数 attribute には，文字列で• ”dpi=300”• ”height=2.0”• ”depth=1.0”のように指定する．
Return Values :成功を示す論理値．

Function — 画像オブジェクトのフォーマット変換
Synopsis :intedb− picture− write− JPEG

( EdbContext ec, EdbPicture picture, FILE *fp )intedb− picture− write− PNG( EdbContext ec, EdbPicture picture, FILE *fp )intedb− picture− write− EPS( EdbContext ec, EdbPicture picture, FILE *fp )Description :画像オブジェクトのフォーマットを変換してファイルに書き出す．引数 fp はライトオープンされたファイル構造体のポインタ．
フォーマット変換には，ports/graphics/netpbm パッケージを利用しているため，ports/graphics/netpbm パッケージがない場合にはエラーとなる．
Return Values :成功を示す論理値．

edb− picture− write− JPEG
edb− picture− write− PNG
edb− picture− write− EPS

第 6 章 LibEDB

46

コンテキスト

6.6

Structure — EDB コンテキストのポインタ

EdbContext

Synopsis :EdbContext

ec ;Description :EDB 構造体の定義は下記のように宣言されている．
struct EDB− CONTEXT { ... };typedef struct EDB− CONTEXT *EdbContext;

6.7

構造体

6.7.1

XMLDB 構造体

XMLDB のテーブル名，カラム名の定義．
#define EDB− XMLDB− TABLE#define EDB− XMLDB− COLUMN− EID#define EDB− XMLDB− COLUMN− EOID
#define EDB− XMLDB− COLUMN− TEID
#define EDB− XMLDB− COLUMN− XML
Structure — XMLDB 構造体

EdbXmldbInfo

Synopsis :EdbXmldbInfo

xi ;Description :struct EDB− XMLDB− INFO {eid− t eid;
eoid− t eoid;eid− t teid;
utf8− t *xml;};
typedef struct EDB− XMLDB− INFO *EdbXmldbInfo;
Macro — XMLDB 構造体メンバーマクロ

XmldbEID
XmldbEOID
XmldbTEID
XmldbXML

第 6 章 LibEDB

47

Synopsis :eid− tXmldbEID( EdbXmldbInfo xi )eoid− tXmldbEOID( EdbXmldbInfo xi )eid− tXmldbTEID( EdbXmldbInfo xi )utf8− t *XmldbXML( EdbXmldbInfo xi )Description :Function — EID, EOID の最大値
Synopsis :eid− tedb− xmldb− eid− max( EdbContext ec )eoid− tedb− xmldb− eoid− max( EdbContext ec )edb− xmldb− eid− max
edb− xmldb− eoid− max

Description :接続しているデータベースのテーブル EDB− XMLDB− TABLE (edb− xmldb) において，EID, EOID の最大値を得る．
この最大値を用いて新たに情報を登録する場合には，必ず edb− begin(75) でデータベースをロックしてから行うこと．
Return Values :EID, EOID の最大値．
See Also :edb− open(74) , edb− begin(75)Function — XMLDB 構造体の作成/開放
Synopsis :EdbXmldbInfoedb− xmldb− new( EdbContext ec )voidedb− xmldb− free

( EdbContext ec, EdbXmldbInfo xi )edb− xmldb− newedb− xmldb− freeDescription :Function — XMLDB 構造体の読み出しと書き込み

edb− xmldb− getedb− xmldb− put第 6 章 LibEDB

48

Synopsis :EdbXmldbInfoedb− xmldb− get( EdbContext ec, eid− t eid, eoid− t eoid )eoid− tedb− xmldb− put( EdbContext ec, EdbXmldbInfo xi )Description :Function — XMLDB 構造体の読み出し
Synopsis :Linkedb− xmldb− get− byTEID( EdbContext ec, eid− t teid, int all )Description :teid で示されるテーブルに登録されている情報を読み出す．
all が真の場合すべての履歴情報を読み出し，偽の場合には最新の情報のみを読み出す．
Return Values :EdbXmldbInfo 構造体のポインタが登録されたリンクのポインタ．

6.7.2

BASE 構造体

ベースに対応する SQL カラム名の定義．

#define EDB− BASE− EID#define EDB− BASE− EOID
#define EDB− BASE− MAPTO− EID#define EDB− BASE− PARENT− EID#define EDB− BASE− MTIME#define EDB− BASE− AVAILABLE#define EDB− BASE− DATE− FROM
#define EDB− BASE− DATE− TO#define EDB− BASE− CENSOR#define EDB− BASE− OPERATOR#define EDB− BASE− OWNER#define EDB− BASE− RDL#define EDB− BASE− WRL#define EDB− BASE− DEL

edb− xmldb− get− byTEID

第 6 章 LibEDB

49

Structure — BASE 構造体

EdbBaseInfo

Synopsis :EdbBaseInfobi ;Description :ベース構造体は以下のように定義されている．

struct EDB− BASE− INFO {eid− t eid;/* EID */eid− t eoid;/* EOID */eid− t mapto;/* mapto EID */eid− t parent;/* parent EID */time− t mtime;/* date− time */eid− t op;/* operator */int censor;/* censor */int av;/* available */int date− from;/* available date from */int date− to;/* available date to */int owner;/* owner */int rdl, wrl, del;/* read/write/delete level */};typedef struct EDB− BASE− INFO *EdbBaseInfo;

ベース構造体へのアクセスは，以下のマクロを利用してコーディングを行う．
Macro — ベース構造体へのアクセス
Synopsis :eid− tBaseEID( EdbBaseInfo bi )eoid− tBaseEOID( EdbBaseInfo bi )eid− tBaseMapto( EdbBaseInfo bi )eid− tBaseParent( EdbBaseInfo bi )time− tBaseMtime( EdbBaseInfo bi )eid− tBaseOperator( EdbBaseInfo bi )BaseEID
BaseEOID
BaseMapto
BaseParent
BaseMtime
BaseOperator
BaseAvail
BaseDateFrom
BaseDateTo
BaseCensor
BaseOwner
BaseRead
BaseWrite
BaseDelete

第 6 章 LibEDB
bool
BaseAvail50( EdbBaseInfo bi )int
BaseDateFrom( EdbBaseInfo bi )int
BaseDateTo( EdbBaseInfo bi )int
BaseCensor( EdbBaseInfo bi )eid− tBaseOwner( EdbBaseInfo bi )int
BaseRead( EdbBaseInfo bi )int
BaseWrite( EdbBaseInfo bi )int
BaseDelete( EdbBaseInfo bi )Description :6.7.3

TABLE 構造体

Structure — TABLE 構造体

EdbTableInfo

Synopsis :EdbTableInfoti ;Description :テーブル構造体の定義は下記のように宣言されている．

struct EDB− TABLE− INFO { ... };typedef struct EDB− TABLE− INFO *EdbTableInfo;
Macro — テーブル構造体マクロ
Synopsis :EdbBaseInfo
TABLE− Base

( EdbTableInfo ti )TABLE− BaseTABLE− EID
TABLE− EOID
TABLE− Mapto
TABLE− Parent
TABLE− Mtime
TABLE− Operator
TABLE− Avail
TABLE− Owner
TABLE− Read
TABLE− Write
TABLE− Delete

第 6 章 LibEDB
eid− tTABLE− EID

51( EdbTableInfo ti )eoid− tTABLE− EOID

( EdbTableInfo ti )eid− tTABLE− Mapto( EdbTableInfo ti )eid− tTABLE− Parent( EdbTableInfo ti )time− tTABLE− Mtime( EdbTableInfo ti )eid− tTABLE− Operator( EdbTableInfo ti )bool
TABLE− Avail( EdbTableInfo ti )eid− tTABLE− Owner( EdbTableInfo ti )int
TABLE− Read

( EdbTableInfo ti )int
TABLE− Write( EdbTableInfo ti )int
TABLE− Delete( EdbTableInfo ti )int
TABLE− TupleCreate( EdbTableInfo ti )int
TABLE− TupleRead( EdbTableInfo ti )int
TABLE− TupleWrite( EdbTableInfo ti )int
TABLE− TupleDelete( EdbTableInfo ti )int
TABLE− ColumnCreate( EdbTableInfo ti )

第 6 章 LibEDB

52

int
TABLE− ColumnRead( EdbTableInfo ti )int
TABLE− ColumnWrite( EdbTableInfo ti )int
TABLE− ColumnDelete( EdbTableInfo ti )Description :Macro — テーブル構造体マクロ
Synopsis :char *TABLE− XN( EdbTableInfo ti )char *TABLE− SN( EdbTableInfo ti )TABLE− XN
TABLE− SN

Description :TABLE− XN はテーブルの XML 名を得る．
TABLE− SN はテーブルの SQL 名を得る．
Structure — カラム構造体

EdbColumnInfo

Synopsis :EdbColumnInfo

ci ;Description :struct EDB− COLUMN− INFO { ... };typedef struct EDB− COLUMN− INFO *EdbColumnInfo;
Macro — カラム構造体マクロ
Synopsis :char *
ColumnXN( ci )

char *
ColumnSN( ci )

char *
ColumnSN− EID( ci )

ColumnXN
ColumnSN
ColumnSN− EID

第 6 章 LibEDB

53

Description :ColumnXN はカラムの XML 名を得る．
ColumnSN はカラムの SQL 名を得る．
ColumnSN− EID はカラムの SQL 名 (EID) を得る．
Function — カラムの SQL における要素数

edb− table− column− reldb− elements

Synopsis :intedb− table− column− reldb− elements( EdbContext ec, EdbTableInfo ti, EdbColumnInfo super− ci, EdbColumnInfo ci )Description :テーブル ti に定義されているカラム ci の SQL における要素数を得る．super− ci==NULL のとき，テーブル全体におけるカラムの要素数を示し，super− ci!=NULL のとき，super− ci に対するカラムの要素数を示す．
SQL 構文を作成する場合，とくに条件式を作成する際には，対象のカラムが単数か配列で定義されているかを調べる必要がある．でなければ，条件式が構文エラーとなる．
EDB で作成されたテーブルは，edb− table− column− reldb− elements が返す値が 1 のときのみ単数で，それ以外は配列で定義されている．
Return Values :SQL におけるカラムの要素数．0 は複数 (任意数) を示す．

Function — カラムの XML における要素数

edb− table− column− xml− elements

Synopsis :intedb− table− column− xml− elements( EdbContext ec, EdbTableInfo ti, EdbColumnInfo super− ci, EdbColumnInfo ci )Description :テーブル ti に定義されているカラム ci の XML における要素数を得る．super− ci==NULL のとき，テーブル全体におけるカラムの要素数を示し，super− ci!=NULL のとき，super− ci に対するカラムの要素数を示す．
Return Values :XML におけるカラムの要素数．0 は複数 (任意数) を示す．

Function — カラムを探す

edb− table− seek− column
edb− table− seek− column− by− xmlname
edb− table− seek− column− by− sqlname

Synopsis :EdbColumnInfo
edb− table− seek− column( EdbContext ec, EdbTableInfo ti, char *name )EdbColumnInfo
edb− table− seek− column− by− xmlname( EdbContext ec, EdbTableInfo ti, char *xn )EdbColumnInfo
edb− table− seek− column− by− sqlname( EdbContext ec, EdbTableInfo ti, char *sn )第 6 章 LibEDB

54

Description :テーブル構造体からカラム構造体のポインタを探す．
edb− table− seek− column− by− xmlname では，XML 名 xn を元にカラムを探す．
edb− table− seek− column− by− sqlname では，SQL 名 sn を元にカラムを探す．
Return Values :カラム構造体のポインタ．見つからない場合には NULL を返す．

6.7.4

Tuple 構造体

Structure — Tuple 構造体

EdbTupleInfo

Synopsis :EdbTupleInfo

tuple ;

Description :タプル構造体の定義は下記のように宣言されている．

struct EDB− TUPLE− INFO { ... };typedef struct EDB− TUPLE− INFO *EdbTupleInfo;
Macro — タプル構造体マクロ
Synopsis :EdbBaseInfo
TupleBase ( EdbTupleInfo tuple )eid− tTupleEID( EdbTupleInfo tuple )eoid− tTupleEOID( EdbTupleInfo tuple )eid− tTupleMapto( EdbTupleInfo tuple )eid− tTupleParent( EdbTupleInfo tuple )time− tTupleMtime( EdbTupleInfo tuple )eid− tTupleOperator( EdbTupleInfo tuple )TupleBase
TupleEID
TupleEOID
TupleMapto
TupleParent
TupleMtime
TupleOperator
TupleAvail
TupleDateFrom
TupleDateTo
TupleOwner
TupleRead
TupleWrite
TupleDelete

第 6 章 LibEDB
bool
TupleAvail

55( EdbTupleInfo tuple )int
TupleDateFrom( EdbTupleInfo tuple )int
TupleDateTo( EdbTupleInfo tuple )eid− tTupleOwner( EdbTupleInfo tuple )int
TupleRead( EdbTupleInfo tuple )int
TupleWrite( EdbTupleInfo tuple )int
TupleDelete( EdbTupleInfo tuple )Description :Macro — タプルの属しているテーブル

TupleTable

Synopsis :EdbTableInfo
TupleTable ( EdbTupleInfo tuple )Description :タプルが属しているテーブルの情報を得る．

6.7.5

TupleColumn 構造体

Structure — TupleColumn 構造体
Synopsis :EdbTupleColumn

tc ;Description :struct EDB− TUPLE− COLUMN {void *super;/* カラムが属しているタプル (struct EDB− TUPLE− INFO *) またはデータ (struct EDB− DATUM *) */EdbColumnInfo ci;/* カラムに対応するカラム情報 */EdbDatum datum;/* データ */EdbTupleColumn

第 6 章 LibEDB

56

int mapped;/* マップした結果作成された情報か (論理値) */};typedef struct EDB− TUPLE− COLUMN *EdbTupleColumn;
Macro — カラムのスキャン

ForTupleColumn

Synopsis :ForTupleColumn( Link l, EdbTupleInfo tuple )Description :タプルに登録されているカラムをスキャンする．
実体は，for 文．

Example — タプルに登録されているカラムをスキャンする
Link(3) l;
EdbTupleInfo(52) tuple;...
ForTupleColumn(56) (l, tuple) {EdbTupleColumn(55) tc = l->d;...
}Function — カラムを探す

edb− tuple− seek− column
edb− tuple− seek− column− by− xmlname
edb− tuple− seek− column− by− sqlname
edb− tuple− seek− TC− by− xmlname

Synopsis :EdbTupleColumn
edb− tuple− seek− column( EdbContext ec, EdbTupleInfo tuple, char *name )EdbTupleColumn
edb− tuple− seek− column− by− xmlname( EdbContext ec, EdbTupleInfo tuple, char *xn )EdbTupleColumn
edb− tuple− seek− column− by− sqlname( EdbContext ec, EdbTupleInfo tuple, char *sn )EdbTupleColumn
edb− tuple− seek− TC− by− xmlname( EdbContext ec, EdbTupleInfo tuple, EdbTupleColumn tc, EdbDatum datum, char *xn )Description :タプル構造体からタプルカラム構造体のポインタを探す．

edb− tuple− seek− column− by− xmlname では，XML 名 xn を元にカラムを探す．

第 6 章 LibEDB

57

edb− tuple− seek− column− by− sqlname では，SQL 名 sn を元にカラムを探す．
edb− tuple− seek− TC− by− xmlname では，指定したカラム tc 以下について，XMLxn のカラムを探す．
xn には省略名 (例: "@.givenname") を利用することが出来る．
カラムの要素が登録されていない場合には NULL 値を返す可能性がある．ただし，要素が登録されていなくてもカラムのポインタが返る場合がある
ので，要素が登録されているかどうかは返されたカラムにおいて検査すること．
Return Values :タプルカラム構造体のポインタ．見つからない場合には NULL を返す．
See Also :EdbTupleColumn(55)Macro — TCDatum マクロ

TCDatumFirst
TCDatumNext

Synopsis :EdbDatum
TCDatumFirst( EdbTupleColumn tc )EdbDatum
TCDatumNext( EdbTupleColumn tc, EdbDatum datum )Description :TCDatumFirst は最初のデータ，TCDatumNext は次のデータを返す．
該当のデータがない場合には，NULL 値となる．
Macro — TCDatum マクロ

TCDatumIsFirst
TCDatumIsLast

Synopsis :bool
TCDatumIsFirst( EdbTupleColumn tc, EdbDatum datum )bool
TCDatumIsLast( EdbTupleColumn tc, EdbDatum datum )Description :TCDatumIsFirst は先頭のデータであるかどうか，TCDatumIsLast は最期のデータであるかどうかの論理値を返す．
Macro — TCDatum のデータスキャンマクロ
Synopsis :ForTCDatum( EdbDatum datum, EdbTupleColumn tc )Description :引数 tc に登録されているデータをスキャンするためのマクロ．実体は，for 文．引数 datum はループ変数となり，かつ EdbDatum 構造体である．

ForTCDatum

第 6 章 LibEDB

58

Example — TCDatum のデータスキャンマクロ
EdbTupleColumn(55) tc;
EdbDatum(68) datum;...
tc = ... ;ForTCDatum(60) (datum, tc) {...
}Function — データの開放edb− tcdatum− free

Synopsis :voidedb− tcdatum− free

( EdbContext ec, EdbTupleColumn tc )Description :登録されているデータを開放する．

Function — データの個数

edb− tcdatum− num

Synopsis :intedb− tcdatum− num( EdbContext ec, EdbTupleColumn tc )Description :Return Values :データの個数．

Function — n 番目のデータを得る．
Synopsis :EdbDatumedb− tcdatum− get− datum( EdbContext ec, EdbTupleColumn tc, int nth )Description :登録されている nth 番目のデータを返す．データの複製は行われない．最初のデータは nth が 0 でポイントされる．
範囲を超えた場合には NULL を返す．
Return Values :n 番目の EdbDatum．

edb− tcdatum− get− datum

第 6 章 LibEDB

59

Function — データの逆順化

edb− tcdatum− reverse

Synopsis :voidedb− tcdatum− reverse( EdbContext ec, EdbTupleColumn tc )Description :登録データの並び順を逆順にする．

Function — データの追加

edb− tcdatum− append

Synopsis :voidedb− tcdatum− append( EdbContext ec, EdbTupleColumn tc, EdbDatum datum )Description :既に登録されているデータのリンクの最期に datum を追加する．

Function — タプルカラムデータの配列化

edb− tcdatum− to− array

Synopsis :EdbDatum *edb− tcdatum− to− array( EdbContext ec, EdbTupleColumn tc, EdbDatum array[], int *num )Description :edb− tcdatum− to− array はリンクされているデータを配列に変換する．ただし，EdbDatum(68) のリンク構造は保たれており，またデータの複製も行わない．
array が NULL のときには，関数内で配列を用意し，その中に EdbDatum を格納する．最終的に配列は呼び出し側で開放 (free(array);) すること．
array が NULL 以外のときには，あたえられた配列に対して EdbDatum を格納する．配列の大きさのチェックは行われないので，呼び出し側で必要なサイズを edb− tcdatum− num(62) 等を用いて調べ，十分な大きさのものを用意する必要がある．
num には配列に格納されたデータの個数がセットされる．
Return Values :EdbDatum 配列のポインタ．
See Also :edb− tcdatum− from− array(67)Function — 配列化からタプルカラムデータ
Synopsis :voidedb− tcdatum− from− array( EdbContext ec, EdbTupleColumn tc, EdbDatum array[], int num )edb− tcdatum− from− array第 6 章 LibEDB

60

Description :edb− tcdatum− from− array は配列に保持されている EdbDatum をリンク化し，タプルカラムに格納する．それまでに EdbDatum(68) がもつリンク構
造は破棄される．
See Also :edb− tcdatum− to− array(66)6.7.6

Datum 構造体

Structure — Datum 構造体

EdbDatum

Synopsis :EdbDatum

datum ;

Description :struct EDB− DATUM {...
Link l− child;};
typedef struct EDB− DATUM *EdbDatum;
Macro — Datum 構造体マクロ (アクセス)
Synopsis :EdbTupleColumn
DatumSuper ( EdbDatum datum )int
DatumDateFrom
int
DatumDateTo( EdbDatum datum )( EdbDatum datum )int
DatumRead( EdbDatum datum )eid− tDatumEID( EdbDatum datum )utf8− t *DatumEnglish
utf8− t *( EdbDatum datum )DatumSuper
DatumDateFrom
DatumDateTo
DatumRead
DatumEID
DatumEnglish
DatumJapaneseDatumPronounce

第 6 章 LibEDB

61

DatumJapanese( EdbDatum datum )utf8− t *DatumPronounce( EdbDatum datum )Description :DatumSuper は，データが属しているカラムのポインタ (EdbTupleColumn) を得る．
DatumDateFrom，DatumDateTo は期間限定属性の日付を得る．
DatumRead はデータの読み権限レベルを得る．
DatumEID は EID を得る．
DatumEnglish, DatumJapanese, DatumPronounce はそれぞれ英語，日本語，読みの文字列を得るために利用する．
以上のマクロは，実際には構造体のメンバーにアクセスする．datum が NULL かどうかの判定は行っていない．
Macro — Datum 構造体マクロ (チェック)
Synopsis :bool
DatumEIDisValid( EdbDatum datum )bool
DatumEIDisVALID( EdbDatum datum )bool
DatumEnglishIsValid( EdbDatum datum )bool
DatumJapaneseIsValid( EdbDatum datum )bool
DatumPronounceIsValid( EdbDatum datum )bool
DatumEnglishIsUsable( EdbDatum datum )bool
DatumJapaneseIsUsable( EdbDatum datum )bool
DatumPronounceIsUsable( EdbDatum datum )bool
DatumIsValid( EdbDatum datum )Description :DatumEIDisValid, DatumEIDisVALID は有効な EID の範囲が登録されているかどうかを検査する．両者の違いはなく，DatumEIDisValid の利用を推奨する．

DatumEIDisValid
DatumEIDisVALID
DatumEnglishIsValid
DatumJapaneseIsValid
DatumPronounceIsValid
DatumEnglishIsUsable
DatumJapaneseIsUsable
DatumPronounceIsUsable
DatumIsValid第 6 章 LibEDB

62

DatumEnglishIsValid, DatumJapaneseIsValid, DatumPronounceIsValid はそれぞれ英語，日本語，読みの文字列が NULL 値，空の文字列 ("") のどち
らかでない場合に真値を返す．
DatumEnglishIsUsable, DatumJapaneseIsUsable, DatumPronounceIsUsable はそれぞれ英語，日本語，読みの文字列が NULL 値，空の文字列 ("")，
ピリオドのみの文字列 (".") のいずれでもでない場合に真値を返す．
DatumIsValid は DatumEIDisValid, DatumEnglishIsValid, DatumJapaneseIsValid, DatumPronounceIsValid の論理和の真偽値を返す．
以上のマクロは，datum が NULL である場合には偽を返す．
Function — EdbDatum 構造体に値をセットする

edb− datum− set

Synopsis :intedb− datum− set( EdbContext ec, EdbDatum datum, eid− t, utf8− t *en, utf8− t *ja, utf8− t *pr )Description :EdbDatum 構造体に，EID, 文字列をセットする．それまでにセットされていた文字列は内部で開放される場合がある．
EdbDatum 構造体に値をセットするために本関数以外を用いてはいけない．
Return Values :成功した場合に真値を返す
See Also :EdbDatum(68)Macro — Datum 構造体マクロ (アクセス)
Synopsis :eid− tedb− datum− get− EID( EdbContext ec,EdbDatum datum )utf8− t *edb− datum− get− English( EdbContext ec,EdbDatum datum )utf8− t *edb− datum− get− Japanese( EdbContext ec,EdbDatum datum )utf8− t *edb− datum− get− Pronounce( EdbContext ec,EdbDatum datum )utf8− t *edb− datum− get− TEXT
int
edb− datum− get− INT
double( EdbContext ec,EdbDatum datum )( EdbContext ec,EdbDatum datum )edb− datum− get− EID
edb− datum− get− English
edb− datum− get− Japaneseedb− datum− get− Pronounceedb− datum− get− TEXT
edb− datum− get− INT
edb− datum− get− REAL
edb− datum− get− DATE
edb− datum− get− MONETARY
edb− datum− get− BOOL
edb− datum− get− YEAR
edb− datum− get− DATE2

第 6 章 LibEDB

63

edb− datum− get− REAL

( EdbContext ec,EdbDatum datum )int32− tedb− datum− get− DATE

( EdbContext ec,EdbDatum datum )doubleedb− datum− get− MONETARY( EdbContext ec,EdbDatum datum )booledb− datum− get− BOOL

( EdbContext ec,EdbDatum datum )intedb− datum− get− YEAR

( EdbContext ec,EdbDatum datum )intedb− datum− get− DATE2( EdbContext ec, EdbDatum datum, int32− t *from, int32− t *to )Description :各タイプ毎に用意されているデータアクセスマクロ群．
文字列については，データがセットされているか否かに関わらず必ず非 NULL の値 ("") を返す．

6.8

データベース接続

Function — EDB の設定

edb− conﬁgure

Synopsis :EdbContext
edb− conﬁgure( char *path )Description :EDB のコンフィガレーションを行う．path にはコンフィガレーションファイルのパス名を指定する．
Return Values :成功した場合ポインター値 EdbContext を返す．失敗した場合には NULL を返す．
See Also :edb− open(74) , edb− close(74)Function — EDB への接続/切断
Synopsis :intedb− open( EdbContext ec )intedb− close( EdbContext ec )edb− openedb− close

第 6 章 LibEDB

64

Description :edb− open は EDB のコアに利用されている PostgreSQL データベースバックエンドプログラム (postgres) と接続する．
edb− close は EDB のコアに利用されている PostgreSQL データベースバックエンドプログラム (postgres) との接続を切断する．
Return Values :成功した場合 TRUE，失敗した場合 FALSE を返す．
See Also :edb− conﬁgure(73)Function — トランザクションの開始と終了
Synopsis :intedb− beginint
edb− end( EdbContext ec, int exclusive )( EdbContext ec )Description :SQL トランザクションを開始と終了処理を行う．
edb− begin の引数 exclusive には排他的接続を行うか否かを論理値で指定する．(EDB− READER が定義されていないときのみ有効)
Return Values :成功した場合 TRUE，失敗した場合 FALSE を返す．
See Also :edb− open(74) , edb− close(74)Example — EDB の接続と解除#include <stdio.h>#include "edb/edb.h"voidmain(int ac, char *av[]){
EdbContext(35) ec;
ec = edb− configure(73) (NULL);
if(!edb− open(74) (ec)) {fprintf(stderr, "can’t open database\n");exit(1);}edb− begin(75) (ec, FALSE);/* トランザクションの始まり */edb− beginedb− end

第 6 章 LibEDB

65...
/* この間では，データベースの整合性が保証される */edb− end(75) (ec);/* トランザクションの終り */edb− close(74) (ec);exit(0);}Function — ブロッキングモードの設定

edb− pgsql− setnonblocking

Synopsis :intedb− pgsql− setnonblocking( EdbContext ec, int nonblock )Description :nonblocking モードを設定する．
ノンブロッキングモードを指定すると，ちょっとはデータベースアクセスが早くなるが，現在のコードでは効率が悪い．
Return Values :成功した場合 TRUE，失敗した場合 FALSE を返す．
See Also :edb− begin(75) , edb− end(75)

6.9

NOTIFYEDB では PostgreSQL データベースに接続するアプリケーション間で，イベントを通知するために SQL に実装されている NOTIFY,
LISTEN コマンドを利用する．具体的には Dwarf によるデータベース間の情報の伝播に利用する．
Function — NOTIFY の送信と取得
Synopsis :intedb− notify( EdbContext ec, char *table )intedb− listen( EdbContext ec, char *table )char *
edb− accept− notify( EdbContext ec )Description :NOTIFY コマンドの送信と取得を行う．
テーブル名は SQL 上の名前である．(XML 名でないことに注意)．
文字列テーブル名は edb− accept− notify 呼び出した側で開放 (free) しなくてはならない．

edb− notify
edb− listenedb− accept− notify

第 6 章 LibEDB

66

Return Values :edb− notify, edb− listen は成功した場合 TRUE，失敗した場合 FALSE を返す．edb− accpet− notify は NOTIFY イベントを受け取ったテーブル名 (XML名) を返す．NOTIFY イベントがない場合には NULL を返す．

6.10

データベースアクセス関数

Function — PostgreSQL コマンド実行

edb− pgsql− command− exec

Synopsis :intedb− pgsql− command− exec

( EdbContext ec, char *command )Description :接続している PostgreSQL データベースにコマンドを実行させる．引数 command は SQL 文である．
Return Values :成功した場合 TRUE，失敗した場合 FALSE を返す．

Function — PostgreSQL に問い合わせedb− pgsql− query

Synopsis :Linkedb− pgsql− query( EdbContext ec, char *query, int *ntuples, int *nﬁelds )Description :接続している PostgreSQL データベースに問い合わせを行う．
引数 query は問い合わせのための SQL 文である．引数 ntuples，nfields はそれぞれ，問い合わせの結果のタプル数およびフィールド数を戻すた
めの整数型変数へのポインタである．
Return Values :成功した場合には結果を格納した文字列の Link がかえる．失敗もしくは結果がない場合には NULL を返す．

Function — PostgreSQL に問い合わせ
Synopsis :Linkedb− pgsql− query− one− ﬁeld

( EdbContext ec, char *query, int *ntuples )Linkedb− pgsql− query− one− tuple( EdbContext ec, char *query, int *nﬁelds )Description :edb− pgsql− query− one− ﬁeld
edb− pgsql− query− one− tuple

第 6 章 LibEDB

67

Function — PostgreSQL に問い合わせを行う．
Synopsis :char *
edb− pgsql− query− one− text
char *
edb− pgsql− query− textedb− pgsql− query− one− textedb− pgsql− query− textedb− pgsql− query− one− int( EdbContext ec, char *query )( EdbContext ec, char *query )intedb− pgsql− query− one− int( EdbContext ec, char *query )Description :Function — PostgreSQL に問い合わせを行う．

edb− pgsql− query− textsedb− pgsql− query− integers

Synopsis :intedb− pgsql− query− texts( EdbContext ec, char ***array, int *nelems, char *query )intedb− pgsql− query− integers( EdbContext ec, int **array, int *nelems, char *query )Description :Function — データベースを掃除する

edb− vacuum

Synopsis :intedb− vacuum( EdbContext ec )Description :データベースを掃除し，解析値，統計値を計算する．
かなり時間がかかるので，インタラクティブな処理の際に呼び出すのは避けるべきである．

6.11

テーブル

Function — テーブル情報をデータベースから取得

edb− table− getedb− table− get− by− name第 6 章 LibEDB

68

Synopsis :EdbTableInfoedb− table− get( EdbContext ec, eid− t eid )EdbTableInfoedb− table− get− by− name( EdbContext ec, char *xn )Description :edb− table− get は，EID(eid) で指定したテーブル情報をデータベースから取得する．
edb− table− get− byname は，テーブルの XML 名 (xn) で指定したテーブル情報をデータベースから取得する．
取得されたテーブル構造体は LibEDB 内でキャッシングされているので，開放してはいけない．
Return Values :テーブル構造体のポインタ．
See Also :EdbTableInfo(44)

6.12

タプル

Function — タプルの情報をデータベースから取得
Synopsis :EdbTupleInfoedb− tuple− get( EdbContext ec, eid− t eid, ..., 0 )Description :EID(eid) で指定したタプル情報をデータベースから取得する．
取得されたタプル構造体は LibEDB 内でキャッシングされているので，開放してはいけない．
Return Values :タプル構造体のポインタ．
See Also :EdbTupleInfo(52)6.13

ドキュメント出力関数

LibEDB では，データベース登録内容を出力先の言語属性に合わせて出力するために，doc− *() 関数群を用意している．
現在サポートしているドキュメント作成言語 (Document Making Language; DML) には，

edb− tuple− get第 6 章 LibEDB

69#define DocML− PLAIN#define DocML− XML/* 平文 (plain text) *//* XML */#define DocML− HTML#define DocML− TeX/* HTML *//* TEX */がある．
ドキュメント出力関数を利用するためには，まず，ドキュメント出力関数のコンテキストを保持する構造体
Structure — 出力関数の構造体のポインタ

Doc

Synopsis :

Doc

doc ;

Description :ドキュメント構造体の定義は下記のように宣言されている．

struct DOC { ... };typedef struct DOC *Doc;
ライブラリ利用者はドキュメント構造体のメンバーの直接操作してはいけない．
ただし，文字コードセットを設定する

int codeset;#define DocCodeset− Unicode 0#define DocCodeset− Latin 1/* default */と，画像出力関数の設定，

int (*picture− func) −− P((struct DOC *, char *, void *));
void *picture− udata;については，ユーザが直接参照，代入しても良い．

を作成する．
通常，ドキュメント出力関数の構造体を作成は doc− open(87) ，開放は doc− close(88) を用いる．
Function — ドキュメントのオープン
Synopsis :Docdoc− open( int dml, char *path, char *mode )Description :引数 dml には• #deﬁne DocML− PLAIN

doc− open

第 6 章 LibEDB

70• #deﬁne DocML− XML• #deﬁne DocML− HTML• #deﬁne DocML− TeXのいずれかを指定する．
引数 path はファイルのパス名，mode はファイルを開くときのモードを表す．引数 path, mode は内部で fopen(3) を呼び出すときにそのまま渡される．
Return Values :ドキュメント構造体のポインタ．失敗した場合には NULL．
See Also :doc− close(88)Function — ドキュメントのクローズ

doc− close

Synopsis :intdoc− close( Doc doc )Description :ドキュメントを閉じる．
Return Values :通常は，fclose(3) に同じ．
See Also :doc− open(87)Function — メモリーへ出力するドキュメントのオープン

doc− sopen

Synopsis :Docdoc− sopen( int dml )Description :ファイルを開かずに，メモリー上のバッファ領域に出力するドキュメントを作成する．
引数 dml は doc− open(87) に同じ．
ドキュメントは doc− close(88) で閉じる．
See Also :doc− close(88)Function — ファイルポインタ指定ドキュメントのオープン/クローズ

doc− fpopendoc− fpclose

第 6 章 LibEDB

71

Synopsis :Docdoc− fpopen( int dml, FILE *fp )voiddoc− fpclose( Doc doc )Description :引数 dml は doc− open(87) に同じ．
fp は既に fopen(3) でオープンされているファイルポインタ．
doc− fpopen で作成したドキュメントは，doc− fpclose で閉じる．

Function — テンポラリドキュメントのオープン

doc− tmpopen

Synopsis :Docdoc− tmpopen( int dml )Description :テンポラリファイルを用いて，ドキュメントをオープンする．
引数 dml は doc− open(87) に同じ．
ドキュメントは doc− close(88) で閉じる．

Function — ドキュメントのフラッシュ

doc− ﬂush

Synopsis :intdoc− ﬂush( Doc doc )Description :ドキュメントのバッファ (FILE *などのストリームバッファ) の内容をファイルに強制出力する．
ドキュメントの出力先がファイルの場合には，ﬄush(3) を呼び出し，それ以外では何もしない．

Function — ドキュメント出力文字列の取得
Synopsis :ucs4− t *doc− ucs4− sgets( Doc doc )char *
doc− sgets( Doc doc )intdoc− sﬂush( Doc doc )doc− ucs4− sgets
doc− sgets
doc− sﬂush

第 6 章 LibEDB

72

Description :doc− sopen(89) で作成したドキュメントから，これまでに出力された文字列を得る．
doc− ucs4− sgets は文字列を UCS-4 エンコードで返し，doc− sgets は UTF-8 エンコードで返す．
doc− sﬂush はバッファ領域の文字列を消去する．
doc− ucs4− sgets, doc− sgets で，文字列を取得すると，自動的にドキュメント内部の文字列は消去される．
Return Values :
文字列のポインタを返す．得られた文字列は，呼び出し側で free(3) を用いて開放すること．
Function — テキスト無変換出力関数
Synopsis :intdoc− printf( Doc doc, char *fmt, ... )intdoc− puts( Doc doc, char *str )intdoc− preﬁx− setintdoc− preﬁx− resetintdoc− putc

doc− printf
doc− puts
doc− preﬁx− setdoc− preﬁx− resetdoc− putc( Doc doc, char *str )( Doc doc )( Doc doc, int c )Description :テキスト変換をしない出力を行う．

Function — コメントの出力関数

doc− comment− printf

Synopsis :intdoc− comment− printf( Doc doc, char *fmt, ... )Description :コメント文字列を出力する．

Function — テキスト変換出力関数
Synopsis :intdoc− text− puts

( Doc doc, char *str )doc− text− puts
doc− text− putc
doc− text− puts3
doc− text− printf

第 6 章 LibEDB

73

int
doc− text− putc

( Doc doc, int c )intdoc− text− puts3( Doc doc, char *preﬁx, char *str, char *postﬁx )intdoc− text− printf( Doc doc, char *fmt, ... )Description :テキスト変換を行う出力を行う．
引数 str および c は文字列変換の対象となるが，prefix, postfix は文字列変換されない．

doc− text− printf の引数 fmt 以降は，printf(3) と同じであり，出力全体が文字列変換の対象となる．
Function — 文字属性の設定
Synopsis :voiddoc− color− beginvoid
doc− color− enddoc− color− begin
doc− color− enddoc− underline− begin
doc− underline− end( Doc doc, char * )( Doc doc )voiddoc− underline− beginvoid
doc− underline− end( Doc doc )( Doc doc )Description :色属性，アンダーライン属性を設定する．
出力ドキュメントによっては，何もしない．

Function — 日付の出力

doc− put− datetime

Synopsis :voiddoc− put− datetime( Doc doc, time− t t )Description :UNIX 時間 t を日付に変換して出力する．
Macro — ドキュメントの DML

DocIsPLAIN
DocIsXMLDocIsHTMLDocIsTeX

第 6 章 LibEDB

74

Synopsis :booleanDocIsPLAIN
booleanDocIsXML( doc )( doc )

booleanDocIsHTMLbooleanDocIsTeX( doc )( doc )

Description :ドキュメントの言語設定を検査する．

Macro — ドキュメントの言語設定

DocIsEnglish
DocIsJapanese

Synopsis :booleanDocIsEnglish( doc )

booleanDocIsJapanese( doc )

Description :ドキュメントの言語設定を検査する．

Macro — ドキュメントのコードセット

DocIsLatin

Synopsis :booleanDocIsLatin( doc )

Description :ドキュメントのコードセットを検査する．

6.14

カタログ (catalogue)

Libedb では，データベースから取得したタプルのリストを効率良く扱うために，カタログを生成する．カタログは以下の型で参照される．
Structure — カタログ構造体のポインタ

EdbCatalogue

第 6 章 LibEDB

75

Synopsis :EdbCatalogueca ;Description :カタログ構造体の定義は以下のとおり．

struct EDB− CATALOGUE {/* 二分木 */BiTree bt;
Link link;/* リンク */};typedef struct EDB− CATALOGUE *EdbCatalogue;

カタログ構造体の中には，二分木 (BiTree(15) ) とリスト構造 (Link(3) ) がともに組み込まれており，必要に応じてそれらを使い分ける．二分
木はタプルを EID 順で管理しタプルの登録順の情報は保持しない．リスト構造はタプルの登録順を保持する．
カタログを作成，開放は，以下の 2 つの関数によって行う．
Function — カタログの作成/開放edb− catalogue− newedb− catalogue− free

Synopsis :EdbCatalogueedb− catalogue− new

( )

void
edb− catalogue− free

( EdbCatalogue ca )Description :edb− catalogue− new は，主に EDB のタプル情報を管理するためのカタログ構造体を生成する．生成直後のカタログには，オブジェクトは含まれていない．
edb− catalogue− free は，カタログ構造体を開放する．ただし，カタログに登録されているオブジェクトの実体については開放しない．オブジェクトを同時に開放したい場合には，カタログを開放する前に自ら開放する必要がある．
Return Values :edb− catalogue− new では，作成されたカタログ構造体のポインタが返る．edb− catalogue− free の戻り値はなし．

空のカタログにオブジェクトを登録するには，Function — カタログにオブジェクトを追加
Synopsis :intedb− catalogue− append( EdbCatalogue ca, eid− t eid, void *obj )Description :同じ eid のオブジェクトが既に含まれている場合には，何もしない．

edb− catalogue− append

第 6 章 LibEDB

76を使用する．ただし，既に同じ eid がカタログ内に登録されているときには，その eid に対応するオブジェクトの登録は出来ない．
作成したカタログ内に目的のオブジェクトが存在しているか否かは，
Function — カタログ内のオブジェクト検索edb− catalogue− lookup

Synopsis :void *
edb− catalogue− lookup( EdbCatalogue ca, eid− t eid )Description :eid に対応するオブジェクトをカタログから検索する．
Return Values :eid に対応するオブジェクトのポインタを返す．オブジェクトがない場合には NULL を返す．

を利用することにより確認することが出来る．
Function — カタログ内のオブジェクトの個数

edb− catalogue− size

Synopsis :intedb− catalogue− size

( EdbCatalogue ca )Description :カタログに登録されているオブジェクトの個数を返す．
Return Values :カタログに登録されているオブジェクトの個数．

Macro — カタログ内のオブジェクトスキャン

ForCatalogueLink

Synopsis :void
ForCatalogueLink( Link l, EdbCatalogue ca )Description :実体は，for 文．

Macro — カタログのオブジェクトのポインタを得る
Synopsis :void *
CatalogueObject
Description :( Link l )CatalogueObject

第 6 章 LibEDB

77

Example — カタログのスキャン
Link(3) l;
EdbCatalogue(102) ca;...
ForCatalogueLink(107) (l, ca) {EdbTupleInfo(52) tuple = CatalogueObject(108) (l);...
}カタログはタプルの集合を手際良く操作するために作成した構造であるが，ユニークな ID (整数値) が対応づけられるオブジェクトについて操作することも可能である．

6.15

コンディション (condition)

Function — 条件式を合成する

edb− condition− make

Synopsis :char *
edb− condition− make

( EdbContext ec, EdbTableInfo ti, int logic, ... )Description :以降に示す条件式マクロの合成により，SQL 条件式を合成する．logic には#define CONDITION− LOGIC− OR#define CONDITION− LOGIC− AND/* 論理和 *//* 論理積 */のいずれかを指定する．条件式のマクロの最期に，必ず ConditionTerminate(110) を記述する．
Return Values :

合成した条件式を含む文字列のポインタが返る．文字列は，呼出側で開放しなくてはならない．

Macro — 条件式の終了
Synopsis :ConditionTerminate
Description :条件式の終了を示す．edb− condition− make(109) の引数の最期に必ず記述すること

ConditionTerminate

第 6 章 LibEDB

78

Macro — 空の条件式

ConditionNoOperation

Synopsis :ConditionNoOperation
Description :何もしない条件式を作成する．

Macro — 条件式のスキップ

ConditionSkipNext

Synopsis :ConditionSkipNext
Description :次の条件式をスキップする．

Macro — テーブル名の指定

ConditionPreﬁxTableName

Synopsis :ConditionPreﬁxTableName( s )Description :edb− condition− make(109) で合成される条件式のカラム名の前につけるテーブル名を指定する．
Macro — 続く条件式を否定する．

ConditionPreﬁxNot

Synopsis :ConditionPreﬁxNot
Description :次にかかれた条件式 (1 つのみ) を否定する．

Macro — タプルの有効性を示す条件式

ConditionAvaliable

Synopsis :ConditionAvaliable
Description :登録情報の有効/無効を検査する条件式を作成する．

Macro — 条件式の階層化

ConditionCondition

第 6 章 LibEDB

79

Synopsis :ConditionCondition( s )Description :既に作成した条件式を組み込むときに利用する．

Macro — EID に対する条件式

ConditionEIDMatch
ConditionEIDMatchNoExpand

Synopsis :ConditionEIDMatch( column, eid )ConditionEIDMatchNoExpand( column, eid )Description :対象としているカラムに指定した EID が含まれているかどうかを検査する．
ConditionEIDMatch では，検査する EID をマップの情報を元に展開する．ConditionEIDMatchNoExpand では，検査する EID をマップの情報を元に展開しない．

Macro — EID に対する条件式

ConditionCatalogueMatch
ConditionCatalogueMatchNoExpand

Synopsis :ConditionCatalogueMatch( column, ca )ConditionCatalogueMatchNoExpand( column, ca )Description :対象としているカラムに指定したカタログ中の EID が含まれているかどうかを検査する．ConditionEIDMatch では，検査するカタログ中の EID を
マップの情報を元に展開する．ConditionEIDMatchNoExpand では，検査するカタログ中の EID をマップの情報を元に展開しない．

Macro — 整数値に対する条件式
Synopsis :ConditionIntegerEQ( column, v )ConditionIntegerLE( column, v )ConditionIntegerLT( column, v )ConditionIntegerGE( column, v )ConditionIntegerGT( column, v )ConditionIntegerEQ
ConditionIntegerLE
ConditionIntegerLT
ConditionIntegerGE
ConditionIntegerGT

Description :Macro — 日付に対する条件式

ConditionDateFrom

第 6 章 LibEDB

80

Synopsis :ConditionDateFrom( column, v )Description :Macro — 期間に対する条件式

ConditionDate2Overlap

Synopsis :ConditionDate2Overlap( column, v1, v2 )Description :Macro — 実数値に対する条件式
Synopsis :ConditionRealEQ( column, v )ConditionRealLE( column, v )ConditionRealLT( column, v )ConditionRealGE( column, v )ConditionRealGT( column, v )ConditionRealEQ
ConditionRealLE
ConditionRealLT
ConditionRealGE
ConditionRealGT

Description :Macro — テキストに対する条件式

ConditionTextEQ

Synopsis :ConditionTextEQ( column, v )Description :Macro — テキストに対する条件式 (正規表現)
Synopsis :ConditionRegexTextEQ
Description :( column, v )ConditionRegexTextEQ

第 6 章 LibEDB

6.16

81

見出しの生成と制御

EDB では情報の参照登録が行われた場合にその部分には情報識別子 EID を登録するが，閲覧や情報伝搬のなどのいろいろな部分で，EIDの指し示す情報から見出しを作成し EID とともにテキストをリレーショナルデータベースなどに登録する．

LibEDB における見出しの作成は，以下の関数群によって行われる．
Function — 見出し構造体を作成する

edb− caption− new

Synopsis :Captionedb− caption− new( EdbContext ec )Description :通常，LibEDB の利用者はこの関数を利用することはない．
Return Values :見出し構造体のポインタ．

Function — 見出し構造体を開放する

edb− caption− free

Synopsis :voidedb− caption− free

( EdbContext ec, Caption cap )Description :edb− caption− new(125) , edb− make− caption(127) などで作成した見出しを開放する．
見出し構造体を開放するのは，見出しの作成呼び出しを行った側で行う．
Return Values :なし．
Function — 見出し構造体を開放する
Synopsis :Captionedb− make− caption( EdbContext ec, eid− t eid, int mode )Description :edb− make− caption で作成される構造体は，struct − CAPTION {char *c− main;/* 短い見出し */char *c− main− english;/* 英文見出し */char *c− main− japanese;/* 和文見出し */char *c− main− pronounce;/* 読み見出し */edb− make− caption

第 6 章 LibEDB

82

char *c− sub;/* 長い見出し */};typedef struct − CAPTION * Caption;のようにメンバーが登録されている．各々のメンバーの値は NULL となり得る．
見出しを作成する際に指定できるモードとして，#define CAP− long/* 長い見出しを作成する */#define CAP− norecurse/* 階層化された情報の上位見出しを結合しない */が指定できる．

edb− make− caption で作成した見出しは，edb− caption− free(126) で開放する．
Return Values :見出し構造体のポインタ．
See Also :edb− caption− free(126)

なお，【組織】情報のように階層化されている情報については，デフォルトで見出しを作成する際に上位情報の見出しを結合する．この結合は再帰的に行われる．これを阻止するためには，edb− make− caption(127) の引数 mode に CAP− long を指定すれば良いが，選択的にこれを阻止したい場合 (例えば，時組織の階層化は阻止，他組織については階層化見出しを作成する) には以下の関数群により調整を行う．
Function — 見出しを抑制する情報の追加/削除

edb− caption− omit− append
edb− caption− omit− remove

Synopsis :voidedb− caption− omit− append( EdbContext ec, eid− t eid )voidedb− caption− omit− remove( EdbContext ec, eid− t eid )Description :edb− caption− omit− append で eid を抑制リストに追加し，edb− caption− omit− remove で抑制リストから削除する．
edb− caption− omit− remove において eid が既に含まれている場合には，何もしない．また，edb− caption− omit− remove で対応する eid がリストに含まれていない場合にも何もしない．
Return Values :なし．
Function — 見出し抑制の確認

edb− caption− is− omitted

Synopsis :intedb− caption− is− omitted( EdbContext ec, eid− t eid )第 6 章 LibEDB

83

Description :指定された eid の見出しが抑制されているかを検査する．
Return Values :抑制を示す論理値．

Function — 見出し抑制リストの退避/復帰
Synopsis :voidedb− caption− omit− savevoidedb− caption− omit− restoreedb− caption− omit− saveedb− caption− omit− restore( EdbContext ec )( EdbContext ec )Description :edb− caption− omit− save で現在の見出し抑制リストを保存し，edb− caption− omit− restore で復帰させる．
edb− caption− omit− save を呼び出した後においてもそれまでの見出し抑制リストは有効である．
これを完全に消去したい場合には，edb− caption− omit− clear(131) を呼び出すこと．
edb− caption− omit− save で退避するリストはスタックをなす．すなわち，edb− caption− omit− save, edb− caption− omit− restore を入れ子構造で呼び出しても良い．
Return Values :なし．
Function — 見出し抑制リストの消去
Synopsis :voidedb− caption− omit− clear( EdbContext ec )Description :見出し抑制リストを消去する．
Return Values :

なし．

6.17

プロセス制御LibEDB では，一つのプログラムで複数の PostgreSQL バックエンドを利用して，QUERY の並列実行を行うことができる．ただし，この並列化を利用するためには，PostgreSQL バックエンドは readonly で利用すること．
LibEDB や LibEDB で利用しているライブラリはいわゆる Thread-Safe ではない．ただし，PostgreSQL の実行待ちの状態に入った時
点においては Thread-Safe であることを保障し，このタイミングでプロセスを切替える．プロセスの切替えには，edb− process− switch を用

edb− caption− omit− clear

第 6 章 LibEDB

84

いる．各々のプロセスの実行は，pthread が提供する pthread− mutex− t をロックした状態で実行される．この排他制御により，複数のプ
ロセスの内，実行状態にあるプロセスは 1 つに限定される．つまり，ここでいうプロセス制御は並列プロセスではなく，バックエンドへのQUERY 待ち状態の並列化であり，LibEDB 内部はシングルプロセスと同等に実行されていることに注意すること．
Function — 並列プロセスモードのセットアップ

edb− setup− processes

Synopsis :intedb− setup− processes( EdbContext ec, int num )Description :並列接続するバックエンドの個数を num で指定する．既に接続されているバックエンドの数よりも num が多い時，足りない分の接続を新たに作成す
る．既に接続されているバックエンドの数よりも num が少ない時には何もしない．
num に 0 を指定すると，バックエンドデータベースマシンの CPU 数から接続バックエンド数を自動的に調節する．
新しく接続されたバックエンドとの接続はノンブロッキングモードに初期化される．
この関数の戻り値は，接続バックエンドの総数を意味する．0 番目の接続はメインのスレッド専用であるため，この総数 −1 がプロセスで利用される接続の総数となる．ただし，トランザクション内において実際に利用できるプロセス数は edb− process− number− of− usable− process(??) で別途チェックすること．
Return Values :接続されたバックエンドの総数．

Type — プロセスコールバック関数型(*EdbProcessFunc)(void *data)

Synopsis :typedef void(*EdbProcessFunc)(void *data) ;Description :edb− process− create を用いて新規にプロセスを生成する際に，コールバックして欲しい関数の型宣言である．
Function — プロセスを作成する．

edb− process− create

Synopsis :voidedb− process− create( EdbContext ec, EdbProcessFunc callback, void *data )Description :新規にプロセスを作成し，callback(data) を呼び出す．
この関数は必ずメインのスレッドから呼び出すこと．
Return Values :なし．

Function — 実行プロセスを切替える．

edb− process− switch

第 6 章 LibEDB

85

Synopsis :voidedb− process− switch( EdbContext ec, int waiting )Description :プロセスの実行権を他のプロセスに渡す．プロセスの並列化はプログラム中で制御されて，同時に実行されるプロセスは 1 つに限定されるため，この関数を適宜呼び出さないと，並列化は行えない．例えば，メインループ中で入力待ちの状態になると，全てのプロセスの実行が停止する．これを避けるためには，select (2) 等の入力チェックを行なうシステムコールを利用し，入力がなければ edb− process− switch を呼び出すというようにしなければならない．

waiting は真理値であり，true の場合，プロセスの実行権を他のプロセスに渡した後，呼び出しプロセスの実行を数 µ 秒停止する．
Return Values :なし．

Function — 全てのプロセスの終了を待つ．

edb− process− waitall

Synopsis :voidedb− process− waitall( EdbContext ec )Description :実行状態にある全てのプロセスの終了を待つ．
Return Values :なし．

Function — 実行途上のプロセスの数を得る．

edb− process− number− of− active− processes

Synopsis :intedb− process− number− of− active− processes( EdbContext ec )Description :実行状態にあるプロセスの数を得る．
Return Values :実行待ちプロセスの数．

Function — 利用可能なプロセスの数を得る．

edb− process− number− of− usable− processes

Synopsis :intedb− process− number− of− usable− processes( EdbContext ec )

第 6 章 LibEDB

86

Description :利用可能なプロセスの数を得る．
バックエンドの並列化時に，各々のデータベースの AGE(EOID の最大値) が異なる可能性がある．複数のプロセスに対して，トランザクションを開始したときに各々のデータベースの AGE を取得し，AGE がメインのバックエンドに等しいもののみを利用する．この関数はトランザクション中において AGE がメインのバックエンドに等しいものの数を返す．
運が悪ければ利用可能なプロセス数が 0 の場合もありうる．その場合には，メインのバックエンドのみを利用する．
Return Values :

利用可能なプロセスの数．

Function — 空きプロセスの数を得る．

edb− process− number− of− idle− processes

Synopsis :intedb− process− number− of− idle− processes( EdbContext ec )Description :実行状態にない利用可能なプロセスの数を得る．edb− process− number− of− usable− processes(138) で返るプロセス数から実行途上にあるプロセス数を差し引いたものになる．
Return Values :空きプロセスの数．

87

第7章

7.1

LibEDBPub

出力スタイルと文書作成言語

ライブラリ LibEDBPub は• 出力スタイル: Output Style• 文書作成言語: Document Making Language (DML)の 2 種の設定により，様々な出力を行えるように設計されている．
出力スタイルとしては，
スタイル

形式名

EP− PrintStyle− STANDARD

Standard

EP− PrintStyle− XML

XML

EP− PrintStyle− CSV

CSV

EP− PrintStyle− ITEMIZEITEMIZE

EP− PrintStyle− CAPTION

Captionが用意されている．このスタイルと doc.c (libedb) で定義されている DML の組合せにより，目的の出力様式を作成する．
組合せはのとおりである．

Style/DML

XML

HTML

TEX

PLAIN

STANDARD

×○

plainTeX○「：」や「，
」区切り

XML

○

○

plainTeX○

XML の要素記述様式

CSV

×

○

plainTeX○TAB 区切りITEMIZE

×

○

LaTeX

○

要素/行で出力CAPTION×○

plainTeX○「(」「)」や「[」「]」で区切り第 7 章 LibEDBPub

7.2

88

doc 関数系と print 関数系

doc− *() 出力関数系は，出力先の DML (Document Making Language) に依存する主に 1 文字毎，もしくは文字間のエスケープシーケン
ス (TEX) やタグ (HTML) の調整を行う．
これに対し，edb− print− *() 出力関数系はタプル全体の情報の記載方法等の調整を行う．

7.3

コンテキストLibEDBPub ではライブラリのコンテキストを保持するために，型 EdbPrint でポイントされる構造体 (EDB− PRINT) を利用する．
Structure — LibEDBPub 出力関数コンテキストのポインタ

EdbPrint

Synopsis :EdbPrint

ep ;Description :ドキュメント構造体の定義は下記のように宣言されている．

struct EDB− PRINT { ... };typedef struct EDB− CONTEXT *EdbPrint;

LibEDBPub に登録されている関数のほとんどは，型 EdbPrint の変数を第 1 引数にもつ．
EdbPrint の利用方法は，
Example — LibEDBPub を利用する
EdbPrint ep;
ep = edb− print− new(ec, doc, style);...
edb− print− free(ep);のようになる．doc は doc− open(87) 等で作成した，ドキュメント出力関数のコンテキスト，style は出力文書のスタイルを示す．

7.4

ライブラリ制御関数

Function — 出力コンテキストの作成/開放edb− print− newedb− print− free

第 7 章 LibEDBPub

89

Synopsis :EdbPrint
edb− print− new( EdbContext ec, Doc doc, int style )voidedb− print− free

( EdbPrint ep )Description :ec は edb− conﬁgure(73) で作成し，edb− open(74) でオープンされた EDB コンテキストを指定する．
doc は doc− open(87) などで作成された，ドキュメント構造体を指定する．
style には
• #deﬁne EP− PrintStyle− STANDARD• #deﬁne EP− PrintStyle− XML• #deﬁne EP− PrintStyle− CSV• #deﬁne EP− PrintStyle− ITEMIZE• #deﬁne EP− PrintStyle− CAPTIONのいずれかを指定する．
edb− print− free は edb− print− new で作成したコンテキストを開放する．
Return Values :edb− print− new は作成した出力用構造体のポインタが返す．edb− print− free の戻り値はなし．

Function — 出力コンテキストの push/pop
Synopsis :voidedb− print− push

( EdbPrint ep )voidedb− print− pop( EdbPrint ep )Description :edb− print− push で，出力コンテキスト環境の保存する．
出力コンテキストの内容を一時的に変更したい場合に edb− print− push で環境を保存する．保存した環境は，edb− print− pop で復帰させることが出来る．
出力コンテキストを push 後は，push 以前のコンテキストの内容をすべて保持している．
edb− print− pop は，edb− print− push で保存した出力コンテキスト環境を復帰する．
edb− print− push と edb− print− pop の呼び出し回数は同じになるようにしておくこと．
Return Values :なし．

edb− print− pushedb− print− pop

第 7 章 LibEDBPub

7.5

90

出力関数

EDB において情報を表示する関数は次の型で定義される．
Function — タプル出力関数の型

EdbPrintTupleFunc− tSynopsis :int(*EdbPrintTupleFunc− t)( EdbPrint ep, EdbTupleInfo tuple )Description :edb− print− tuple(144) から呼び出される関数の型．
Return Values :何らかの表示を行ったことを示す論理値．
See Also :edb− print− tuple(144)

このようなタプル表示関数は，概ね EDB に登録されているテーブル単位で定義される．テーブル毎の表示関数を自動的に選別するもの
として，次の edb− print− tuple(144) が用意されている．
Function — タプル情報の出力

edb− print− tuple

Synopsis :intedb− print− tuple( EdbPrint ep, EdbTupleInfo tuple )Description :タプル tuple をコンテキスト ep の状態に従い出力する．
Return Values :何らかの表示を行ったことを示す論理値．
See Also :EdbPrintTupleFunc− t(143)

EDB の登録情報を表示する場合には，この関数を入口として表示することが推奨される．
さて，タプルを表示する際に，そのタプルの情報を英語 (Latin) で表示するか日本語 (CJK) で表示するかを判別するために，以下の関数を利用する．
Function — タプル言語属性を求める関数の型
Synopsis :int(*EdbPrintTupleLangFunc− t)( EdbPrint ep, EdbTupleInfo tuple )EdbPrintTupleLangFunc− t

第 7 章 LibEDBPub

91

Description :edb− print− tuple− language(146) から呼び出される関数の型．
戻り値は，

EP− LANG− English
EP− LANG− Japanese/* 英語 (Latin) *//* 日本語 (CJK) */のいずれか．
Return Values :言語属性．
See Also :edb− print− tuple− language(146)
Function — タプル情報の言語属性

edb− print− tuple− language

Synopsis :intedb− print− tuple− language( EdbPrint ep, EdbTupleInfo tuple )Description :表示言語の属性が EP− LANG− Auto のときにタプル tuple を英語/日本語のいずれで表示するかの情報を得る．
戻り値は，

EP− LANG− English
EP− LANG− Japanese/* 英語 (Latin) *//* 日本語 (CJK) */のいずれか．
Return Values :言語属性．
See Also :EdbPrintTupleLangFunc− t(145)

表示の際の指定が既に EP− LANG− English や EP− LANG− Japanese に指定されている場合には，それに合わせて出力が行われるが，

EP− LANG− Auto の場合には，上記の関数が呼び出される．

7.6

ユーザ定義出力関数の登録

LibEDBPub では，ユーザ定義の表示関数を動的にライブラリに登録することが出来る．

第 7 章 LibEDBPub

7.6.1

92

情報 (タプル) 単位

Function — タプル出力関数を登録する

edb− print− tuple− register− func

Synopsis :intedb− print− tuple− register− func

( EdbPrint ep, char *xn, int style, EdbPrintTupleFunc− t print )Description :タプルを出力する関数を登録する．
See Also :EdbPrintTupleFunc− t(143) , UserDeﬁnedPrintTuple(148)
Function — タプル表示 (ユーザ定義)

UserDeﬁnedPrintTuple

Synopsis :int
UserDeﬁnedPrintTuple( EdbPrint ep, EdbTupleInfo tuple )Description :タプルの表示関数．
Return Values :関数値は，何らかの表示を行ったことを示す論理値．
See Also :edb− print− tuple− register− func(147)

Function — タプルの言語属性を調べる関数を登録する

edb− print− tuple− register− language− func

Synopsis :intedb− print− tuple− register− language− func

( EdbPrint ep, char *xn, EdbPrintTupleLangFunc− t lang− func )Description :言語選択が自動 (デフォルト) の状態ときに，英文，和文のいずれで出力するかを決定するために，タプルの情報を調べる必要があるときに登録する．
See Also :EdbPrintTupleLangFunc− t(145) , UserDeﬁnedLanguageDecision(150)

Function — タプル言語属性を調べる (ユーザ定義)
Synopsis :int
UserDeﬁnedLanguageDecision( EdbPrint ep, EdbTupleInfo tuple )UserDeﬁnedLanguageDecision

第 7 章 LibEDBPub

93

Description :タプルの言語属性を調べるユーザ定義関数．
Return Values :関数値は，

EP− LANG− English
EP− LANG− Japanese/* 英語 (Latin) *//* 日本語 (CJK) */のいずれかとする．
See Also :EdbPrintTupleLangFunc− t(145) , edb− print− tuple− register− language− func(149)
Function — タプル表示プレフィックス

edb− print− tuple− preﬁx

Synopsis :intedb− print− tuple− preﬁx( EdbPrint ep, EdbTupleInfo tuple )Description :タプルの表示前に呼び出す関数である．
See Also :UserDeﬁnedPrintTuple(148)
Function — タプル表示ポストフィックス

edb− print− tuple− postﬁx

Synopsis :intedb− print− tuple− postﬁx( EdbPrint ep, EdbTupleInfo tuple )Description :タプルの表示後に呼び出す関数である．
See Also :UserDeﬁnedPrintTuple(148)
Function — カラム表示関数
Synopsis :intedb− print− tuple− column ( EdbPrint ep, EdbTupleInfo tuple, char *pre, char *dpre, EdbTupleColumn tc, EdbPrintTupleColumnCallbackFunc− tfunc, char *dpost, char *post, char *substitute, int alert )edb− print− tuple− column

第 7 章 LibEDBPub

94

Description :カラムを表示する関数である．
引数の意味は以下のとおり．

• ep... EdbPrint 構造体のポインタ．
• tuple... 表示対象のタプル．
• pre... 一つ目のデータの前に表示される文字列．
• dpre... 2 つ目以降のデータの前に表示される文字列．
• tc... カラム．
• func... サブカラムを表示するためのコールバック関数．
• dpost... 最期を除くデータの後ろに表示される文字列．
• post... 最期のデータの後ろに表示される文字列．
• substitute... データが無いときに表示される文字列．
• alert... データが無いときの警告レベル．
– #deﬁne EP− WARNING /* ワーニング */– #deﬁne EP− ALERT /* 警告 */表示は，

pre D1 dpost dpre D2 dpost . . . dpre Dn−1 dpost dpre Dn postのようになる．スタイルパラメータ• EpContext(ep)->tcd− mode
– #deﬁne EP− TCD− MODE− ITALIC /* 斜自体 */– #deﬁne EP− TCD− MODE− BOLD /* 太字体 */– #deﬁne EP− TCD− MODE− TT /* テレタイプ */• EpContext(ep)->column− mode
– #deﬁne EP− COLUMN− MODE− AT− ANYTIME /* 期間限定属性に関わらず，全ての要素を表示する */– #deﬁne EP− COLUMN− MODE− LIST− AND /* 英語モードで要素が複数あるときに，最期を○○ and ○○のように表示する */Return Values :何らかの出力を行ったことを示す論理値．
See Also :UserDeﬁnedPrintTuple(148)
Function — カラム表示関数
Synopsis :intedb− print− tuple− named− column( EdbPrint ep, EdbTupleInfo tuple, EdbDatum datum, char *pre, char *dpre, char *tcname,
EdbPrintTupleColumnCallbackFunc− t func, char *dpost, char *post, char *substitute, int alert )edb− print− tuple− named− column

第 7 章 LibEDBPub

95

Description :カラムを表示する関数である．
引数の意味は以下のとおり．

• ep... EdbPrint 構造体のポインタ．
• tuple... 表示対象のタプル．
• datum... 上位のデータ．
• pre... 一つ目のデータの前に表示される文字列．
• dpre... 2 つ目以降のデータの前に表示される文字列．
• tcname... カラムの XML 名．
• func... サブカラムを表示するためのコールバック関数．
• dpost... 最期を除くデータの後ろに表示される文字列．
• post... 最期のデータの後ろに表示される文字列．
• substitute... データが無いときに表示される文字列．
• alert... データが無いときの警告レベル．
– #deﬁne EP− WARNING /* ワーニング */– #deﬁne EP− ALERT /* 警告 */表示は，

pre D1 dpost dpre D2 dpost . . . dpre Dn−1 dpost dpre Dn postのようになる．スタイルパラメータ• EpContext(ep)->tcd− mode
– #deﬁne EP− TCD− MODE− ITALIC /* 斜自体 */– #deﬁne EP− TCD− MODE− BOLD /* 太字体 */– #deﬁne EP− TCD− MODE− TT /* テレタイプ */• EpContext(ep)->column− mode
– #deﬁne EP− COLUMN− MODE− AT− ANYTIME /* 期間限定属性に関わらず，全ての要素を表示する */– #deﬁne EP− COLUMN− MODE− LIST− AND /* 英語モードで要素が複数あるときに，最期を○○ and ○○のように表示する */Return Values :何らかの出力を行ったことを示す論理値．
See Also :UserDeﬁnedPrintTuple(148)
Function — カラム表示関数 (廃止予定)

edb− book− print− named− column

第 7 章 LibEDBPub

96

Synopsis :intedb− book− print− named− column*substitute, int mode, int alert )( EdbPrint ep, EdbTupleInfo tuple, char *pre, char *dpre, char *tcname, char *dpost, char *post, char

Description :カラムを表示する関数である．
引数の意味は以下のとおり．

• ep... EdbPrint 構造体のポインタ．
• tuple... 表示対象のタプル．
• pre... 一つ目のデータの前に表示される文字列．
• dpre... 2 つ目以降のデータの前に表示される文字列．
• tcname... カラムの XML 名．
• dpost... 最期を除くデータの後ろに表示される文字列．
• post... 最期のデータの後ろに表示される文字列．
• substitute... データが無いときに表示される文字列．
• mode... カラムの表示モード．
– #deﬁne EP− TCD− MODE− ITALIC /* 斜自体 */– #deﬁne EP− TCD− MODE− BOLD /* 太字体 */– #deﬁne EP− TCD− MODE− TT /* テレタイプ */• alert... データが無いときの警告レベル．
– #deﬁne EP− WARNING /* ワーニング */– #deﬁne EP− ALERT /* 警告 */表示は，

pre D1 dpost dpre D2 dpost . . . dpre Dn−1 dpost dpre Dn postのようになる．
Return Values :何らかの出力を行ったことを示す論理値．
See Also :UserDeﬁnedPrintTuple(148)

第 7 章 LibEDBPub

7.6.2

97

項目 (カラム) 単位

Function — カラム出力関数を登録する

edb− print− tcd− register− func

Synopsis :intedb− print− tcd− register− func

( EdbPrint ep, char *xn, int style, EdbPrintTCDFunc− t print− tcd )Description :タプルを出力関数を登録する．
See Also :UserDeﬁnedPrintTCD(157)
Function — カラム表示 (ユーザ定義)

UserDeﬁnedPrintTCD

Synopsis :int
UserDeﬁnedPrintTCD( EdbPrint ep, EdbTupleInfo tuple, EdbTupleColumn tc, EdbDatum datum )Description :カラムの表示関数．
Return Values :関数値は，何らかの表示を行ったことを示す論理値．
See Also :edb− print− tcd− register− func(156)7.6.3型 (タイプ) 単位

Function — タイプ出力関数を登録する

edb− print− type− register− func

Synopsis :intedb− print− type− register− func

( EdbPrint ep, int type, int style, EdbPrintTCDFunc− t print− type )Description :タプルを出力関数を登録する．
See Also :UserDeﬁnedPrintType(159)
Function — タイプ表示 (ユーザ定義)

UserDeﬁnedPrintType

第 7 章 LibEDBPub

98

Synopsis :int
UserDeﬁnedPrintType( EdbPrint ep, EdbTupleInfo tuple, EdbTupleColumn tc, EdbDatum datum )Description :カラムの表示関数．
Return Values :関数値は，何らかの表示を行ったことを示す論理値．
See Also :edb− print− type− register− func(158)7.7システムデフォルトの出力関数

7.7.1

libedbpub/modules

ディレクトリ libedbpub/modules は，システムのデフォルトの出力関数を格納するために用意されている．
ファイルの名前は，libedbpub/のファイルと衝突しないように

mod− xmlname.cを用いて，テーブル毎に出力関数のモジュールを作成する．このファイルには，static struct EDB− PRINT− MODULE− INFO(160) module− info = {/* xmlname */"xmlname",/* language */言語選択関数のポインタ,/* std *//* xml */標準出力関数のポインタ,/* csv *//* item *//* cap */CSV 出力関数のポインタ,
ITEMIZE 出力関数のポインタ,
見出し出力関数のポインタ

XML 出力関数のポインタ,};
DECLARE− PRINT− MODULE(161) (id, module− info)を含ませておく．
Structure — 出力モジュールの情報

EDB− PRINT− MODULE− INFO

Synopsis :struct EDB− PRINT− MODULE− INFO

module− info ;第 7 章 LibEDBPub

99

Description :構造体の各メンバーは以下のとおり．

static struct EDB− PRINT− MODULE− INFO {char *xmlname;/* XML 名 */EdbPrintTupleLangFunc− t lang;/* 言語選択関数のポインタ */EdbPrintTupleFunc− t std;/* 標準出力関数のポインタ */EdbPrintTupleFunc− t xml;/* XML 出力関数のポインタ */EdbPrintTupleFunc− t csv;/* CSV 出力関数のポインタ */EdbPrintTupleFunc− t item;/* ITEMIZE 出力関数のポインタ */EdbPrintTupleFunc− t cap;/* 見出し出力関数のポインタ */};See Also :DECLARE− PRINT− MODULE(161)
Macro — 出力モジュールの登録

DECLARE− PRINT− MODULE

Synopsis :DECLARE− PRINT− MODULE( id, module− info )Description :引数 id は登録されるすべてのモジュールについてユニークでなくてはならない．結果として，受け持つテーブルの XML 名にすることが推奨される．
引数 module− info は，構造体 EDB− PRINT− MODULE− INFO(160) で作成した名前を指定する．
See Also :EDB− PRINT− MODULE− INFO(160)

作成したモジュールをライブラリに組み込むには，libedbpub/ImakeﬁleのMODULE− SRCS
MODULE− OBJSにモジュール名を追加することで行う．

第 7 章 LibEDBPub

7.7.2

100

モジュール追加上の注意

新しいモジュールを作成し，追加するときの注意を以下に記述する．

• モジュール名特別な理由がない限り出力関数は，テーブル毎にファイル化し，
mod− xmlname.cのように名付ける．先頭の mod− は libedbpub の他のファイル名と衝突しないようにするためであり，xmlname を用いるのは視認性を良くするためにである．

• ソースコード
モジュール内にて宣言した変数，関数はすべて static (外部参照不可) のように作成する．
これも既存の変数，関数名と衝突しないようにするためである．
モジュールから外部への情報受渡しは，すべて DECLARE− PRINT− MODULE を介して行う．

• DECLARE− PRINT− MODULE
id には，xmlname と同じ名前を記述する．
マクロ DECLARE− PRINT− MODULE がないと，モジュールの追加は行われない．モジュールを外す場合には，#if 0DECLARE− PRINT− MODULE(161) (article, module− info)#endifのようにすると，モジュールとして登録されない．ただし，オブジェクトのライブラリアーカイブへの追加は行われる．
徳島大学では，徳島大学のテーブル定義に依存した出力関数は#ifdef THE− UNIVERSITY− OF− TOKUSHIMADECLARE− PRINT− MODULE(161) (article, module− info)#endifとしている．

101

第8章

LibEDBR と LibEDBPubR

LibEDBR は LibEDB を EDB− READER 用にカスタマイズしたもの．LibEDBPubR は LibEDBPub を EDB− READER 用にカスタマイズしたもの．
コンパイル時に EDB− READER オプションをつけると，読み込み専用プログラムが作成される．

第 III 部

EDB 運用

103

第9章

9.1

EDB の設定と関連ソフトウェア

Operating System (FreeBSD)

1. PostgreSQL は SysV 系の Shared Memory および Semaphore を利用している．試しに運用する場合にはデフォルトのカーネル設定で十分だが，クライアント数が増えるとこれらのリソースが足りなくなるのでほどほどに増やしておくこと．
2. 現在の EDB のソースは on Memory のデータ容量を切り詰めていないので，1 プロセスで使用可能なメモリ容量はそれ相応に大きく(少なくとも 512MB 以上) しておいた方が無難である．また，トータルの VM のサイズも大きくしておく方がベター．

9.2

File System

1. PostgreSQL はデフォルトで/usr/local/pgsql にインストールされるが，データベースの規模やアクセス頻度，速度などを考えた場合には別のディスクに分離しておいた方がよい．

9.3

PostgreSQL

1. MultiByte に対応したバージョンの PostgreSQL をインストールすること．
2. デフォルトで利用するコードは Unicode (UTF-8 エンコーディング) にする．
3. contrib/array/array− iterator を利用できるようにする．
4. データベース管理用の UNIX ユーザ (edb) を作成する．
• /etc/passwd: edb:*:443:443:EDB Owner:/usr/local/edb:/bin/csh• /etc/group: edb:*:443:root,edb

第 9 章 EDB の設定と関連ソフトウェア

104

ホームディレクトリ (/usr/local/edb/) には，.cshrc, .profile などの rc ファイルをおいておく (cron を利用して，定期的に何かを実行する場合に共通の設定を行っておくと便利)．

5. データベース管理用のユーザ (edb) を createuser で作成する．このユーザにはデータベースを作成する権限を与えておくこと．このユーザが EDB のマスターになる．
6. PostgreSQL レベルで公開用のデータベースを作成する場合には guest 等のユーザを作成しておく．もちろん，このユーザには特別な権限を与えるべきではない．guest ユーザには単純なパスワードを設定しておく．

7. /usr/local/pgsql/data/postgresql.conf のチューニングは自由．ただし，tcpip− socket は true に．同時接続数は増やしておいた方がいい．Administrator’s Manual をよく読んで設定する．
8. 公開用のデータベースを作成した場合には，/usr/local/pgsql/data/pg− hba.conf にアクセス権を定義しておく．
9. ログファイル (/var/log/pgsql) はすぐに大きくなるので，無効にするかもしくは定期的に rotate する仕組みを施しておいた方がいい

9.4

Apache1. EDB では登録作業内容の秘密性を保つため，https(SSL) を利用できるように設定しておくこと．EDB で作成した CGI プログラムは
SSL のセッションであるかどうかをチェックしている．なお，CA の認証を得ている必要はない．
2. EDB では各接続の認証に Cookie を利用するので，Cookie 機能を ON にしておくこと．
3. データベースにアクセスできるユーザは特定の UNIX ユーザ (edb) のみである．したがって，CGI で起動されるプログラムの実効ユー
ザが edb でなくてはならない．SUID で実効ユーザを変更するやり方はあまりいい方法ではないので，設定ファイル (httpd.conf) にて
実効ユーザを edb に変更し，かつ suexec を利用して，CGI プログラムの実効ユーザを変更する．CGI のプログラムファイルの Owner
はもちろん edb にしておく．

4. ログファイル (/var/log/access.log など) はすぐに大きくなるので，他のディレクトリに移したり rotatelog を使うなどして，ハードディスクが溢れないようにしておくのが無難．

9.5

EDB

9.5.1

データベースの構成

edb− template第 9 章 EDB の設定と関連ソフトウェア

105

EDB のデータベースを作成するためのテンプレートデータベース．
/usr/local/edb/sbin/make-edb-template.sh を利用して作成する．
edb− database
原典情報をもつデータベース．
情報の登録は必ずこのデータベースに対して行われる．

edb− database 上での処理を軽減させるために，このデータベースにおいては XML 表現のテーブル (edb− xmldb, edb− authentication)
のみを利用する．
データベースを作成するためのテンプレートを共通にしているので，他のテーブルの定義も実際に行われているが使わない．
作成方法は以下の通り．ただし，それ以前の登録内容は消えてしまうので注意せよ．

1. 初期登録内容を，edb− database.database-table.dump
edb− database.database-tuple.dump
edb− database.authentication.dumpに用意しておく．

2. edb# dropdb edb− database
3. edb# createdb edb− database --template edb− template
4. edb# edb− restore edb− database edb− database
5. edb# edb− adjust edb− database
6. edb# edb− check edb− databaseedb− databaseredb− database のレプリカ．
登録情報の XML 表現だけでなく，RDB 上に展開したテーブルを保有する．
作成方法は以下の通り．

1. edb# createdb edb− databaser --template edb− template
2. edb# edb− copy localhost:5432:edb− database localhost:5432:edb− databaser

第 9 章 EDB の設定と関連ソフトウェア

106

3. edb# edb− adjust localhost:5432:edb− databaser
データベースのマネージメントには，後に述べる edb− dwarf を利用しているが，このデータベースは多数の edb− dwarf が原典情報をもつデータベースにアクセスすることを回避するために用意している．
徳島大学で運用しているシステムでは，この時点で原典情報のデータベースをもつサーバとは別のサーバになっているため，実際の名前は edb− database になっている．

edb− databasenedb− database のレプリカ．
登録情報の XML 表現だけでなく，RDB 上に展開したテーブルを保有する．
閲覧や検索に利用する．

n は 0 から始める．
作成方法 (edb− database0) は以下の通り．

1. edb# createdb edb− database0 --template edb− template
2. edb# edb− copy localhost:5432:edb− databaser localhost:5432:edb− database0
3. edb# edb− adjust localhost:5432:edb− database0
edb− session
アクティブなセッションを管理するためのデータベース．
テーブル (edb− session) のみを利用する．
作成方法は以下の通り．

1. edb# createdb edb− session --template edb− templateedb− user− template
EDB のユーザコンテキストを格納するデータベースを作成するためのテンプレートデータベース/usr/local/edb/sbin/make-edb-template.sh を利用して作成する．
edb− user− eid第 9 章 EDB の設定と関連ソフトウェア

EDB のユーザコンテキストを格納するデータベース．
eid は，ユーザに対応する個人情報の EID．
ユーザ毎の環境設定や編集中の情報の内容などを格納する．
新しいユーザがログインしたときに自動的に作成される．

edb− latestedb− database の登録情報中の履歴の最終情報のみをもつデータベース．
登録情報の XML 表現だけでなく，RDB 上に展開したテーブルを保有する．

edb− university, edb− public を作成するための中間データベース．
作成方法は以下の通り．

1. edb# createdb edb− latest --template edb− template
2. edb# edb− copy -latest localhost:5432:edb− databaser localhost:5432:edb− latest
3. edb# edb− adjust localhost:5432:edb− latestedb− university
edb− latest 中の学内公開可能な情報を蓄積するデータベース．
登録情報の XML 表現だけでなく，RDB 上に展開したテーブルを保有する．
作成方法は以下の通り．

1. edb# createdb edb− university --template edb− template
2. edb# psql -f /usr/local/edb/etc/grant.sql edb− university
3. edb# edb− copy -university localhost:5432:edb− latest localhost:5432:edb− university
4. edb# edb− adjust -grant-select-to-public localhost:5432:edb− university
edb− publicedb− latest 中の学外公開可能な情報を蓄積するデータベース．
登録情報の XML 表現だけでなく，RDB 上に展開したテーブルを保有する．
作成方法は以下の通り．

107

第 9 章 EDB の設定と関連ソフトウェア

108

1. edb# createdb edb− public --template edb− template
2. edb# psql -f /usr/local/edb/etc/grant.sql edb− public
3. edb# edb− copy -public localhost:5432:edb− latest localhost:5432:edb− public
4. edb# edb− adjust -grant-select-to-public localhost:5432:edb− public

9.5.2

データベースアクセス設定ファイル (edb.conf )• EDB では，edb.conf にデータベースのロケーション情報，アクセス情報等を記入しておき，各プログラムはこのファイルを参照する．
• edb.conf は/usr/local/edb/etc/におく．
• edb.conf の他に，edb0.conf, university.conf, public.conf を使うこともある．これらは，プログラム中で指定される．
• edb.conf 中の記述方法は，conf.c を読むことによって大部分は理解可能である．よく使うものを列記しておく．
– ‘#’ 以降 … 注釈
– pgsqlOptions … PostgreSQL への接続オプション (現在は利用していない)– pgsqlTty … PostgreSQL への接続オプション (現在は利用していない)– pgsqlDBPath … EDB のデータベースのロケーション情報．「ホスト:ポート:データベース. レプリカ数」で指定する．
(例) pgsqlDBPath localhost:5432:edb− database.4– WhoisServer … EDB のデータベースのロケーション情報を whois サーバから得る場合に指定する．
(例) WhoisServer db.db.tokushima-u.ac.jp– WhoisQuery … EDB のデータベースのロケーション情報を whois サーバから得る場合に指定する．
(例) WhoisQuery LOOK=DBPATH.universiy ...(学内公開データベース)(例) WhoisQuery LOOK=DBPATH.public ...(学外公開データベース)(例) WhoisQuery LOOK=DBPATH ...(接続ホストの IP アドレスによって，学内外を選択)
pgsqlDBPath と WhoisServer, WhoisQuery が両方とも定義された場合には，whois で得られる情報の方が優先され，whois でデータベースのロケーション取得に失敗した場合 pgsqlDBPath の定義が利用される．

– MyNetwork … 自ネットワークの IP アドレス/ネットマスク(例) MyNetwork 150.59.0.0/255.255.0.0

第 9 章 EDB の設定と関連ソフトウェア

109– EDBMasterUID…EDB のマスターユーザの UID(例) EDBMasterUID 443– CaptionOmit…EDB のプログラム群が作成する見出しのうち，階層化情報の見出しのある部分を抑制する場合に利用する．
(例) CaptionOmit 12345 # Government(Organization)
階層化された上位に [政府] があった場合，それ以上の見出しは結合しない．

9.5.3

データベース管理プログラム

下記のプログラムではデータベースの指定子は全て「host:port:dbname」の形式で指定する．

make-edb-template.sh
テンプレートデータベースを作成する．
作成されるテンプレートデータベースは以下の 2 つである．

edb− template
EDB で利用する各種データベースの雛型．
/usr/local/edb/etc/base.sql に記述された内容に沿い，テンプレートを作成する．base.sql には，SQL に対するユーザ拡張
関数の読み込みや雛型のテーブル作成等が記述されている．
edb− user− template
EDB でユーザコンテキストを記憶するデータベースの雛型．(現時点で，実質上は edb− template に同じ)
(Usage) edb# make-edb-template.shedb− check
データベースの登録情報，整合性を検査するプログラム．

(Usage) edb# edb− check db
edb− copy
データベース間での XMLDB のコピー．

(Usage) edb# edb− copy [-all|-latest|-university|-public] src-db dst-db

第 9 章 EDB の設定と関連ソフトウェア

edb− adjust
XMLDB から RDB を作成する．
(Usage) edb# edb− adjust [-grant-select-to− public] db
edb− dump
データベースのダンプファイルを作成する．(XMLDB のみ)(Usage) edb# edb− dump db dumpfile
ファイルとして– dumpfile.database-table.dump– dumpfile.database-tuple.dump– dumpfile.authentication.dump
が作成される．
これらのファイルは，1 行 1 行が独立な XML 表現のデータになっている．

edb− restore
ダンプファイルの内容をデータベースに登録する．

(Usage) edb# edb− restore db dumpfileedb− dwarf
データベース管理デーモンプログラム．

(Usage) edb# edb− dwarf [-all|-latest|-university|-public] db ref-db
ref-db で指定されたデータベースの更新情報をもとに，db の登録情報の各種調整を行う．
データベースの更新通知は，SQL コマンドの NOTIFY を利用している．
データベース一つ毎に edb− dwarf が一つ起動される．

110

第 9 章 EDB の設定と関連ソフトウェア

111edb− dwarf を用いたデータベースの連係例．
edb− database←原典情報（登録は全てこのデータベースに行われる）↓ (edb− dwarf) ↓edb− databaser

CGI プログラム edb− browse, edb− edit 等からの参照↓ (edb− dwarf -latest) ↓edb− latest→ (edb− dwarf -university) →→ (edb− dwarf -public) →edb− university
edb− public

学内公開可能情報への学内からのアクセス
学外公開可能情報へのアクセス

末端のデータベースはいくつ用意してもよいが，情報が更新されたときに edb− dwarf が一斉に動くためほどほどの数にしておいた方がよい．複数台のサーバに分散させてもよい．

112

第 10 章 EDB 運用のための準備
EDB を構築，運用するには，初期登録情報を用意しなくてはならない．さもなければ，一人のユーザもシステムにログインして情報を登録することができない．本章では EDB を構築する際に必要な初期情報ファイルについて述べる．

EDB では全ての情報を Unicode テキストで表現し，かつ XML 形式で保存する．したがって，初期設定ファイルも XML 形式のファイルとして最終的に作成する必要がある．作成すべきファイルは• edb− database.database-table.dump• edb− database.database-tuple.dump• edb− database.authentication.dumpの 3 つである．
これらのファイルは，各行が XML で記述されかつ DTD によって LINT 可能なものである必要がある．すなわち，行頭は• <xml version="1.0" encoding="utf-8"?>ではじまり，行末で閉じる XML によるデータ表現である．
以下に，それぞれの内容について述べる．

edb− database.database-table.dump
このファイルの作成については，テーブルの定義情報．

DTD: http://web.db.tokushima-u.ac.jp/dtds/table.dtd
または，

http://web.db.tokushima-u.ac.jp/dtds/の頁で閲覧可能なテーブルの定義を参考にして欲しい．
また，EDB での XML の表現の手法やテーブルの定義方法については

http://web.db.tokushima-u.ac.jp/edb-manual/xml.html

第 10 章 EDB 運用のための準備

113の頁に記述がある．

edb− database.database-tuple.dump
タプルの情報 (すなわち通常の登録情報)．

DTD: http://web.db.tokushima-u.ac.jp/dtds/テーブルの XML 名.dtd
edb− database.authentication.dump
認証パスフレーズの情報．

DTD: http://web.db.tokushima-u.ac.jp/dtds/edb-auth.dtd
1 行を展開したものは下記のように表現されている．
1:<?xml version="1.0" encoding="utf-8"?>

2:
3:
4:

<!DOCTYPE edb:auth SYSTEM "http://web.db.tokushima-u.ac.jp/dtds/auth.dtd"><edb:auth xmlns:edb="http://web.db.tokushima-u.ac.jp/dtds/"><edb:base eid="個人情報の EID" eoid="10316"

5:
6:

mapto="0"
mtime="変更時刻の UNIX タイム"

7:
8:
9:

operator="443" avail="true" owner="443"
read="inherit" write="inherit" delete="inherit"/><edb:body>個人情報の EID</edb:body>

10:
11:

<edb:passphrase type="MD5">暗号化パスフレーズ</edb:passphrase><edb:passphrasestaff type="MD5">暗号化パスフレーズ</edb:passphrasestaff>

12:
13:

<edb:passphraseodin type="MD5">暗号化パスフレーズ</edb:passphraseodin></edb:auth>

4 行目の eid はこの認証情報の対象となる個人情報の EID である．また，eoid は authentication 内でのオブジェクトの通し番号であり，同一 EID の情報がある場合には，eoid の値が大きいものが選択される．
6 行目の変更時刻の UNIX タイムについては，初期情報作成時は 0 でよい．
7 行目の 443 はデータベースのマスタユーザの UID である．
9 行目にはこの認証情報の対象となる個人情報の EID をもう一度記述する．

第 10 章 EDB 運用のための準備

114

10 行目は通常の認証に利用されるパスフレーズを MD5 で暗号化した文字列記述する．作成方法については，libedb/auth0.c のedb− auth− make− pp( ) を見よ．
11 行目は EDB 上でスタッフの権限を有するユーザに対するパスフレーズである．staﬀ でないユーザの場合には記述しない．(staﬀ は任意の情報の閲覧，書換が可能である)

12 行目は EDB 上で全ての権限を有する Odin に対するパスフレーズである．Odin でないユーザの場合には記述しない．(Odin はテー
ブル定義の改変が可能である．データベース全体に 1 人か 2 人いればよい)
上述した 3 つのファイルの形式は，データベースダンプコマンド (edb− dump) が出力するファイルの形式に等しい．したがって，初期情報登録はデータベースリストアコマンド (edb− restore) で行う．
必要最小限の初期登録情報．

edb− database.database-table.dump
全てのテーブルの定義情報．

EDB で利用しているテーブル定義は edb− database.database-table.dump．ただし，このファイル中には実運用において割り当てられた EID および EOID が含まれているため，EID, EOID を残したまま他のデータベースの運用に用いるのは得策ではない．(つまり，EID, EOID は振り直した方がよい)
edb− database.database-tuple.dump
少なくとも 1 人の個人情報．

edb− database.authentication.dump
上記の edb− database.database-tuple.dump に登録した個人の認証情報．この認証情報には，staﬀ, Odin のパスフレーズを与えておく．

第 IV 部EDB/Dwarf について

116

第 11 章 Dwarf

11.1

Dwarf の配置

本頁では，EDB のデータベース登録情報の管理において重要な役割を担っている Dwarf (edb− dwarf) について述べる．

edb− dwarf はオリジナルデータベースを除く全てのレプリカデータベース毎に配置される．言い換えると，一つの edb− dwarf プロセスは一つのレプリカデータベースを担当する．(オリジナルデータベースに対して起動する必要はない; オリジナルデータベースは RDB をもたないため)
すなわち，• 参照するデータベース: <source-db>• 担当するデータベース: <db>の場合には，edb− dwarf は以下のような接続の元に配置される．
参照するデータベース<source-db>→ edb− dwarf →担当するデータベース<db>

11.2

Dwarf のコマンドライン引数(Usage) edb# edb− dwarf [options] <dst-db> <src-db>• <dst-db>…Dwarf が担当するデータベースのパス名．
• <src-db>…Dwarf が参照するデータベースのパス名．
データベースのパス名はホスト名:ポート番号:データベース名の形式で指定する．Dwarf が起動するホストとデータベースサーバが別のホストでも問題はない．ただし，<dst-db>については，デー
タベースの書き換え権限が必要である．

第 11 章 Dwarf

117• options– -fastedb− dwarf のアイドリングファクタを 0 にセットする．
アイドリングファクタ (idling factor) は，edb− dwarf の実行速度を決定するものである．
複数個のレプリカデータベースを蓄積するサーバにおいては，データベースの個数だけ edb− dwarf が起動されているはずである．この状態でデータベースに登録が行われると，一斉に edb− dwarf の開始される．故に，通常のデータベース参照の遅延を招くことになる．アイドリングファクタは，edb− dwarf が行う 1 単位の処理に対しての何単位のアイドリング時間をもたせるか指定する．
アイドリングファクタ: 0 が最速である．

– -all– -latest– -university– -public
Dwarf の動作モードを指定するバラメータ．省略時は -all ．

11.3

Dwarf へのコマンド送信バックグラウンドで実行されている Dwarf の調整を行うために，コマンド受信が用意されている．
コマンドの送信の仕方は，• TERM シグナル…Dwarf の停止．
edb# kill -TERM ‘cat /usr/local/edb/var/run/<db>.pid‘• HUP シグナル…コマンドの送信．
edb# echo "command" > /usr/local/edb/var/cmd/<db>.cmd
edb# kill -HUP ‘cat /usr/local/edb/var/run/<db>.pid‘
HUP シグナル経由で送信できるコマンド (command) は現在以下のとおり．
• stop…edb− dwarf を終了させる．(TERM シグナルと同じ動作)• terminate…edb− dwarf を終了させる．(TERM シグナルと同じ動作)

第 11 章 Dwarf

118• notify…<src-db>における NOTIFY の動作をエミュレートする．Dwarf を停止して何らかの作業を行った場合に，作業期間内に発生した NOTIFY を受け取らない (すなわち，情報の更新通知を受け取らない) ことになる．Dwarf を起動後，必要ならば NOTIFY を自身で発生させる．
• fast…アイドリングファクタ (idling factor) を 1 減らす．
• slow…アイドリングファクタ (idling factor) を 1 増やす．
• rotate…ログファイルを回転させる．
• adjust…全ての登録情報において Adjust(XMLDB から RDB への情報の展開作業) を再実行する．「adjust テーブル名」のようにテーブル名を指定するとそのテーブルに属する情報のみを対象とする．
(注) edb− dwarf が行う adjust 動作と edb− adjust が行う adjust 動作は異なる．
edb− adjust が行う adjust 動作は，単に XMLDB から RDB への 1 対 1 の展開であり，また，情報の参照記述や階層構造を展開しない．(これは，edb− adjust が実行される時点では，RDB に全ての情報が準備されていないことによる．) これに対して，edb− dwarf が行う adjust 動
作はそれらの展開も行う．したがって，データベースを構築し直したときには，edb− adjust を実行した後に，edb− dwarf を起動し，adjust
コマンドを送信して，RDB への情報の展開を再実行するべきである．

11.4

データベース間 (src-db → dst-db) の情報転送

Dwarf は動作モードにより下記のように情報の反映の仕方を変更する．
• -all…<src-db>の全ての内容を<dst-db>へ反映させる．
• -latest…<src-db>の中で– 各情報の最新の内容 (履歴の最後の部分) のみを<dst-db>へ反映させる．

• -university…<src-db>の中で– 各情報の最新の内容 (履歴の最後の部分) のみ– 有効な情報のみ– 学内に公開可能な内容のみ

第 11 章 Dwarf

119

を<dst-db>へ反映させる．
ただし，<dst-db>の XMLDB には補間した XML 表現の情報を蓄積する．

• -public…<src-db>の中で– 各情報の最新の内容 (履歴の最後の部分) のみ– 有効な情報のみ– 学外に公開可能な内容のみを<dst-db>へ反映させる．
ただし，<dst-db>の XMLDB には補間した XML 表現の情報を蓄積する．

• 補間した XML 表現
EDB で定義されている情報の XML 表現において，
1. エレメント属性 mapto による EID の指定．
2. エレメント内の<edb:english>, <edb:japanese>, <edb:pronounce>の記述．
は排他的である．補間した XML 表現では，1. が記述されている場合でも，冗長な情報として 2. を含める．また，情報全体のマップが行われている場合は，マップ先の情報の記述を冗長な表現として読み込む．
補間された XML 表現においても mapto は保存されている．

11.5

担当データベース (dst-db) 内での XMLDB → RDB の情報の展開．

Dwarf は XMLDB に登録された XML 記述の内容を，リレーショナルデータベース (RDB) に展開する．
この展開に際して，• ○リレーショナルデータベース上では，mapto を全て補間したテキストが登録される．
参照形式 (mapto) で登録されている記述においてもテキストによる検索が可能とするため．

• ○【組織】情報のように階層化構造が定義されている情報に関しては，階層化の上位への参照の拡張を行う．
例えば，– 徳島大学第 11 章 Dwarf

120– 工学部.(上位) = 徳島大学の EID– 電気電子工学科.(上位) = 工学部の EIDのように情報が定義されている場合，XML 表現では直上の上位組織のみが mapto で記述されているのみであるが，これを RDB に展開する際に，– 電気電子工学科.(上位) = 工学部の EID, 徳島大学の EIDのように拡張する．
この拡張は，RDB の種たる目的が検索であり，検索の速度を意識してのことである．

第V部

EDB/PKI

122

第 12 章 概要

12.1

EDB/PKI の目的• 公開鍵認証システムの構築• EDB 利用者への公開鍵認証システムについての啓蒙と利用者の習熟

12.2

EDB/PKI の運営・特徴• ○ Private CA (Certiﬁcate Authority) での運営
– 一般にオーサライズされた CA の運用には膨大な資金が必要．
– 利用範囲を学内 (構成員) に限定するならば公的 CA と同等のサービスを提供できる．
• ○ 教職員を対象に認証システムを提供．
– 学生については高度情報化基盤センターの管轄．
– EDB に蓄積された教職員の情報を有効に活用する．
• ○ 異種認証システムとの連係– EDB の登録情報をベースに LDAP, RADIUS, Kerberos などの認証システムの登録情報を作成する．
– 認証だけでなく，LDAP 等へのディレクトリ情報，DNS/BIND 等の登録情報も提供する．
– 個人 (クライアント) と DNS の情報 (サーバ) の認証情報を管理，矛盾のない公開鍵基盤を形成する．

第 12 章 概要

12.3

123

EDB/PKI での制約事項• ○ 証明書の発行– 証明書発行の対象は，EDB に対応する情報が登録されていなければならない．
– 当面，証明書発行の対象は，【個人】，【擬人】，【ホスト】情報とする．
– EDB の登録情報 (個人，擬人，ホスト) に対して各 1 通の証明書を発行する．(複数は発行しない．)• ○ 証明書の属性– 個人 (擬人) の証明書の CN (CommonName) は，「S’ 個人 (擬人) 情報の EID’」とし，認証システムに際してはこれがアカウント名となる．(先頭の ‘S’ はソースレベルで変更可能)– ホストの証明書の CN は，いわゆる FQDN (Fully Qualiﬁed Domain Name) とする．FQDN は IP アドレスが直接関係づけられていない ALIAS(別称) でも構わない．
• ○ 免責事項– 一般の PKI に対して，EDB/PKI の公開鍵基盤の信頼性 (証明書発行対象が正しく証明書を利用しているかの検査機構，秘密鍵の保管形態等の保障，個人やサーバ管理者に対する啓蒙) は劣っている．EDB/PKI の提供する公開鍵基盤を過信する事の無いよ
うにお願いしたい．

124

第 13 章 実装

13.1

site.h#define EDB− MANAGE− PKI/* EDB/PKI において CA の機能を有効にする際に定義する */#define EDB− PKI− DIR EDBDIR "/libdata/pki"/* EDB/PKI のデータをおくディレクトリ */#define EDB− PKI− RSA− BITs 2048/* RSA 鍵の長さ */#define EDB− PKI− CERTIFICATE− DAYs 3650/* 証明書の有効日数 */#define EDB− PKI− DN− C "JP"/* DN の Country */#define EDB− PKI− DN− ST "Tokushima"/* DN の State */#define EDB− PKI− DN− L "Tokushima City"/* DN の City */#define EDB− PKI− DN− O "The University of Tokushima"/* DN の Organization */#define EDB− PKI− DN− OU NAME− OF− DB

13.2/* DN の OrganizationalUnit */ディレクトリ構造
EDB− PKI− DIR/
root.crt
CA/.rnd/* ルート証明書 *//* 乱数ファイル */ca.lock/* CA のロックファイル */cacert.pem/* CA の証明書 */etc/
xpextensions/* 拡張オプション定義ファイル */index.txt/* 発行済み証明書のインデックス */index.txt.attr
newcerts//* CA が発行した証明書を保存するディレクトリ */第 13 章 実装

125
newkeys/
newreqs//* CA が作成した秘密鍵を一時的に格納するディレクトリ *//* 証明書要求を入れるディレクトリ */openssl.cnf
private//* CA 用の設定ファイル */cakey.pem/* CA の秘密鍵 */pass/* CA の秘密鍵の復号鍵 */serial/* 発行証明書のシリアル */

13.3

pki.h
#define EDB− PKI− CA− DIR EDB− PKI− DIR "/CA"/* CA のデータを管理するディレクトリ */#define EDB− PKI− CA− LOCKFILE EDB− PKI− CA− DIR "/ca.lock"/* CA のロックファイル */#define EDB− PKI− CA− CERT− INDEX EDB− PKI− DIR "/CA/index.txt"/* 発行済み証明書のインデックスファイル */#define EDB− PKI− OPENSSL− PATH "/usr/bin/openssl"/* openssl コマンドの場所 */ca.lock をユーザ edb がロックできる状態にしておくこと．このファイルにより排他的な CA の処理を行う．なお，ca.lock が存在しない場合，edb− pki− IamCA は負論理を返す．
CA が発行する証明書は以下の 3 種類がある．
#define EDB− PKI− CERTIFICATE− MODE− USER 0#define EDB− PKI− CERTIFICATE− MODE− CLIENT 1#define EDB− PKI− CERTIFICATE− MODE− SERVER 2
openssl を利用して証明書を発行する際の引数を以下のマクロで定義している．
#define EDB− PKI− CERTIFICATE− EXT− USER "-extensions user− ext -extfile " EDB− PKI− CA− DIR "/etc/xpextensions"#define EDB− PKI− CERTIFICATE− EXT− CLIENT "-extensions user− ext -extfile " EDB− PKI− CA− DIR "/etc/xpextensions"#define EDB− PKI− CERTIFICATE− EXT− SERVER "-extensions user− ext -extfile " EDB− PKI− CA− DIR "/etc/xpextensions"
EDB/PKI では，ルート証明書と CA 証明書を下記のように別々に定義しているが，EDB/PKI の CA がルートでない場合には，これらの内容を調整する．
#define EDB− PKI− ROOT− CRT EDB− PKI− DIR "/root.crt" #define EDB− PKI− CA− CRT EDB− PKI− DIR "/CA/cacert.pem"
Structure — X.509 証明書の情報

EDB− PKI− X509− M− INFO

第 13 章 実装

126

Synopsis :struct EDB− PKI− X509− M− INFO

*x509− m ;Description :Structure — DN 情報の詳細

EDB− PKI− X509− DN− INFO

Synopsis :struct EDB− PKI− X509− DN− INFO

*x509− dn ;Description :char *C;
char *ST;char *L;
char *O;
char *OU;
char *CN;char *Email;

Structure — DN 情報

EDB− PKI− X509− NAME− INFO
struct EDB− PKI− X509− NAME− INFO

Synopsis :struct EDB− PKI− X509− NAME− INFO

*name ;

typedef struct EDB− PKI− X509− NAME− INFO

*EdbPkiNameInfo ;Description :char *DirName;
struct EDB− PKI− X509− DN− INFO DN;
Structure — X.509 証明書の情報

EDB− PKI− CERTIFICATE− INFO
struct EDB− PKI− CERTIFICATE− INFO

Synopsis :struct EDB− PKI− CERTIFICATE− INFO

*x509− info ;typedef struct EDB− PKI− CERTIFICATE− INFO
Description :struct EDB− PKI− X509− M− INFO M;
struct EDB− PKI− X509− NAME− INFO I;
struct EDB− PKI− X509− NAME− INFO S;
int mode;*EdbPkiCertiﬁcateInfo ;第 13 章 実装

13.4

関数

13.4.1

CA 管理

127

Function — CA の機能保持

edb− pki− IamCA

Synopsis :intedb− pki− IamCA( EdbContext ec )Description :CA の機能が実装されているかを調べる．具体的には，• EDB− MANAGE− PKI が定義された状態でコンパイルされた実行ファイルがインストールされている．
• CA のロックファイルが存在し，Read/Write 許可されている．
を調べる．
Return Values :CA の機能を持つか否かの論理値．
Function — CA のロック/アンロック

edb− pki− CA− lockedb− pki− CA− unlock

Synopsis :intedb− pki− CA− lockint
edb− pki− CA− unlock( EdbContext ec )( EdbContext ec )Description :証明書発行手続きを排他的に行うためのロック処理．

Function — CA の管理関数
Synopsis :Linkedb− pki− CA− certiﬁcate− index( EdbContext ec )intedb− pki− CA− save− certiﬁcate− request( EdbContext ec, char *, char *, int )intedb− pki− CA− make− certiﬁcate− request( EdbContext ec, char *, char * )char *

edb− pki− CA− certiﬁcate− index
edb− pki− CA− save− certiﬁcate− requestedb− pki− CA− make− certiﬁcate− requestedb− pki− CA− make− certiﬁcateedb− pki− CA− output− PKCS12
edb− pki− CA− unlink− keyﬁleedb− pki− CA− revoke− certiﬁcateedb− pki− CA− certiﬁcate− serial

第 13 章 実装

128

edb− pki− CA− make− certiﬁcate( EdbContext ec, char *, char *, int )voidedb− pki− CA− output− PKCS12( EdbContext ec, char *, char *, FILE * )voidedb− pki− CA− unlink− keyﬁle( EdbContext ec, char * )intedb− pki− CA− revoke− certiﬁcate( EdbContext ec, char * )char *
edb− pki− CA− certiﬁcate− serial( EdbContext ec )Description :13.4.2

その他

Function — 証明書の情報を出力する

edb− pki− print− certiﬁcate− S− DN
edb− pki− print− certiﬁcate− ex
edb− pki− print− certiﬁcateedb− pki− print− certiﬁcate− infoedb− pki− check− certiﬁcate

Synopsis :intedb− pki− print− certiﬁcate− S− DN
int
edb− pki− print− certiﬁcate− exint
edb− pki− print− certiﬁcate( EdbContext, char *, Doc )( EdbContext, char *, Doc )int
edb− pki− print− certiﬁcate− info
int
edb− pki− check− certiﬁcate( EdbContext, char *, Doc )( EdbContext, EdbPkiCertiﬁcateInfo, Doc )( EdbContext, char * )Description :Function — タプルに証明書を発行できるかどうかを調べる
Synopsis :EdbColumnInfo
edb− pki− tuple− certiﬁable
Description :( EdbContext, EdbTupleInfo )edb− pki− tuple− certiﬁable

第 13 章 実装

129

Function — タプルの証明書を取得する

edb− pki− tuple− certiﬁcate

Synopsis :char *
edb− pki− tuple− certiﬁcate( EdbContext, EdbTupleInfo )Description :Function — 証明書情報を開放する

edb− pki− certiﬁcate− info− free

Synopsis :voidedb− pki− certiﬁcate− info− free

( EdbContext, EdbPkiCertiﬁcateInfo )Description :Function — 証明書情報を開放する

edb− pki− certiﬁcate− info

Synopsis :EdbPkiCertiﬁcateInfoedb− pki− certiﬁcate− info

( EdbContext, char * )Description :Function — SSL の環境変数から証明書情報を作成する

edb− pki− SSL− env− info

Synopsis :EdbPkiCertiﬁcateInfoedb− pki− SSL− env− info

( EdbContext )Description :Function — 証明書情報を比較する

edb− pki− certiﬁcate− info− equal

Synopsis :intedb− pki− certiﬁcate− info− equal( EdbContext, EdbPkiCertiﬁcateInfo, EdbPkiCertiﬁcateInfo )Description :Function — CN から EID を得る

edb− pki− person− CN2EID
edb− pki− personiﬁcation− CN2EID

第 13 章 実装

130

Synopsis :eid− tedb− pki− person− CN2EID( EdbContext, char * )eid− tedb− pki− personiﬁcation− CN2EID
Description :( EdbContext, char * )第 VI 部EDB と外界

132

第 14 章 外部からの情報参照

14.1

WWW/CGI

14.1.1閲覧

EDB の外部のメディアから，EDB の登録情報を閲覧する場合には，当該箇所にhttps://web.db.tokushima-u.ac.jp/cgi-bin/edb− browse?EID=eidのリンクを埋め込んでおく．ただし，eid は閲覧したい情報の情報識別子 (EID) である．

eid に指定できるのは，テーブルを含めた情報の有効な EID または 0 である．0 を指定した場合には，閲覧のトップ頁が表示される．
https://web.db.tokushima-u.ac.jp/cgi-bin/edb− browse?EID=0
EID によらず，テーブル情報を XML 名で指定したい場合には，
https://web.db.tokushima-u.ac.jp/cgi-bin/edb− browse?XN=xmlnameのように指定する．ただし，xmlname はテーブルの XML 名である．

https://web.db.tokushima-u.ac.jp/cgi-bin/edb− browse?XN=person
https://web.db.tokushima-u.ac.jp/cgi-bin/edb− browse?XN=article
これは EID を指定するのと同じであるが，XML 名の方が識別性が高いのでお薦めである．なお，この方法はタプル情報には利用できない．

14.1.2【画像】情報の参照

EDB に登録された【画像】情報を画像として参照するためには，
https://web.db.tokushima-u.ac.jp/cgi-bin/edb− browse?ACT=PICTURE&EID=eid

第 14 章 外部からの情報参照のリンクを<img src="...">に埋め込んでおく．ただし，eid は参照したい【画像】情報の情報識別子 (EID) である．
なお，【画像】データを指定したフォーマットで取り出したい場合には，

https://web.db.tokushima-u.ac.jp/cgi-bin/edb− browse?ACT=PICTURE&EID=eid&D− ARG1=fmtのように，出力フォーマットを指定する．現在，fmt に指定できるのは，• JPEG ... JPEG/JFIF format• PNG ... Portable Network Graphics format• EPS ... Encapsulated PostScript format
である．

14.1.3

編集

EDB の外部のメディアから，EDB の編集プログラムを起動する方法．
https://web.db.tokushima-u.ac.jp/cgi-bin/edb− edit?ACT=EDITOR− OPEN&EID=eidのリンクを埋め込んでおく．ただし，eid は編集したい情報の情報識別子 (EID) である．

eid に指定できるのは，テーブルを含めた情報の有効な EID である．
もちろん，編集を行うことが出来るのは EDB にログインできるユーザで，かつ対象の情報が編集可能なユーザに限定される．
新規に情報を作成する場合には，

https://web.db.tokushima-u.ac.jp/cgi-bin/edb− edit?ACT=TUPLE− NEW&EID=eidとする．eid はテーブルの EID であり，XN で指定することが出来る．

https://web.db.tokushima-u.ac.jp/cgi-bin/edb− edit?ACT=TUPLE− NEW&XN=xmlname
ACT=TUPLE− NEW では引数 D− ARG1 を指定出来る．引数 D− ARG1 は，• 整数 ⇒ 新規情報を作成する際に内容をコピーする情報の EID．EID は xmlname に属する情報でなくてはならない．
• 整数以外の文字列 ⇒– 「<?xml version="1.0" encoding="utf-8"?>」で始まる文字列．⇒ XML で記述された情報全体．

133

第 14 章 外部からの情報参照

134– 「<edb:base 」で始まる文字列．⇒「<edb:base ...」以降の XML 記述．ただし，最期の「</edb:xmlname>」は含まれない．
– 上記以外の文字列．⇒ base より後の XML 記述．ただし，最期の「</edb:xmlname>」は含まれない．
と解釈される．
初期エディタ画面をどのモードで起動するかは，以下で指定できる．

• EDITOR− MODE
– EDITOR− MODE=ENTRY … 入力欄なし (ユーザ操作で，モードを選択する)– EDITOR− MODE=ALL … 全項目一括入力モード– EDITOR− MODE=COLUMN … 項目モード
項目モードを選択したときには，COL=xmlname で対象カラムを指定する．

14.2

whois/TCP

外部からバッチ的に情報にアクセスできるように whois/TCP による接続が可能である．

14.3

EDB/Gate

14.3.1

Motivation

EDB へのアプリケーションレベルでのコネクション指向アクセスインタフェースを提供する．

14.3.2

接続方法

以下に，EDB/Gate への接続に必要な諸元を示す．EDB/Gate はクライアントサイドのアプリケーションからの接続を想定しているが，接続例のようにマニュアルでも接続は可能である．

• db.db.tokushima-u.ac.jp : 44443– SSL(SSLv3/TLSv1) automatic authentication mode.
– ユーザの個人証明書を提示し，検証が成功し，かつ自動ログイン設定されている場合．
– プライマリデータベースを参照する．

第 14 章 外部からの情報参照

135– サービスエリア: 0.0.0.0/0– 接続コマンド例:% openssl s− client -cert your-certificate.pem -key your-certificate-key.pem -CAfile CA-certificate.pem -quiet -nbio-connect db.db.tokushima-u.ac.jp:44443• db.db.tokushima-u.ac.jp : 44443– SSL(SSLv3/TLSv1) connection mode.
– ユーザの個人証明書を提示しない場合．
– ログインした場合には，プライマリデータベースを参照する．ログインするまでは，公開用 (学内，学外) のデータベースを参照
する．
– サービスエリア: 150.59.0.0/16– 接続コマンド例:% openssl s− client -CAfile CA-certificate.pem -quiet -nbio -connect db.db.tokushima-u.ac.jp:44443• db.db.tokushima-u.ac.jp : 44080– without authentication.
– Referencing the university/public readable database as backend. So you can get only information which is readable fromuniversity or world wide.
– サービスエリア: 150.59.0.0/16– 接続コマンド例:% telnet db.db.tokushima-u.ac.jp 44080

14.3.3Character Encoding

全ての通信データは，Unicode (UTF-8 encoding) で表現された文字列で行われる．

14.3.4

Scheme of Request/Response

EDB/Gate はクライアントサイドのアプリケーションとの接続を想定しているので，telnet のようなコマンドプロンプトは提示しない．
その代わりに，クライアントからのリクエストを request-id によって管理し，レスポンスにそれらを付加して応答を行う．
リクエストの発行方法と，レスポンスの様式は以下に示す通り．

第 14 章 外部からの情報参照○ <Request Form>

COMMAND arg1 [arg2 [arg3 ...]]OPTION1 arg1 [arg2 [arg3 ...]]OPTION2 arg1 [arg2 [arg3 ...]]...
(insert a blank line: blank line means the end-of-request)○ <Response Form>— BEGIN-OF-RESPONSE (request-id)
request-id(TAB) Status: 3-digits-code comment
request-id(TAB) result-information1
request-id(TAB) result-information2
request-id(TAB) ...
request-id(TAB) (blank)
request-id(TAB) content-of-response1
request-id(TAB) content-of-response2
request-id(TAB) content-of-response3
request-id(TAB) content-of-response4
request-id(TAB) ...
— END-OF-RESPONSE (request-id)○ リクエストのブロックの終了は空行 (改行コードのみの行) で示す．

EDB/Gate は空行が現れたとき，コマンドの解析と実行を開始する．
○ リクエストは，レスポンスの終了を待たなくても，発行することができる．
ただし，ソケット接続においてブロックされないことが必要．
○ EDB/Gate からのレスポンスについて

EDB/Gate からのレスポンスは，

136

第 14 章 外部からの情報参照

137— BEGIN-OF-RESPONSE (request-id)— END-OF-RESPONSE (request-id)
でブロック化されて返送される．
このブロック内に含まれる行には，

1. 行頭の ‘!’ はその行が注釈である事を示す．
2. 行頭に request-id(TAB) が記述されている行があり，前者は EDB/Gate のデバッグ用もしくは，内部処理を確認するためのものであるので，無視する．
後者は更に，

1. レスポンスヘッダ
2. コンテンツに分けられ，これらは，

request-id(TAB)のみの行で区切られる．レスポンスヘッダにはリクエストの成功の可否やコンテンツの長さなどが示される．コマンドが何らかの情報を取得する場合には，コンテンツの場所において情報が返送される．
インタラクティブにコマンドとレスポンスを繰り返す場合には，request-id のフィールドに書かれている ID を無視することも可能であるが，コマンドを同時に発行するような場合には，ID 部分によりレスポンスを選別した後，各々のレスポンスの内容を解析する必要がある．
なお，通常 request-id はサーバ側で自動的に生成される．1 ずつ増える値となるが，クライアント側から request-id をリクエストのオプションで指定する事も可能である．

Request-ID: request-id(‘request-id’ は正の整数である事)
request-id を指定すると，それ以降の値は指定した request-id に続くものになる．

第 14 章 外部からの情報参照

14.3.5

Command Summary

Connection Management
LOGIN — データベースにログインする．(EDB/SSL mode only)(書式) LOGIN user-eid passphrase(返答) (none)
SLOGIN — データベースにスタッフ権限でログインする．(LOGIN state only)(書式) SLOGIN passphrase(返答) (none)
SLOGOUT — スタッフ権限からログアウトする．(STAFF state only)(書式) SLOGOUT(返答) (none)
ENV — コネクション状態を表示する．
(書式) ENV(返答) environment variables and their values
VERBOSE — VERBOSE レベル (≥ 0) の設定．
(書式) VERBOSE[level](返答) (none)
WHOAMI — 接続しているユーザの情報を得る．
(書式) WHOAMI(返答) 形式 1
QUIT — コネクションを切断する．
(書式) QUIT(返答) (none)138第 14 章 外部からの情報参照

139

HELP — ヘルプメッセージを表示する．
(書式) HELP [cmd](返答) summary of command usage
BEGIN — トランザクションを開始する．
(書式) BEGIN(返答) (none)
END — トランザクションを終了する．
(書式) END(返答) (none)

Retrive Information
TABLE — テーブルのリストを得る．
(書式) TABLE

テーブルの全リストを得る．

(返答) 形式 2(書式) TABLE regular(書式) TABLE auxiliary

標準テーブルのリストを得る．
補助テーブルのリストを得る．

AGE — 全情報について最大の EOID を得る．
(書式) AGE(返答) EOID(書式) AGE eid
eid で示される情報について，参照まで含めた EOID の最大値を得る．この値が増加している場合には，補間後の情報 (cXML;
completed XML) の記述が変更された可能性がある．
INFO — 情報得る．
(書式) INFO MAX(eid)第 14 章 外部からの情報参照

140(返答) EID
全情報について EID の最大値を得る．

(書式) INFO MAX(eoid)(返答) EOID
全情報について EOID の最大値を得る．

GET — テーブル/タプルの XML 形式の情報を得る．
(書式) GET eid-of-tuple [eoid]
eid-of-tuple で指定された情報の XML 形式の登録情報を得る．eoid が指定された場合には，過去の変更履歴中の XML 形式の情報を得る．
(返答) 形式 3(書式) GET eid-of-tableeid-of-table で指定されたテーブルの XML 形式の定義情報を得る．
(書式) GET xmlname
xmlname で指定されたテーブルの XML 形式の定義情報を得る．
FRESH — 最近に更新された情報のリストを得る．
(書式) FRESH seconds
現在から遡って seconds 秒以内に更新された情報のリストを得る．

(返答) 形式 1
DTD — DTD の定義を得る．
(書式) DTD xmlname
xmlname で指定された DTD の内容を得る．
(返答) DTD の内容
HISTORY — eid で指定された情報の変更履歴のリストを得る．
(書式) HISTORY eid (非 LOGIN 状態では変更履歴は参照できない．最新のもののみ返される．)

第 14 章 外部からの情報参照

141(返答) 形式 1
LOOK — 条件 (condition) による検索を行う．
(書式) LOOK condition(返答) 形式 1
オプションとして Order を利用可．

COUNT — 条件 (condition) に適合する情報の数を得る．
(書式) COUNT condition(返答) 整数値
TRCOUNT — すべてのテーブルについて eid を参照している情報の数を得る．
(書式) TRCOUNT eid(返答) 形式 1+整数値
TOCOUNT — すべてのテーブルについて eid が所有している情報の数を得る．
(書式) TOCOUNT eid(返答) 形式 1+整数値
TPCOUNT — すべてのテーブルについて eid が権限をもつ情報の数を得る．
(書式) TPCOUNT eid(返答) 形式 1+整数値
TMCOUNT — すべてのテーブルについて eid をマップしている情報の数を得る．
(書式) TMCOUNT eid(返答) 形式 1+整数値
CLASSIFY — 条件 (condition) に適合する情報をカラム (cxn) で分類する．
(書式) CLASSIFY cxn

condition(返答) EID + 整数値 または整数値 + 整数値

第 14 章 外部からの情報参照
オプションとして Mode: ﬁscal を利用可．

OWNERSHIP — テーブル (xmlname) の登録情報においてユーザ (eid) が (直接) 所有する情報のリストを得る．
(書式) OWNERSHIP xmlname eid(返答) 形式 1
REFER — テーブル (xmlname) の登録情報において情報 (eid) が (直接) 参照されている情報のリストを得る．
(書式) REFER xmlname eid(返答) 形式 1
CAPTION — 情報の見出しを得る．
(書式) CAPTION eid(返答) 形式 4
EXPAND — 情報を展開する．
(書式) EXPAND eid(返答) 形式 1

Editting Information(required LOGIN-state)
EDITOR — 情報 (eid) を編集可能なユーザのリストを得る．
(書式) EDITOR eid(返答) 形式 1
NOTIFY — 電子メールによる変更通知の可否を設定する．(required STAFF-state)(書式) NOTIFY immediate(書式) NOTIFY delay(書式) NOTIFY oﬀ

142

第 14 章 外部からの情報参照(返答) (none)
CHECK — XML 記述を検査する．
(書式) CHECK xml(返答) checked status
MODIFY — XML 記述を修正する．
(書式) MODIFY xml(返答) modiﬁed XML
UPDATABLE — XML 記述が更新可能な内容であるかを検査する．
(書式) UPDATABLE xml(返答) checked status
UPDATE — XML 形式で与えられた情報をデータベースに登録する．
(書式) UPDATE xml(返答) 形式 1
CREATABLE — 指定されたテーブルにおいて新規情報作成の可否を得る．
(書式) CREATABLE xn(書式) CREATABLE eid(返答) boolean
WRITABLE — 指定された情報の編集の可否を得る．
(書式) WRITABLE eid(返答) boolean
DELETABLE — 指定された情報の削除の可否を得る．
(書式) DELETABLE eid(返答) boolean143

第 14 章 外部からの情報参照

ISUSER — 指定された情報 (person) がユーザ権限を持つかどうか判定する．
(書式) ISUSER eid(返答) boolean
ISSTAFF — 指定された情報 (person) がスタッフ権限を持つかどうか判定する．
(書式) ISSTAFF eid(返答) boolean
ISODIN — 指定された情報 (person) が ODIN 権限を持つかどうか判定する．
(書式) ISODIN eid(返答) boolean
PASSPHRASE — ログインパスフレーズを変更する．
(書式) PASSPHRASE passphrase(返答) boolean

Miscellaneous
CTEXT — テキスト (text) に文字変換テーブルによる変換を施す．
(書式) CTEXT text(返答) converted text.
CTABLE — 文字変換テーブルをダンプする．
(書式) CTABLE(返答) conversion table.

144

第 14 章 外部からの情報参照

14.3.6145

Format of Response

Format
形式 1

Fieldsrequest-id
request-id

形式 2

EID
EID

EOID
EOID

TABLE-EID
TABLE-EID

xmlname

形式 3

request-id EID EOID TABLE-EID XML
形式 4request-id EID EOID TABLE-EID 短見出し 長見出し
各フィールドは TAB 文字 (U+0009) で区切られる．(フィールド内のテキストには TAB 文字は含まれない．)

14.3.7

Condition• 検索する情報に対する条件式を記述する．
○ 基本形は

XN = {values}
である．
・ XN はテーブルもしくはカラムの XML 名である．
・ 「XN = xntbl . xn1 . xn2 」のように展開し，xntbl をテーブルの XML 名とする．
・ 結果はカラムの値と条件の値 (values) が合致する情報の EID のリストとなる．
・ values に記したどれか一つの値と適合する場合に EID のリストに追加される．(OR 結合)
・ デフォルトのロジックを変更したい場合には，

XN = NOT{values}
XN = AND{values}
XN = OR{values}
XN = NAND{values}
XN = NOR{values}
XN = XOR{values}
XN = XNOR{values}のように記述する．NOT は NOR と解釈される．XOR, XNOR の場合には値は 2 つでなくてはならない．

第 14 章 外部からの情報参照

146

・ xni (i > 0) では”xmlname[1]”のように要素位置を指定できる．(配列の場合のみ)○ 複数のカラムについて条件を指定したい場合にはXN0 .{ XN1 = {values1 }XN2 = {values2 }[...] }と記述する．
・ 一般に，XN1 , XN2 は XN0 に含まれるカラムである．
・ これらの条件式は AND で結合される．
・ デフォルトのロジックを変更したい場合には，XN0 .NOT{ XN1 = {values1 }XN2 = {values2 }[...] }

XN0 .AND{ XN1 = {values1 }XN2 = {values2 }[...] }

XN0 .OR{ XN1 = {values1 }XN2 = {values2 }XN0 .NAND{ XN1 = {values1 }[...] }

XN2 = {values2 }XN0 .NOR{ XN1 = {values1 }XN2 = {values2 }XN0 .XOR{ XN1 = {values1 }XN2 = {values2 } }XN0 .XNOR{ XN1 = {values1 }[...] }[...] }

XN2 = {values2 } }のように記述する．NOT は NAND と解釈される．XOR, XNOR の場合には条件は 2 つでなくてはならない．
・ XN1 , XN2 では，‘@’ を用いて，@.xn1 , @.xn2 のように表現することができる．
・ カラム (@.xn1 ) が配列の場合には，

xntbl .{ @.xn1 .xn2 = {values2 } @.xn1 .xn3 = {values3 } }と

xntbl .xn1 .{ @.xn2 = {values2 } @.xn3 = {values3 } }は異なる結果になりうる可能性があることに注意せよ．
○ サブカラムに条件をつけた配列の条件を指定したい場合にはXN0 .{ XN1 = {values1 } }={values2 }と記述する．すなわち，

xntbl .xn1 .{ @.xn2 = {values2 } } ={values1 }第 14 章 外部からの情報参照のような記述では，

xntbl .xn1 [k] = {values1 }xntbl .xn1 [k].xn2 = {values2 }が同時に成り立つ k が存在する時，真となる．xn1 が配列でない場合には，

xntbl .{@.xn1 = {values1 } @.xn1 .xn2 = {values2 } }と書いても同じ結果となる．
○ xnx …カラム名 (XML 名)・ カラムが配列の場合には，@.column[x] : 配列の添字 =x@.column[x:] : x≤ 配列の添字@.column[:y] : 配列の添字 ≤y@.column[x:y] : x≤ 配列の添字 AND 配列の添字 ≤yで範囲を指定することが可能．x, y は正整数．
・ 特別なカラム名:

EID … この情報の EID
REF … この { 情報—カラム } が参照している他の情報の EID のリスト
PERM … この { 情報—カラム } が権限委譲している他の情報の EID のリスト
OWN … この情報の所有者の EID
MAP … この情報がマップしている情報の EID
DATE … カラムの期間限定属性
CAP … この情報の見出し
ALL … この情報の全文
PARENT … 情報が階層構造をなしているときの直上の親○ オペレータ:’=’ … 一致’˜’ … 正規表現による一致

147

第 14 章 外部からの情報参照

148

を指定できる．
・ 正規表現による一致は，対象となるカラムがテキスト型を含みかつ比較される値がテキストが他の場合にのみ行われる．
○ 値リスト: LOGIC{ values }・ LOGIC には，NOT, AND, OR(デフォルト), NAND, NOR, XOR, XNOR を指定できる．
・ LOGIC を省略すると，OR として解釈される．
・ LOGIC に NOT を指定すると，NOR と解釈される．
・ LOGIC に XOR, XNOR を指定する場合には，values は 2 項でなくてはならない．
・ LOGIC が OR であり，かつ，values が単項の場合には，’{’ と’}’ を省略することができる．
○ 値: valuex
・ 値リストを { value1 value2[...] } と記述した場合，それぞれの valuex には以下の記法を用いることができる．

!valuex …単項の NOT 演算．
˜valuex …正規表現による比較 (テキストの比較のみ)．
両方を使う場合には，!˜valuex の順に指定する．
・ 指定する値の型は左辺から抽出可能なものでなくてはならない．

value の型

指定形式

存在

ANY

説明
何かがあるとき．リレーショナルデータベースにおいて比較の対象となるものが存在するときに真値をとる．!ANY は使用不可．

EID
EID
EID

\e{NULL}, \E{NULL}\e{eid}\E{eid}

参照なし．

EID
テキスト

サブクエリ

展開あり．

”string”

登録内容に等しいテキスト．MTEXT のように左辺から複数のテキス

展開なし．
展開あり．

トを抽出可能な場合には，(英),(日),(読) のいずれかに等しいテキスト
数値
数値
年月日

”val”
”val1 val2 ””date”
年月日”from-date to-date”
等を範囲で検索する場合には登録内容に等しい数値．
もしくは登録内容を含む範囲．
登録内容に等しい月日．
登録内容を含む期間．

INTEGER，DATE

第 14 章 外部からの情報参照

column=”val1 val2 ”と指定する．val2 が省略された場合，完全一致とみなす．

DATE は西暦年月日 (YYYYMMDD; 年 4 桁, 月 2 桁, 日 2 桁) で指定する．
• 条件式の例○ 【著作】の [著者] で検索．

article.author=\E{12345}
article.author={ \E{12345} \E{12346} }article.author=”Tokushima Taro”
article.author˜”Tokushima Taro”
article.author={ \E{12345} \E{12346} ”Tokushima Taro” }○ 【著作】の第 1[著者] で検索．

article.author[1]={ \E{12345} \E{12346} }article.author[1]=”Tokushima Taro”○ 【著作】の第 1,2,3[著者] で検索．

article.author[:3]={ \E{12345} \E{12346} }article.author[:3]=”Tokushima Taro”○ 【著作】の第 2,3[著者] で検索．

article.author[2:3]={ \E{12345} \E{12346} }article.author[2:3]=”Tokushima Taro”○ 【著作】を組織 {23456} に属している [著者] で検索．

article.author={ person.aﬃliation=\E{23456} }○ 上記に [発行年月日] の条件をつけて検索．

article.{@.author={ person.aﬃliation=\E{23456} } @.date=”20040000 20049999”}○ 【組織】を期間限定属性で検索

organization.DATE=”20050401”

149

第 14 章 外部からの情報参照

14.3.8150

Options

Order — 排列に利用するカラムを指定する．
Order: column1 column2 ...
先に書いたカラムが優先される．カラム名の前に’ !’ を記すと逆順となる．

14.3.9Status Code

2xx
3xx

肯定的応答

処理が正常に終了したことを示す．

肯定的応答

処理の過程で何らかの修正がなされたことを示す．

4xx
5xx

否定的応答

要求にエラーがあったことを示す．

サーバのエラー

サーバ側で不可避なエラーが生じたことを示す．

14.3.10

Transaction

EDB/Gate のコマンドにはトランザクションの開始 (BEGIN) と終了 (END) が用意されているが，これは，バックエンドデータベースの
SQL における”BEGIN”, ”END”に 1 対 1 で対応していない．以下の点で異なる．
• EDB/Gate でトランザクションに入っていなくても，EDB/Gate では各コマンド毎にバックエンドデータベースのトランザクション
を開始，終了する．

• EDB/Gate でトランザクションに入っている場合には，バックエンドデータベースのトランザクションを維持するが，CHECK, MODIFY,UPDATABLE, UPDATE 等のプライマリデータベース*に影響する/の影響を受ける*コマンドにおいては，別にバックエンドデータ
ベースへのチャネルを開いてトランザクションを開始し，処理を行うことがある．

14.3.11

Noticeサーバのリソースを節約するため，アイドル状態が約 60 分以上経過すると自動的に EDB/Gate は接続を切断する．

151

第 15 章 外部への情報参照

152

第 16 章 外部との情報交換
EDB のようなシステム間で，データのやりとりを実現することは重要な課題である．しかし，一般に各々のシステムは，独自のデータ管理様式をもっており，システム間でのデータの移動は困難である．このような問題は，個々のシステムのデータ管理機能の高度化させる程難しくなる．
本章では，EDB に限らずシステム間のデータ移動に関してのガイドラインを提案する．

16.1

まず最初に考えること

データの移動に際して，情報が変質してしまうことを避ける．
データの移動に際して情報量が減少する可能性を可能な限り回避する．

16.2

基本事項

大昔には，バイナリによるデータ表現が盛んであった．バイナリによる表現は，• データ量 (バイト数) が節約できる．
• 誤差が少ない．
というメリットがある．半面，• システムに依存しやすい．
というデメリットがある．しかし，今日に至ってはハードディスクやその他のメディアの容量が飛躍的に大容量化しているため，もはやデー
タ量を節約する必要はない．また，誤差についても桁数を十分大きくとることにより解消できる．
テキスト表現によるメリットは，• データの可読性に富む．

第 16 章 外部との情報交換

153• データの操作が比較的安易に行える．
• システムハードウェアに依存しない．
という点にある．したがって，システム間のデータの流通はテキスト表現で行うことを選択すべきである．
次に，テキストでデータを表現する際に選択すべきコードセットについて考える．
現在，日本語に特化した文字コードセットには，• JIS コード (iso-2022-jp)• シフト JIS コード (Shifted− JIS)• EUC コード (EUC-JP)がある．これらは，微細な部分で可換ではなく，また，他のオーバーセットにもなっていないため，これらの中から標準のコードセットを選ぶことは出来ない．また，近年の国際化に対して，これらと他の言語とのコード間の混在は，コードセットの定義としては可能なものの実際に多国語の言語を処理できるようなアプリケーションは非常に数が少ない．
近年，世界中の言語を統一して一つの文字コードセットにまとめる UnicodeTM コードセットを作成する試みが行われている．Unicode
は，日本語を含め他の国々のコードをシフトイン/シフトアウトせずに表現し得るものであり，近年のアプリケーションプログラムの多くは，多国語のコードセットを混在して利用するよりは，Unicode コードセットによる文字コードの表現を選択している．
ただし，Unicode 文字コードセットが日本語のコードセットを完全に含み得るものかどうかについては否であるが，現時点で利用できる
コードセットの中ではもっとも優れていると思われる．
システム間のデータ移動に関して，Unicode 文字セットの問題点を更に言及しておくと，• 機種依存文字コードエリアの存在．
• 半角/全角文字の両立．
• 複合グリフの問題．
がある．残念ながら，Unicode コードセットにおいても，機種依存文字エリアが作成されている．このエリアは，オペレーティングシステ
ムやアプリケーションが自由に文字を設定できるエリアであるが，システム間のデータの移動には障害になる．したがって，システム間のデータの移動の際には，この機種依存文字エリア• U+0000e000∼U+0000f8ﬀ• U+000f0000∼U+000ﬀﬀd• U+0x00100000∼U+0010ﬀfd

第 16 章 外部との情報交換

154

は利用してはいけない．これらはデータ移動時に無視されることを前提とし，データを送出するシステム側で，• これらの文字を含んでいるかどうかのチェックと代替文字への変換を行うことが必須となる．
また，Unicode 文字セットでは初期の日本語ワードプロセッサの悪しき習慣であるところの，全角文字と半角文字の概念が残っている．すなわち，半角文字の「1」や「A」と全角文字の「１」や「Ａ」が異なる文字コードで表現される．これらの文字の意味的な部分は何ら異なる
ところがないにも関わらず，多くの処理系ではこれらの文字は異なる文字として処理されてしまう．データの移動，とくに数値データの移動を考えたとき，これらの文字の混在は予測しにくい効果を演出するかもしれない．また，何らかの検索処理においてこれらの文字コードの違いは決定的な検索洩れにつながる．ここで，データ移動に際して全角文字が Unicode において半角文字と同一の異なる文字グリフとして捉えられている場合には，• 全角文字から半角文字への変換が行われる可能性を予測して出力データを考えておくべきである．この問題は，複合文字グリフにおいても同様に存在し得る．これらの文字の変換がデータの移動に際して発生したとしても，変換によってデータ処理の手続きが異ならないように，システムはデータを設計すべきである．
エンコーディング方式は UTF-8 が望ましい．理由は，• バイトオーダーの問題が発生しない．
• 文字列検索が可能である．
という点にある．

16.3

CSV (level-0)

現在最も巷に流通しているテキストベースのデータ表現に，CSV (Comma Separated Values) がある．

CSV はテキストによって値を表現し，• 区切り文字としてカンマ (‘,’; U+002c) を利用する．値自体にカンマが含まれる場合には，値全体を二重引用符で囲む．
• 区切り文字として TAB (U+0009) を利用する．
等のバリエーションがある．多くのスプレッドシートアプリケーションは，テキストへの出力には，この形式を利用している．
概ねスプレッドシートアプリケーションが提供する CSV 出力で，CSV データ表現は可能であり，利用者にとってほとんど労力をかけずにデータを出力できる点は有用である．しかし，CSV にて出力されるものが何であるかを付加的な情報として明確に示しておかないと，受け取り側でそれらのデータをどのように解釈すれば良いのかがわからなくなってしまう．

CSV においてデータを EXPORT する場合には，各カラムが何を表しているかが IMPORT 側に伝わるように第 16 章 外部との情報交換

155

column-definition-begin
1, 著者名,1, 説明文
2, 著者名,2, 説明文
3, 著者名,3, 説明文
4, 著者名,4, 説明文
5, 著者名,5, 説明文
6, 題名,1, 説明文...
column-definition-end
CSV-begin
徳島太郎,,,,, 阿波踊りの歴史的意義,,,,徳島次郎,,,,, 藍染め職人と文化交流,,,,CSV-end等のようにカラムの説明文をつけておくことが必要である．

CSV の難点は，• スプレッドシートアプリケーションから CSV 形式にデータを出力する際に発生する情報の損失．
• 1 次元の情報表現に限定される．
等がある．通常スプレッドシート上では，セル間でのデータの投影や計算などが行われるが，CSV への変換の際にそれらの情報はすべて欠落してしまう．また，スプレッドシート自体が各行を 1 次元のデータ並びで表現するものであるため，出力されるデータも 1 次元での表現となってしまう．
様々なデータを考えた場合に，1 次元でのデータ表現は困難を伴う．

16.4

行分割 (レベル-1)

行による分割

16.5
XMLXML (level-2)

第 VII 部

付録

157

第 17 章 FreeBSD5.3 での作業記録 (Dec. 28. 2004)
これは，FreeBSD5.3 + PostgreSQL 7.4.6 をインストールする際の作業記録である．

• FreeBSD5.3 のインストール
1. linux− base-7.1.7• root# mkdir /usr/local/share/cvsup• root# cp /usr/share/examples/cvsup/* /usr/local/share/cvsup/.
• /etc/make.conf に下記を追加– CPUTYPE?=p4; ... Pentium IV– SUP− UPDATE= yes– SUP= /usr/local/bin/cvsup– SUPFLAGS= -g -L 2
– SUPHOST= cvsup.db.tokushima-u.ac.jp– SUPFILE= /usr/local/share/cvsup/standard-supfile– PORTSSUPFILE= /usr/local/share/cvsup/ports-supfile– DOCSUPFILE= /usr/local/share/cvsup/doc-supfile– MASTER− SITE− OVERRIDE?= ftp://ftp.db.tokushima-u.ac.jp/pub/FreeBSD/ports/distfiles/${DIST− SUBDIR}/
cvsup, ftp についてはサイト毎に適切なサーバを設定すること．
• Ports Collection のインストール
1. net/cvsup-without-gui (cvsup-without-gui-16.1.h)

第 17 章 FreeBSD5.3 での作業記録 (Dec. 28. 2004)• root# cd /usr/src ; make update• root# cd /usr/src ; make buildworld• root# cd /usr/src ; make buildkernel KERNCONF=kernelconf• root# cd /usr/src ; make installkernel KERNCONF=kernelconf• (reboot)• root# cd /usr/src ; make installworld• (reboot)• Ports Collection のインストール
1. japanese/less (ja-less+iso-358.254− 2)
2. japanese/nkf (ja-nkf-2.04)
3. devel/gmake (gmake-3.80− 2)
4. databases/postgresql7 (postgresql-7.4.6)
5. textproc/libxml2 (libxml2-2.6.16)
6. graphics/jpeg (jpeg-6b− 3)
7. graphics/netpbm (netpbm-10.25− 3)
8. www/apache2
apache-2.0.52; make options:
WITH− SUEXEC=yes
SUEXEC− DOCROOT=/usr/local/www
SUEXEC− UIDMIN=443
SUEXEC− GIDMIN=443• edb(user, group) の追加
1. /etc/passwd: edb:*:443:443::0:0:EDB Owner:/usr/local/edb:/bin/csh
2. /etc/group: edb:*:443:root,edb

158

第 17 章 FreeBSD5.3 での作業記録 (Dec. 28. 2004)• edb directory の作成 (user: edb, group:edb)
1. /usr/local/edb
2. /usr/local/edb/bin, etc, include, lib, libdata, libexec, sbin, tmp, var
3. /usr/local/edb/include/edb
4. /usr/local/edb/libdata/dtds, font, js, ml, msg, tbl
5. /usr/local/edb/libexec/cron, ml, pgsql
6. /usr/local/edb/var/cmd, log, run• DB の作成 (PGDATA=/usr/local/psql/data)
1. pgsql# PGDATA=/usr/local/pgsql/data
2. pgsql# export PGDATA
3. pgsql# initdb -E UNICODE
4. (running postmaster)
5. pgsql# createuser --adduser --createdb edb
6. edb# createdb edb• kernel の tune up
1. options MAXDSIZ="(1536*1024*1024)"
2. options MAXSSIZ="(1536*1024*1024)"
3. options DFLDSIZ="(1536*1024*1024)"
4. options SHMMAXPGS=327680
5. options SEMMNI=320
6. options SEMMNS=1920
7. options SEMUME=320
8. options SEMMNU=960
9. options PMAP− SHPGPERPROC=400• /etc/sysctl.conf

159

第 17 章 FreeBSD5.3 での作業記録 (Dec. 28. 2004)

1. kern.maxfiles=65536• EDB の作成
1. edb# make-edb-template.sh• DB ユーザの作成
1. pgsql# CREATE USER guest WITH PASSWORD ’guest’;• WWW サーバの設定と WWW コンテンツの作成
1. SSL2. Cookie
3. Log directory
4. www# cd /usr/local/www/data ; mkdir edb-icons
5. (store *.png into edb-icons/.)
6. /etc/newsyslog.conf: + /var/log/httpd-suexec.log 644 5 1000 * Z

160

第 VIII 部

索引

162

索引
(*EdbProcessFunc)(void *data), 84

bitree− compare− ucs4strcase, 41

base64− decode, 43

bitree− depth, 39
bitree− free, 40

base64− encode, 42
BaseAvail, 49
BaseCensor, 49
BaseDateFrom, 49
BaseDateTo, 49
BaseDelete, 49
BaseEID, 49
BaseEOID, 49
BaseMapto, 49
BaseMtime, 49

bitree− free2, 40
bitree− hint− str, 41
bitree− hint− strcase, 41
bitree− hint− ucs4str, 41
bitree− hint− ucs4strcase, 41
bitree− num, 39
bitree− remove, 40
bitree− search, 40
BiTreeAdd, 42

BaseOperator, 49
BaseOwner, 49
BaseParent, 49

CatalogueObject, 76
ColumnSN, 52
ColumnSN− EID, 52

BaseRead, 49
BaseWrite, 49
BiTree, 38

ColumnXN, 52
ConditionAvaliable, 78
ConditionCatalogueMatch, 79

bitree− add, 39
bitree− callback, 41

ConditionCatalogueMatchNoExpand, 79
ConditionCondition, 78

bitree− callback− hint, 41
BiTree− cmp− t, 38
bitree− compare− str, 41

ConditionDate2Overlap, 80
ConditionDateFrom, 79
ConditionEIDMatch, 79

bitree− compare− strcase, 41
bitree− compare− ucs4str, 41

ConditionEIDMatchNoExpand, 79
ConditionIntegerEQ, 79

索 引

163

ConditionIntegerGE, 79
ConditionIntegerGT, 79
ConditionIntegerLE, 79

DatumSuper, 60
DECLARE− PRINT− MODULE, 99
Doc, 69

ConditionIntegerLT, 79
ConditionNoOperation, 78

doc− close, 70
doc− color− begin, 73

ConditionPreﬁxNot, 78
ConditionPreﬁxTableName, 78
ConditionRealEQ, 80

doc− color− end, 73
doc− comment− printf, 72
doc− ﬂush, 71

ConditionRealGE, 80
ConditionRealGT, 80

doc− fpclose, 70
doc− fpopen, 70

ConditionRealLE, 80
ConditionRealLT, 80
ConditionRegexTextEQ, 80

doc− open, 69
doc− preﬁx− reset, 72
doc− preﬁx− set, 72

ConditionSkipNext, 78
ConditionTerminate, 77doc− printf, 72
doc− put− datetime, 73

ConditionTextEQ, 80

doc− putc, 72
doc− puts, 72
doc− sﬂush, 71

DatumDateFrom, 60
DatumDateTo, 60
DatumEID, 60
DatumEIDisVALID, 61
DatumEIDisValid, 61
DatumEnglish, 60
DatumEnglishIsUsable, 61
DatumEnglishIsValid, 61
DatumIsValid, 61
DatumJapanese, 60
DatumJapaneseIsUsable, 61
DatumJapaneseIsValid, 61
DatumPronounce, 60
DatumPronounceIsUsable, 61
DatumPronounceIsValid, 61
DatumRead, 60

doc− sgets, 71
doc− sopen, 70
doc− text− printf, 72
doc− text− putc, 72
doc− text− puts, 72
doc− text− puts3, 72
doc− tmpopen, 71
doc− ucs4− sgets, 71
doc− underline− begin, 73
doc− underline− end, 73
DocIsEnglish, 74
DocIsHTML, 73
DocIsJapanese, 74
DocIsLatin, 74

索 引

164

DocIsPLAIN, 73
DocIsTeX, 73
DocIsXML, 73

edb− datum− get− TEXT, 62
edb− datum− get− YEAR, 62
edb− datum− set, 62

edb− accept− notify, 65

edb− end, 64
edb− listen, 65

edb− begin, 64
edb− book− print− named− column, 95
edb− caption− free, 81
edb− caption− is− omitted, 82
edb− caption− new, 81
edb− caption− omit− append, 82
edb− caption− omit− clear, 83
edb− caption− omit− remove, 82
edb− caption− omit− restore, 83
edb− caption− omit− save, 83
edb− catalogue− append, 75
edb− catalogue− free, 75
edb− catalogue− lookup, 76
edb− catalogue− new, 75
edb− catalogue− size, 76
edb− close, 63
edb− condition− make, 77
edb− conﬁgure, 63
edb− datum− get− BOOL, 62
edb− datum− get− DATE, 62
edb− datum− get− DATE2, 62
edb− datum− get− EID, 62
edb− datum− get− English, 62
edb− datum− get− INT, 62
edb− datum− get− Japanese, 62
edb− datum− get− MONETARY, 62
edb− datum− get− Pronounce, 62
edb− datum− get− REAL, 62

edb− make− caption, 81
edb− notify, 65
edb− open, 63
edb− pgsql− command− exec, 66
edb− pgsql− query, 66
edb− pgsql− query− integers, 67
edb− pgsql− query− one− ﬁeld, 66
edb− pgsql− query− one− int, 67
edb− pgsql− query− one− text, 67
edb− pgsql− query− one− tuple, 66
edb− pgsql− query− text, 67
edb− pgsql− query− texts, 67
edb− pgsql− setnonblocking, 65
edb− picture− body− is− supported, 44
edb− picture− free, 44
edb− picture− mimetype, 44
edb− picture− new, 44
edb− picture− set− attribute, 45
edb− picture− write− EPS, 45
edb− picture− write− JPEG, 45
edb− picture− write− PNG, 45
edb− pki− CA− certiﬁcate− index, 127
edb− pki− CA− certiﬁcate− serial, 127
edb− pki− CA− lock, 127
edb− pki− CA− make− certiﬁcate, 127
edb− pki− CA− make− certiﬁcate− request, 127
edb− pki− CA− output− PKCS12, 127

索 引

165

edb− pki− CA− revoke− certiﬁcate, 127
edb− pki− CA− save− certiﬁcate− request, 127
edb− pki− CA− unlink− keyﬁle, 127

edb− print− tuple− postﬁx, 93
edb− print− tuple− preﬁx, 93
edb− print− tuple− register− func, 92

edb− pki− CA− unlock, 127
EDB− PKI− CERTIFICATE− INFO, 126

edb− print− tuple− register− language− func, 92
edb− print− type− register− func, 97

edb− pki− certiﬁcate− info, 129
edb− pki− certiﬁcate− info− equal, 129
edb− pki− certiﬁcate− info− free, 129

edb− process− create, 84
edb− process− number− of− active− processes, 85
edb− process− number− of− idle− processes, 86

edb− pki− check− certiﬁcate, 128
edb− pki− IamCA, 127

edb− process− number− of− usable− processes, 85
edb− process− switch, 84

edb− pki− person− CN2EID, 129
edb− pki− personiﬁcation− CN2EID, 129
edb− pki− print− certiﬁcate, 128

edb− process− waitall, 85
edb− setup− processes, 84
edb− table− column− reldb− elements, 53

edb− pki− print− certiﬁcate− ex, 128
edb− pki− print− certiﬁcate− info, 128

edb− table− column− xml− elements, 53
edb− table− get, 67

edb− pki− print− certiﬁcate− S− DN, 128
edb− pki− SSL− env− info, 129
edb− pki− tuple− certiﬁable, 128

edb− table− get− by− name, 67
edb− table− seek− column, 53
edb− table− seek− column− by− sqlname, 53

edb− pki− tuple− certiﬁcate, 129
EDB− PKI− X509− DN− INFO, 126

edb− table− seek− column− by− xmlname, 53
edb− tcdatum− append, 59

EDB− PKI− X509− M− INFO, 125
EDB− PKI− X509− NAME− INFO, 126
edb− print− free, 88

edb− tcdatum− free, 58
edb− tcdatum− from− array, 59
edb− tcdatum− get− datum, 58

EDB− PRINT− MODULE− INFO, 98
edb− print− new, 88

edb− tcdatum− num, 58
edb− tcdatum− reverse, 59

edb− print− pop, 89
edb− print− push, 89
edb− print− tcd− register− func, 97

edb− tcdatum− to− array, 59
edb− tuple− get, 68
edb− tuple− seek− column, 56

edb− print− tuple, 90
edb− print− tuple− column, 93

edb− tuple− seek− column− by− sqlname, 56
edb− tuple− seek− column− by− xmlname, 56

edb− print− tuple− language, 91
edb− print− tuple− named− column, 94

edb− tuple− seek− TC− by− xmlname, 56
edb− vacuum, 67

索 引

166

edb− xmldb− eid− max, 47
edb− xmldb− eoid− max, 47
edb− xmldb− free, 47

link− atom− new, 34
link− atoms, 35
link− free, 34

edb− xmldb− get, 47
edb− xmldb− get− byTEID, 48

link− free2, 34
link− get− link, 36

edb− xmldb− new, 47
edb− xmldb− put, 47
EdbBaseInfo, 49

link− get− obj, 36
link− head, 35
link− reverse, 36

EdbCatalogue, 74
EdbColumnInfo, 52

link− sort, 36
link− tail, 35

EdbContext, 46
EdbDatum, 60
EdbPicture, 43

LinkAppend, 37
LinkAppendTop, 37
LinkPop, 37

EdbPrint, 88
EdbPrintTupleFunc− t, 90

LinkPush, 37

EdbPrintTupleLangFunc− t, 90
EdbTableInfo, 50
EdbTupleColumn, 55
EdbTupleInfo, 54
EdbXmldbInfo, 46
eid− t, 33
eoid− t, 33

struct EDB− PKI− CERTIFICATE− INFO, 126
struct EDB− PKI− X509− NAME− INFO, 126
TABLE− Avail, 50
TABLE− Base, 50
TABLE− ColumnCreate, 50
TABLE− ColumnDelete, 50
TABLE− ColumnRead, 50

ForCatalogueLink, 76
ForLink, 36
ForTCDatum, 57

TABLE− ColumnWrite, 50
TABLE− Delete, 50
TABLE− EID, 50

ForTupleColumn, 56

TABLE− EOID, 50
TABLE− Mapto, 50

Link, 33
link− append, 35
link− atom− free, 34

TABLE− Mtime, 50
TABLE− Operator, 50
TABLE− Owner, 50

link− atom− free2, 34
link− atom− move− top, 35

TABLE− Parent, 50
TABLE− Read, 50

索 引

TABLE− SN, 52
TABLE− TupleCreate, 50
TABLE− TupleDelete, 50
TABLE− TupleRead, 50
TABLE− TupleWrite, 50
TABLE− Write, 50
TABLE− XN, 52
TCDatumFirst, 57
TCDatumIsFirst, 57
TCDatumIsLast, 57
TCDatumNext, 57
TupleAvail, 54
TupleBase, 54
TupleDateFrom, 54
TupleDateTo, 54
TupleDelete, 54
TupleEID, 54
TupleEOID, 54
TupleMapto, 54
TupleMtime, 54
TupleOperator, 54
TupleOwner, 54
TupleParent, 54
TupleRead, 54
TupleTable, 55
TupleWrite, 54
UserDeﬁnedLanguageDecision, 92
UserDeﬁnedPrintTCD, 97
UserDeﬁnedPrintTuple, 92
UserDeﬁnedPrintType, 97
XmldbEID, 46

167
XmldbEOID, 46
XmldbTEID, 46
XmldbXML, 46