xl(standard)エージェント・リファレンス・マニュアル
著者: 森 洋久 / joshua@globalbase.org ※
*
目的と概要
*
このマニュアルを読むために必要な知識
*
前提となるシステム用件
*
XLとは
*
構文
*
型
*
インタプリタ実行モデル
*
その他
*
XLデータ型リファレンス
*
Listbase Environment型リファレンス
*
XLエラーリファレンス
*
XL基本関数
*
XL認証関数
*
XLストリーム・ルーティング関数
*
履歴
目的と概要
xlエージェントはGLOBALBASEのエージェントの中で最も基本的なエージェントである。基本的な算術演算等が含まれている。これだけで簡単な言語系をなしており、簡単なスクリプトプログラムを作ることが出来る。本マニュアルはこの言語系の原理を説明し、また、言語体系のリファレンスを提供する。
なお、このマニュアルは2007-05-07現在まだ移行中なので、古いマニュアルのすべての情報を含んでいません。必要に応じて古いマニュアルを参照してください。
▲
ページトップへ戻る
このマニュアルを読むために必要な知識
xl言語を簡単に実行するためには、linuxなどのposix系オペレーティングシステムでxlコマンド実行するのが早い。従って、posix系のマシンについて基本的な操作が出来ることが望まれる。
▲
ページトップへ戻る
前提となるシステム用件
xlエージェントが動作可能なマシンがあること。具体的には、posix系オペレーティングシステムに
LANDSCAPE GLOBALBASE SERVER がインストールされているマシンがあれば良い。
▲
ページトップへ戻る
XLとは
インターネットのブラウザなどでは、HTML、XMLといったマークアップ言語をデータ表現の方法として使い、それを転送するプロトコルとしてHTTPが一般的である。しかし、XMLが発達するにつれて、データベースのクエリをXML形式で記述する方法が提案されるなど、XMLをデータ表現ではなく、プロトコルとしての性格の強い使われ方が成されるようになってきた。
XMLがプロトコルとしての機能を充実すると、HTTPの役割はXMLで置き換えることが出来る。たとえば、HTTPのGET文は、....というXMLの構文で置き換えることが出来る。このように全てがXMLで置き換えられるようになると、パーザが二つから一つで十分になるなど、リソースの節約が期待される。しかし、単に構文を置き換えるだけでは、実行系は依然として二つ必要であるため、そのメリットはあまりない。
たとえば、XMLでデータベースに検索クエリを出し、データを引き出したとする。 HTTPを使用した場合、GET文の中にXMLで定義された検索クエリがネストした形でデータベースに送り込まれる。しかし、検索クエリのセマンティックスはデータを GETするという意味はすでに含まれており、冗長性は避けられない。
この問題の原因は、XMLの構文が統一されたにも関わらず、依然としてプロトコルとその上で処理されるデータという二つの概念が存在しいるからである。そこで、データとプロトコルという二つの概念が交換可能な言語XL ( XML LISP)を提案する。つまり、
<greeting>Hello World</greeting>
というXML表現があったとする。このgreeting というタグは、Hello Worldに付属した属性データであると解釈することもできるが、サーバがブラウザたいして「飾り立てて表示しろ」という指令するプロトコルとも取ることが出来、これらの解釈の違いを時と場合によって明示的にいろいろ変えることの出来る仕組みを提案する。
プロトコルをプログラムと置き換えれば、プログラムとデータが交換可能で、プログラムをデータとして処理したり、データをプログラムとして実行したりすることの出来る言語として、LISP,MLなどの言語が存在する。XLでは、XMLの構文にLISPのセマンティックスを当てはめることによってXML構文の解釈をいろいろプログラムする仕組みを提供する。具体的には、XMLのタグをLISPの関数名、要素にネストした要素をLISPの関数の引数と解釈し、この関数の本体を定義する方法を導入する。たとえば、上述の例では、
(greeting "Hello World")
というLISPのS式と同一であると解釈する。greeting という関数を定義すれば、この構文は実行可能となる。
ところが、XMLの要素をLISPの関数と解釈したときに問題となるのは、関数の引数の評価方法の考え方がLISPでははっきりとしているが、XMLでは曖昧であるということである。この曖昧さには二種類ある。
まず最初の曖昧さは、評価順序の曖昧さである。XML文書の要素の中の子要素は、アプリケーションの種類や、評価の状況などによって、必要な物だけが評価されるというNormal Orderの評価が行われる一方で、全ての物をきちっと評価される Applicative Orderの評価が行われる場合もある。
次の曖昧さは、評価方法そのものの曖昧さである。要素の評価の仕方は、どのような要素のなかにネストされるかによって評価のされ方が違うという曖昧さがある。
XML文書を処理するためには、まず関数定義の時に、引数の評価順序をNormal Orderか、Applicative Orderか明示的に選択できるようにすることによって、最初の曖昧さに対応する。次に、関数定義の時に、引数を評価するための専用の環境を明示的に指定することによって、要素がネストした場合の評価の方法を切り替えることが出来るようにする。
▲
ページトップへ戻る
構文
XLの構文は、XML形式の構文とLISP形式の構文2種類がある。本来、XML 形式のみで十分であるが、それでは煩雑になるので、LISP形式も採用した。ただし、LISP形式はXML形式の要素の中に入れ子にすることが出来るが、その逆は出来ない。関数の仕様書などでは二つの形式を併記している。 XLパーザには、XMLモードとLISPモードの二種類がある。XMLモードの時には、タグを認識するための構文解析が行われ、また、要素の中の '(',')' 、 '^' 、および数字を認識すると、LISPモードになる。LISPモードでは、 ' < ' を認識すると、XMLモードになる。二つのモードはネストしており、モードの変化点はパーザによって記憶されており、ネストが終わると自動的に基のモードへもどる。 XMLモードのときの要素は、空白や改行で区切られる。空白や改行は無視する化しないかは?xml:optionで指定することが出来る。もし、空白を無視しないことにした場合、空白のところの区切り目に空白だけの文字列が挿入される。
<tag>
abc def
hhh
^sym
ghi
(+ a b)
jk 123
lm
(print stdout !
<name data="eee"> hello </name>)
nop
</tag>
空白、改行を無視するモードでは、
(tag
"abc" "def"
"hhh"
sym
"ghi"
(+ a b)
"jk" 123
"lm"
(print stdout
([name data="eee"] "hello"))
"nop"
</tag>
と等価である。空白、改行を無視しないモードでは、
(tag
"abc" " " "def" "\n\t\t"
"hhh"
sym
"ghi"
(+ a b)
"jk" 123
"lm"
(print stdout
([name data="eee"] "hello"))
"nop"
</tag>
となる。タグのあと、 '(' や '^' など、LISPモードへ変化する前後では空白や改行は無視されることに注意されたい。
▲
ページトップへ戻る
履歴
日時:2010-12-01
マニュアル生成。(2010-12-01版)
--
日時:2000-09-30
著者:森 洋久
/ 反映されたバージョン:ver.A.
環境に分岐環境の記述を追加。それに伴い、関数の評価のところも変更。
--
日時:2000-10-31
著者:森 洋久
/ 反映されたバージョン:ver.A.
「構文」の章の構文解析についての記述について更新。 LISP形式の場合の属性リストの記述法について変更。 インタプリタのモデルを変更。それにともないRemote,Localの解釈をはっきりさせた。また、多少エージェント、サーバの用語を変更した。
--
日時:2000-11-05
著者:森 洋久
/ 反映されたバージョン:ver.A.
インタプリタのモデルの変更にともない、OpenInterpreter,CloseInterpreterのセマンティックスを変更。OpenInterpreterでソケットをオープンできるようにし、 CloseInterpreterで閉じることが出来るようにした。ConnectはOpenInterpreterで代用できるので標準サポートしないことにした。 Cancel の追加。
--
日時:2000-11-11
著者:森 洋久
/ 反映されたバージョン:ver.A.
SetMainInterpreter,Switch,Arg,GetIid,GetUserInfo,Permission,Account,Agent,GetVariable, Launchの追加。 しかし、Permissionの実装は不完全。Account の最初の要素はgroup が妥当。まだ変更していない。GetEnvVarは、GetVariableに変更した方がよい。MainInterpreter は SetMainInterpreterに変更した方がよい。 OpenInterpreter のオプションにPermissionを追加。 SetAgentの仕様の変更
--
日時:2000-11-15
著者:森 洋久
/ 反映されたバージョン:ver.A.
WaitInterpreter の追加。
--
日時:2000-12-24
著者:森 洋久
/ 反映されたバージョン:ver.A.
ErrHandlerの仕様を変更。While,Break,Continue,ListLengthの追加。 OpenInterpreterにResultオプションを追加。
--
日時:2000-01-05
著者:森 洋久
/ 反映されたバージョン:ver.A.
出力フォーマットに関するオプションをOpenInterpreter,Saveに追加。Argの引数の数え方の変更。
--
日時:2000-01-14
著者:森 洋久
/ 反映されたバージョン:ver.A.
DivideStringの追加、Sortの追加。quoteの仕様変更。
--
日時:2001-01-24
著者:森 洋久
/ 反映されたバージョン:ver.A.
環境を関数と見なす新しいシンタックスの追加。(関数の評価のところを参照のこと) ThisAgentName, DatabasePath, SetPrefixMode, GetPrefixMode, Get, Set, GetLocalHostName, GetLocalHostIP, OpenSession, RemoteSession, CloseSession, Sync, Lock, Unlockの追加
--
日時:2001-01-25
著者:森 洋久
/ 反映されたバージョン:ver.A.
InvokeError,DeleteSymbol,MoveSymbolを追加。
--
日時:2001-02-03
著者:森 洋久
/ 反映されたバージョン:ver.A.
DeleteSymbol,MoveSymbolをDeleteDefine,MoveDefineと改称。また、属性値に、シンボルを入れることが出来るようにした。 LISPのリストの中で!を使うと、XML形式へ戻るというシンタックスをやめた。< を受信したところでXML形式へ戻る。従って、"<"をS式のシンボルなどとして使いたい場合は、<を使うこと。
--
日時:2006-08-02
著者:森 洋久
/ 反映されたバージョン:ver.B.b11.02
新しい、マニュアルフォーマットへ移行開始。
--
日時:2006-08-08
著者:森 洋久
/ 反映されたバージョン:ver.B.b11.02
新しい、マニュアルフォーマットへ移行終了。型リファレンスとエラーコードリファレンスの追加。
--
日時:2006-08-15
著者:森 洋久
/ 反映されたバージョン:ver.B.b11.02
エラーコードの参照を行った。Letの記述を追加。これから新しい関数の記述を徐々に追加して行く。
--
日時:2006-08-15
著者:森 洋久
/ 反映されたバージョン:ver.B.b12
[UNDEF REF (xl-DefileEval)]を追加。
--
日時:2007-04-08
著者:森 洋久
/ 反映されたバージョン:ver.B.b15
XL関数(環境)(Arg)の機能追加対応。
--
日時:2007-05-06
著者:森 洋久
/ 反映されたバージョン:ver.B.b16
「XL認証関数」の項目を追加。
--
日時:2008-05-19
著者:森 洋久
/ 反映されたバージョン:ver.B.b17.03
「XLストリーム・ルーティング関数」の項目を追加。
--
▲
ページトップへ戻る