Symfoware Server WebDBtoolsユーザーズガイド - FUJITSU - |
目次
索引
![]() ![]() |
付録B WebScriptフォーマットファイル解釈の詳細 |
フォーマットファイルには、通常のHTMLタグに加えて、WebScriptが提供する検索結果出力用タグなどを使用することができます。
HTMLタグとWebScriptタグの評価順序を、以下に示します。
タグとそのパラメタへの分割
変数/リスト要素の値による置き換え($の処理)
値の解釈
タグとそのパラメタへの分割について、説明します。
タグとは、以下の形式で記述されたものです。
< タグ名 [パラメタ1 [パラメタ2 ...] ] >
タグは、フォーマットファイルが解釈されるときに、最初に認識されます。
タグはネストしないため、タグをパラメタとして指定することはできません。したがって、<!SETVAR x <!HREPLACE a> >のような記述はできません。
各パラメタは、以下に示すどれかの形式をしています。
パラメタ名
パラメタ値
パラメタ名 = パラメタ値
HTMLタグのパラメタは、「パラメタ名」または「パラメタ名 = パラメタ値」の形式で指定してください。
WebScriptタグは、タグごとに、省略不可能なパラメタの数が決まっています。
省略不可能なパラメタは、省略可能なパラメタより前に指定します。
省略不可能なパラメタは、「パラメタ値」の形式で指定してください。
WebScriptタグの省略可能なパラメタは、「パラメタ名」または「パラメタ名 = パラメタ値」の形式で指定してください。どちらの形式かは、パラメタごとに決まっています。
省略可能なパラメタを指定する順序は任意です。
タグ名および各パラメタの分割には、空白文字を使用します。ただし、対応する引用符で囲まれた部分の中にある空白文字は、分割対象となりません。
例1
<!SETVAR>タグは、省略不可能なパラメタを2つと、省略可能なパラメタREFをもっています。REFは「パラメタ名」の形式で指定してください。 <!SETVAR varName "The Value" REF> |
例2
<!DO>タグには、省略可能なパラメタRESULTとONERRORがあります。以下に示す記述の内容は同じです。 <!DO "SELECT CLM FROM SCM.TBL1" RESULT=rslt ONERROR=ERR1> <!DO "SELECT CLM FROM SCM.TBL1" ONERROR=ERR1 RESULT=rslt> |
パラメタ値の中の「\」に続く文字は、特別な意味をもつことがあります。
\\ → 「\」が1つとして扱われます。 \' → 「'」が1つとして扱われます。 引用符で囲まれた部分の終了とはなりません。 \" → 「"」が1つとして扱われます。 引用符で囲まれた部分の終了とはなりません。 \$ → 「$」が1つとして扱われます。 \半角英字 →「\」が1つと半角英字1つの2文字を意味します。
上に示した以外の円記号+文字(日本語を含む)は、不定な値となります。
例
<!DO "SELECT * FROM SCM.TBL1 WHERE C1=\'A\' AND C2=\'B\'" RESULT=rslt> ↓ (SELECT文は以下のようになる) SELECT * FROM SCM.TBL1 WHERE C1='A' AND C2='B' |
引用符文字自体をパラメタ値の中に含める場合は、以下のどちらかの方法で指定してください。
パラメタ値を、別の引用符で囲む (例:'abc"def')
「\」でエスケープする (例:"abc\"def")
パラメタ値が英字、数字、「-」または「.」以外の文字を含む場合は、パラメタ値を引用符で囲みます。
【正しい例】 <!IF 'a == b'> 【誤った例】 <!IF a == b> |
変数/リスト要素の値による置き換えについて、説明します。
パラメタ値の文字列の一部分に、WebScript変数またはリスト要素の値を使用する場合、その変数またはリスト要素を「$(」と「)」で囲むことで、置き換えることができます。
「$(」の直後および「)」の直前に、空白を入れてはいけません。ただし、リスト要素の場合、[ ]の中に書くことができるのは数値定数だけです。
「$()」は、ネストすることはできません。
例1
変数xがabcで、パラメタ値が"ABC $(x) xyz"の場合 ↓ "ABC abc xyz"と同じ意味になります。 |
例2
リスト要素y[3] {column4}がAAAで、パラメタ値が"xxx $(y[3]{column4}) ttt"の場合 ↓ "xxx AAA ttt"と同じ意味になります。 |
置き換えるものがリスト要素ではなく、「)」を置くべき場所の直後が、「_」、英字または数字のどれでもない場合、「(」と「)」を省略することができます。
例1
変数x → abc パラメタ値 → "ABC $x xyz" ↓ $xの後ろが「_」、英字または数字ではないため(この場合「空白」)、"ABC abc xyz"と同じ意味になります。 |
例2
変数x → abc パラメタ値 → "$x?xyz" ↓ $xの後ろが「_」、英字または数字ではないため(この場合「?」)、"abc?xyz"と同じ意味になります。 |
フォーマットファイルでは、パラメタ分割が確定したあとに、変数の置換が解釈されます。したがって、以下の例のような場合に注意してください。例
変数z → value1 BAR=value2 ↓ <!TAG1 F00=$z>と<!TAG1 F00=value1 BAR=value2>とは異なりますので、注意してください。 置き換え対象はパラメタ値だけです。<!TAG2 $paramName=value>のような記述はできません。
変数/リスト要素の置き換えが行われた後の値の解釈について説明します。
HTMLタグの場合、指定された値をもつタグが、フォーマットファイルを処理してできる結果のHTML文書に書き込まれます。以下のような変換が行われます。
パラメタ値に含まれる「"」は、「"」で置き換えられます。
パラメタ値に含まれる「'」は、「'」で置き換えられます。
例
<!SETVAR x "a'b c"> <INPUT VALUE="$x"> ↓ <INPUT VALUE="a'b c"> |
パラメタの解釈は、各パラメタによって決まっていますが、&#ddや<などによる表現は、HTML文書とは異なり、解釈されません。
解釈方法の種類を、以下に示します。
【定数文字列】
引用符の種類にかかわらず、指定されたままの文字列の値
【左辺値】
引用符の種類にかかわらず、指定された文字列が表す変数/リスト要素
【そのほか】
[STEP1]
パラメタ値が二重引用符で囲まれている場合は、その文字列自体をSTEP1の値とします。--- (a)
パラメタ値が二重引用符で囲まれていない場合(引用符で囲まれている場合を含む)は、文字列をWebScript言語によって解釈したものをSTEP1とします。--- (b)
パラメタ値を二重引用符で囲むかどうかは、パラメタへ分割した時点で決まります。
例
<!SETVAR aaa '"foo"'> <!REPLACE $aaa> |
ここで、<!REPLACE>の第一パラメタは、パラメタ分割の時点で「二重引用符で囲まれていない」と判断されるので、変数/リスト要素の値による置き換え後に"foo"となっても、STEP1では、(b)として扱われます。
[STEP2]
パラメタによって指定されているコンテキストによって、STEP1の値を変換します。
文字列コンテキスト:STEP1の値を文字列に変換します。
数値コンテキスト:STEP1の値を数値に変換します。
一般コンテキスト:STEP1の値はそのままです。
以下に示す例は、上から順に評価されます。
<!UNDEFVAR abc> <!SETVAR foo "abc"> |
abcという変数は定義されていません。
fooの値は、"abc"という文字列です。
<!SETVAR bar foo> |
<!SETVAR>の第二パラメタは、一般コンテキストとして解釈されます。
STEP1は、(b)であるからWebScript言語によって解釈されます。この場合、fooは変数なので、その値が評価されて、文字列"abc"となります。
STEP2は何もしないので、第二パラメタの評価結果は文字列"abc"となります。
barの値は、文字列"abc"となります。
<!SETVAR bar "foo"> |
STEP1では(a)が適用されるので、値は文字列"foo"です。
barの値は、文字列"foo"となります。
<!SETVAR bar "$foo">
変数/リスト要素の値による置き換えにより、第二パラメタは"abc"となります。
barの値は、文字列"abc"となります。
<!SETVAR bar $foo>
変数/リスト要素の値による置き換えにより、第二パラメタはabcとなります。
STEP1で(b)が適用され、abcはWebScript言語で評価されます。変数として定義されていないので、値は未定義値となります。STEP2でもそのままです。
barの値は未定義値となります。
<!SETVAR tbl "MYTABLE"> <!DO "SELECT CLM1 FROM SCM.$tbl"> |
変数/リスト要素の値による置き換えにより、<!DO>の第一パラメタは "SELECT CLM1 FROM MYTABLE"となります。
値の解釈の評価での<!DO>の第一パラメタは、文字列コンテキストと指定されています。
STEP1で文字列になります。STEP2でも変わりません。
<!DO 'SELECT CLM1 FROM SCM.$tbl'> |
変数/リスト要素の値による置き換えにより、<!DO>の第一パラメタは 'SELECT CLM1 FROM MYTABLE'となります。
値の解釈のSTEP1では(b)が適用されるので、WebScript言語での文法エラーとなります。
<!SETVAR x "abc"> <!REPLACE "$x def"> |
変数/リスト要素の値による置き換えにより、<!REPLACE>の第一パラメタは"abc def"となります。
値の解釈の評価の場合、このパラメタの指定は、文字列コンテキストなので、評価結果は文字列"abc def"となります。
<!REPLACE "$( x )def"> |
「$(」の後ろおよび「)」の前に、空白があるので、エラーとなります。
<!REPLACE "$xdef"> |
xdefという変数は定義されていないため、未定義値を文字列とになり、空文字列となります。
<!SETVAR y 123> <!SETVAR ya "abc"> <!REPLACE "$ya"> |
yaが評価されて、文字列"abc"となります。
<!REPLACE "$(y)a"> |
yが評価されて、文字列"123a"となります。
<!REPLACE "$(x$y)"> |
x$yは、変数でもリスト要素でもないため、エラーとなります。
目次
索引
![]() ![]() |