ページの先頭行へ戻る
Symfoware Server V12.7.0 WebDBtoolsユーザーズガイド
FUJITSU Software

B.1 WebScriptフォーマットファイル解釈の詳細

フォーマットファイルには、通常のHTMLタグに加えて、WebScriptが提供する検索結果出力用タグなどを使用することができます。

HTMLタグとWebScriptタグの評価順序を、以下に示します。

  1. タグとそのパラメタへの分割

  2. 変数/リスト要素の値による置き換え($の処理)

  3. 値の解釈

タグとそのパラメタへの分割

タグとそのパラメタへの分割について、説明します。

タグの記述
  • タグとは、以下の形式で記述されたものです。
    < タグ名 [パラメタ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タグの場合、指定された値をもつタグが、フォーマットファイルを処理してできる結果のHTML文書に書き込まれます。以下のような変換が行われます。

    • パラメタ値に含まれる「"」は、「&#34;」で置き換えられます。

    • パラメタ値に含まれる「'」は、「&#39;」で置き換えられます。

<!SETVAR x "a'b c">
<INPUT VALUE="$x">
        ↓
<INPUT VALUE="a'b c">
WebScriptタグの場合
  • パラメタの解釈は、各パラメタによって決まっていますが、&#ddや&lt;などによる表現は、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">