Motivation

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

Methodology to Connect

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

port# description service area command example
44443 SSL(SSLv3/TLSv1) automatic authentication mode.
ユーザの個人証明書を提示し,検証が成功し,かつ自動ログイン設定されている場合.
プライマリデータベースを参照する.
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
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
44080 without authentication.
Referencing the university/public readable database as backend. So you can get only information which is readable from university or world wide.
150.59.0.0/16 % telnet db.db.tokushima-u.ac.jp 44080

Character Encoding

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

Scheme of Request/Response

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

リクエストの発行方法と,レスポンスの様式は以下に示す通り.

<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からのレスポンスは,
--- 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に続くものになる.

Command Summary

Command Synopsis Description Return Option
Connection Management
LOGIN LOGIN  user-eid  passphrase データベースにログインする.(EDB/SSL mode only) (none)
SLOGIN SLOGIN  passphrase データベースにスタッフ権限でログインする.(LOGIN state only) (none)
SLOGOUT SLOGIN スタッフ権限からログアウトする.(STAFF state only) (none)
ENV ENV コネクション状態を表示する. environment variables and their values
VERBOSE VERBOSE  [level] VERBOSEレベル(≧0)の設定(既定値: 0) (none)
QUIT QUIT コネクションを切断する. (none)
HELP HELP  [cmd] ヘルプメッセージを表示する. summary of command usage
BEGIN BEGIN トランザクションを開始する. (none)
END END トランザクションを終了する. (none)
Retrive Information
TABLE TABLE テーブルの全リストを得る. 形式2
TABLE  regular 標準テーブルのリストを得る.
TABLE  auxiliary 補助テーブルのリストを得る.
AGE AGE 全情報について最大のEOIDを得る. EOID
AGE  eid eidで示される情報について,参照まで含めたEOIDの最大値を得る.この値が増加している場合には,補間後の情報(cXML; completed XML)の記述が変更された可能性がある.
INFO INFO  MAX(eid) 全情報について最大のEIDを得る. EID
INFO  MAX(eoid) 全情報について最大のEOIDを得る. EOID
GET GET  eid-of-tuple  [eoid] eid-of-tupleで指定された情報のXML形式の登録情報を得る.eoidが指定された場合には,過去の変更履歴中のXML形式の情報を得る. 形式3
GET  eid-of-table eid-of-tableで指定されたテーブルのXML形式の定義情報を得る.
GET  xmlname xmlnameで指定されたテーブルのXML形式の定義情報を得る.
DTD DTD  xmlname xmlnameで指定されたテーブルのDTDを得る. DTDの内容
FRESH FRESH  seconds 現在から遡ってseconds秒以内に更新された情報のリストを得る. 形式1
HISTORY HISTORY  eid eidで指定された情報の変更履歴のリストを得る.
(非LOGIN状態では変更履歴は参照できない.最新のもののみ返される.)
形式1
LOOK LOOK  condition 条件(condition)による検索を行う. 形式1 Order
COUNT COUNT  condition 条件(condition)に適合する情報の数を得る. 整数値
TRCOUNT TRCOUNT  eid すべてのテーブルについて,eidを参照している情報の数を得る. 形式1+整数値
TOCOUNT TOCOUNT  eid すべてのテーブルについて,eidが所有している情報の数を得る. 形式1+整数値
TPCOUNT TPCOUNT  eid すべてのテーブルについて,eidが権限をもつ情報の数を得る. 形式1+整数値
TMCOUNT TMCOUNT  eid すべてのテーブルについて,eidをマップしている情報の数を得る. 形式1+整数値
CLASSIFY CLASSIFY  cxn  condition 条件(condition)に適合する情報をカラム(cxn)で分類する. 整数値(EIDまたは年等の整数値)+整数値 Mode: fiscal
OWNERSHIP OWNERSHIP  xmlname  eid テーブル(xmlname)の登録情報においてユーザ(eid)が(直接)所有する情報のリストを得る. 形式1
REFER REFER  xmlname  eid テーブル(xmlname)の登録情報において情報(eid)が(直接)参照されている情報のリストを得る. 形式1
CAPTION CAPTION  eid 情報の見出しを得る. 形式4
EXPAND EXPAND  eid 情報を展開する. 形式1
Editting Information (required LOGIN-state)
EDITOR EDITOR  eid 情報(eid)を編集可能なユーザのリストを得る. 形式1
NOTIFY NOTIFY  immediate 電子メールによる変更通知の可否を設定する.(required STAFF-state) (none)
NOTIFY  delay
NOTIFY  off
CHECK CHECK  xml XML記述を検査する. checked status
MODIFY MODIFY  xml XML記述を修正する. modified XML
UPDATABLE UPDATABLE  xml XML記述が更新可能な内容であるかを検査する. checked status
UPDATE UPDATE  xml XML形式で与えられた情報をデータベースに登録する. 形式1
CREATABLE CREATABLE  xmlname 指定されたテーブルにおける新規情報作成の可否を得る. 論理値
CREATABLE  eid
WRITABLE WRITABLE  eid 指定された情報の書き込み可否を得る. 論理値
DELETABLE DELETABLE  eid 指定された情報の無効化の可否を得る. 論理値
ISUSER ISUSER  eid 指定された情報(person)がユーザ権限を持つかどうか判定する. 論理値
ISSTAFF ISSTAFF  eid 指定された情報(person)がスタッフ権限を持つかどうか判定する. 論理値
ISODIN ISODIN  eid 指定された情報(person)がOdin権限を持つかどうか判定する. 論理値
PASSPHRASE PASSPHRASE  passphrase ログインパスフレーズを変更する. 論理値
Miscellaneous
CTEXT CTEXT  text テキスト(text)に文字変換テーブルによる変換を施す. converted text.
CTABLE CTABLE 文字変換テーブルをダンプする. conversion table.

Format of Response

FormatFields
形式1 request-id EID EOID TABLE-EID
形式2 request-id EID EOID TABLE-EID xmlname
形式3 request-id EID EOID TABLE-EID XML
形式4 request-id EID EOID TABLE-EID 短見出し 長見出し

各フィールドはTAB文字(U+0009)で区切られる.(フィールド内のテキストにはTAB文字は含まれない.)

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つでなくてはならない.
xni (i>0)では"xmlname[1]"のように要素位置を指定できる.(配列の場合のみ)
○ 複数のカラムについて条件を指定したい場合には
XN0.{ XN1 = {values1}   XN2 = {values2}   [...] }
と記述する.
・一般に, XN1, XN2XN0 に含まれるカラムである.
・これらの条件式は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}
のような記述では,
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 … 情報が階層構造をなしているときの直上の親

○ オペレータ:
・オペレータには
  • '=' … 一致
  • '~' … 正規表現による一致
を指定できる.
・正規表現による一致は,対象となるカラムがテキスト型を含みかつ比較される値がテキストが他の場合にのみ行われる.

○ 値リスト: 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 \e{NULL}
\E{NULL}
参照なし.
\e{eid} 展開なし.
\E{eid} 展開あり.
サブクエリ 展開あり.
テキスト "string" 登録内容に等しいテキスト.MTEXTのように左辺から複数のテキストを抽出可能な場合には,(英),(日),(読)のいずれかに等しいテキスト
数値 "val" 登録内容に等しい数値.
"val1 val2" もしくは登録内容を含む範囲
年月日 "date" 登録内容に等しい月日
"from-date to-date" 登録内容を含む期間
INTEGER,DATE等を範囲で検索する場合には
	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.affiliation=\E{23456} }
○ 上記に[発行年月日]の条件をつけて検索.
article.{@.author={ person.affiliation=\E{23456} } @.date="20040000 20049999"}
○ 【組織】を期間限定属性で検索
organization.DATE="20050401"

Options

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

Status Code

2xx肯定的応答処理が正常に終了したことを示す.
3xx肯定的応答処理の過程で何らかの修正がなされたことを示す.
4xx否定的応答要求にエラーがあったことを示す.
5xxサーバのエラーサーバ側で不可避なエラーが生じたことを示す.

Transaction

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

Notice

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