Make your own free website on Tripod.com
space
目次 索引 前の章 次の章

第 8 章

データやアプリケーションのパブリッシュ


Peer Web Services for Windows NT では、情報とアプリケーションの両方をパブリッシュすることができます。つまり、静的な情報ページから対話型のアプリケーションまで、さまざまなものを自分の Web サイトに収録できるわけです。さらに、データベースから情報を検索して取り出したり、逆にデータベースに情報を追加することもできます。

この章では、次の項目について説明します。


章の最初 パブリッシュのための情報の準備

Web ページのほとんどは HyperText Markup Language (HTML) によって書式化されています。HTML ファイルは通常の ASCII 形式のテキスト ファイルですが、書式とハイパーテキスト リンクを指定するコードが挿入されています。HTML の仕様は定期的に変更されています。HTML ページを完全に設計するためには、HTML の仕様 (インターネットで公開されています) を常に確認しておくことが必要です。

HTML ファイルのオーサリング

HTML ファイルの作成や編集には、Windows のメモ帳やライトなどのテキスト エディタを使用することができますが、Microsoft(R) FrontPage(TM)、または Internet Assistant for Microsoft Word などの HTML エディタを使用すれば、より簡単に作業を行うことができます。

日本語を含む情報をインターネット上でパブリッシュする際には、使用する文字種に注意が必要です。Windows のメモ帳などで HTML ファイルを作成する際に、1 バイト カナ (半角カナ) や機種依存文字 (丸囲みの数字やローマ数字など) は使用しないでください。インターネット上では、使用するコンピュータによってさまざまな文字コード体系 (日本語では ISO-2022-JP、シフト JIS (MS 漢字)、EUC) などが使用されています。異なる文字コード体系でパブリッシュされた情報は、表示を行うコンピュータ上のブラウザが、使用されている文字コードを識別し、変換を行ったうえで表示をしています。しかし、1 バイト カナや機種依存文字を持たないコンピュータもあり、元の文字とは異なる文字に変換されたり、障害を発生させる原因にもなるため、インターネット上ではこれらの文字を使わないことになっています。イントラネット内では、このような制限はありませんので、システム管理者の指示に従ってください。ただし、将来的にインターネットへ接続する予定があるなら、上記の文字を使用しないことを推奨します。 HTML ファイルの作成には、HTML エディタやほかのシステムを使用します。

HTML ファイルには、システム上にあるほかのファイルへのハイパーリンクを含めることができます。HTML ページに画像や音声を含めるには、専用のソフトウェアを使ってそれらを作成、編集する必要があります。

HTML などのファイル形式でのパブリッシュ

ファイルには画像や音声を含めることができます。また、Microsoft(R) Office ファイルなどをはじめとする大部分のファイル形式へのリンクも作成できます。ただしリモート ユーザーは、HTML 以外の形式のファイルを表示する場合に、そのファイル形式に対応した表示用のアプリケーションを持っていることが必要です。たとえば、すべてのリモート ユーザーが Microsoft Word を所有していることが明らかであれば、Microsoft Word の .doc ファイルへのリンクを含めることが可能になります。ユーザーはリンクをクリックすることができ、ユーザーのコンピュータ上の Word 内でその文書が表示されます。

HTML 形式、または他の形式で情報を作成したら、それらをデフォルト ディレクトリ \Inetsrv\Wwwroot にコピーするか、またはその情報のあるディレクトリをデフォルトのホーム ディレクトリとして変更することができます。

MIME タイプ型による設定

自分の Web サイトで複数の形式のファイルを含める場合、コンピュータは各ファイル形式ごとの Multipurpose Internet Mail Extentension (MIME) マップを持っていなければなりません。ある特定のファイル形式に対応した MIME マップがサーバーにセットアップされていない場合、ブラウザはその形式のファイルを取得できないことがあります。デフォルトの MIME マップの詳細については、Windows NT のレジストリを参照してください。 MIME マップを追加設定するには、レジストリ エディタ (Regedt32.exe) を起動して次のレジストリ キーを開きます。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters\MimeMap

次の構文を使って、コンピュータに必要な MIME マップの REG_SZ 値を追加します。

<mime type>,<filename extension>,<unused parameter>,<gopher type>

たとえば、次のようになります。

text/html,htm,/unused,1
image/jpeg,jpeg,/unused,5

値に関連付けられる文字列 (つまり、値の中身) には何も入れないでください。アスタリスク (*) として指定されているファイル名拡張子を持つデフォルトのエントリは、MIME マップが存在しないときに使用される、デフォルトの MIME タイプ型です。たとえば、ファイル名拡張子 .vgr が MIME タイプ型にマップされていないときに Current.vgr というファイルに対する要求があった場合、コンピュータはそれを処理するために、アスタリスク拡張子に対して指定された MIME タイプ型を使用します。通常この MIME タイプ型はバイナリ データに対して使用される型であり、これによって、ブラウザはファイルをディスクに保存します。

インクルード文による他のファイルの追加

HTML ファイルは、頻繁に使用する情報を、ユーザーにファイルを送信する直前に追加することができます。この機能は、著作権情報やホーム ページへのリンクなどのようにHTML ファイル間で共通の情報を、ユーザーにファイルを送信する直前に、各 HTML ページに同じテキストを含める場合に便利です。

インクルード文の形式は次のとおりです。

<!--#include file="value"-->

"value" には、 WWW サービスのホーム ディレクトリからの相対パス、またはフルパスを指定します。

たとえば、各 HTML ドキュメントに自分のホーム ページへのリンクを含めるには、次のようにします。


ここで指定するパスはすべて WWW ホーム ディレクトリからの相対パスであること、および仮想ディレクトリを含めることができることに注意してください。


章の最初動的アプリケーションのパブリッシュ

Microsoft Peer Web Services の機能の中で最も優れた機能は、HTML リンクをクリックしたり HTML フォームへの入力と送信を行ったりすることによって、リモート ユーザーがアプリケーションやスクリプトを操作できることです。C や Perl などのプログラミング言語を使えば、動的な HTML ページの中でユーザーとのやり取りを実行するアプリケーションやスクリプトを作成できます。

アプリケーションやスクリプトの作成

対話型のアプリケーションやスクリプトは、C や Perl などのさまざまな 32 ビット プログラミング言語を使って作成するほか、Windows NT バッチ ファイル (.bat または .cmd のファイル名拡張子を持つファイル) として作成することができます。アプリケーションやスクリプトを作成するときは、Microsoft Internet Server Application Programming Interface (ISAPI)、または CGI (Common Gateway Interface) の 2 種類のインターフェイスを使用できます。 ISAPI に関するドキュメントは、Microsoft Developer Network (MSDN) を通じて入手できます。 CGI の入門は、この章の後の方で見ることができます。CGI の情報は、インターネット上で公開されています。バッチ ファイルでは、コマンド プロンプトで有効なすべてのコマンドが使えます。

ISAPI を使用するアプリケーションはダイナミックリンク ライブラリ (DLL) としてコンパイルされ、WWW サービスによってスタートアップ時にロードされます。ISAPI プログラムはメモリ内に常駐するため、CGI で作成されたアプリケーションよりもはるかに高速に動作します。

ダウンロードして使用できる ISAPI Perl

Win32 プラットフォームで動作する Perl を開発した独立したソフトウェア ベンダーである Hip, Inc. が、ISAPI アプリケーションとして動作する Perl を開発しました。これにより、Perl のサーバー スクリプトが、ISAPI のプロセス内モデルに比べ、格段に高速に実行できます。 ISAPI Perl のサポートなしのリリースは、http://www.perl.hip.com/ からダウンロードすることができます。詳細は、この WWW サイトに書かれています。質問やフィードバックがある場合、特に、既存の Perl スクリプトがある場合には、e-mail で perlis@mail.hip.com まで問い合わせてください。

Internet Server API

ISAPI for Windows NT を利用すれば、Web のユーザーが HTML フォームに入力をしたり、Web サイト上の HTML ページ内のリンクをクリックしたりすることによってアクティブになるようなアプリケーションを作成できます。リモート アプリケーションはユーザーが指定したこれらの情報を受け取り、プログラム処理を実行して、その結果を HTML ページに返したり、データベースに記録したりします。

ISAPI は、Web サーバー上で DLL として動作するアプリケーションを作成するために使うことができます。CGI (Common Gateway Interface) スクリプトを使った経験のある方は、ISAPI アプリケーションのパフォーマンスが格段に優れていることがわかると思います。これは、アプリケーションがサーバーの実行時にメモリにロードされるためです。また、個々の要求によってプロセスが別々に起動することもないため、オーバーヘッドが少なくなります。

08_i260b

ISAPI には上記の機能以外にも、要求の前処理および応答の後処理の機能があり、これによって HyperText Transport Protocol (HTTP) の要求や応答をサイト別に処理することが可能になります。ISAPI フィルタを使えば、認証やアクセス、ログなどをカスタマイズするアプリケーションを作成できます。

08_i260c

ISAPI のフィルタとアプリケーションを併用すれば、非常に複雑なサイトを構築することもできます。さらに、ISAPI の拡張機能とインターネット データベース コネクタを組み合わせることで、高度に対話的なサイトを構築することも可能です。

08_i260d

ISAPI を使用したプログラミングの詳細については、MSDN から入手できる Microsoft Win32 Software Development Kit (SDK)を参照してください。

Common Gateway Interface

Common Gateway Interface (CGI) とは、Web ブラウザ、Web サーバー、および CGI アプリケーションの間で情報をやりとりする、一連の仕様です。クライアントの Web ブラウザは、HTML フォームに文字を埋め込んだり、Web サーバーの HTML ページにあるリンクをクリックすることで、CGI アプリケーションを起動できます。ISAPI と同じように、CGI アプリケーションはクライアント Web ブラウザが供給する情報を受け取ることができ、プログラムできることなら何でもできます。そして、アプリケーションの結果を HTML ページの形で返したり、データベースに情報を格納することができます。簡単な CGI アプリケーションは Perl などのスクリプト言語で記述されることが多く、そのため CGI アプリケーションは "スクリプト" と呼ばれることがあります。

Microsoft Peer Web Services では、Windows NT で動作し、CGI 仕様に従っているほとんどの 32 ビット アプリケーションを使用することができます。

次の図は、ブラウザ、サーバー、CGI アプリケーションが、どのように CGI を使って情報を交換しているかを示しています。この節の残りでは、この 5 つの部分のプロセスについて説明します。

08_i260e

クライアントが要求を送信

クライアント ブラウザは、CGI 要求を次の 2 つの方法のどちらかを使って行います。

GET

POST


クライアントは、HTML ページにある以下のいずれかをクリックすることで、CGI プロセスを起動します。

サーバーが要求を受信

クライアント ブラウザがサーバーに送る URL には、実行する CGI スクリプトやアプリケーションの名前が含まれています。サーバーは、ファイル名の拡張子を、サーバーのスクリプト マッピング レジストリ キーと比較して、どの実行ファイルを起動するかを決定します。サーバーは、.idc ファイルに対してインターネット データベース コネクタを起動するスクリプト マップ エントリを持っています。拡張子マッピングのない CGI アプリケーションをサーバーが起動するようにするには、そのアプリケーション タイプのエントリをレジストリ キーに追加します。たとえば、Perl スクリプトを実行できるようにするには、次のようなエントリを追加します。

.pl: REG_SZ: C:\RESKIT\PERL\BIN\PERL.EXE %s %s

ここで、それぞれの部分次のような意味を持っています。

サーバーがアプリケーションに要求を伝達

それからサーバーは、CGI アプリケーションに環境変数という方法で情報を渡し、アプリケーションを起動します。これらの変数のうちいくつかはサーバー関連のものですが、ほとんどはクライアント ブラウザから送られてきたもので、クライアント ブラウザや、送られる要求に関係しています。環境変数の一部は、この章の終わりの表に記載しています。

CGI アプリケーションがサーバーに結果を返信

サーバーからの要求を受けて、アプリケーションは処理を行います。これが適切なものならば、アプリケーションはクライアントが受信できる形式で、標準出力ストリーム (STDOUT) にデータを返します。アプリケーションが返すデータは、次の形式に従っていなければなりません。

サーバーがクライアントにデータを返信

サーバーは STDOUT から受け取ったデータに、標準の HTTP ヘッダを付加します。それから、HTTP メッセージをクライアントに送り返します。

CGI についての詳細は、 http://hoohoo.ncsa.uiuc.edu/cgi/ にある CGI 仕様を参照してください。

CGI と Peer Web Services

WWW サービスは、標準のCommon Gateway Interface (CGI) 仕様をサポートしています。しかし、次のことについて注意する必要があります。これは、Peer Web Services の CGI 実装に特有の項目です。
CGI アプリケーションは、通常、スタンドアロンの実行可能ファイルであることに注意してください。これは、DLL としてロードされ、そのためサーバー拡張である ISAPI とは対照的です。このため、ISAPI アプリケーションは、CGI アプリケーションとスクリプトに比べて、高いパフォーマンスを提供します。

実行ファイルに対するセキュリティの考慮

Common Gateway Interface (CGI) 実行可能ファイルは、サーバーへの潜在的なセキュリティへの危険性を避けるために、十分な注意を払って使用しなければなりません。原則として、CGI や Internet Server API (ISAPI) アプリケーションを含む仮想ディレクトリには、実行アクセス権だけを与えるようにしてください。

スクリプト マッピングを設定することを強くお薦めします。スクリプト マッピングによって、クライアントが実行可能ファイルを要求したときに、正しいインタプリタ (たとえば Cmd.exe) が起動します。

World Wide Web の内容を含むディレクトリは読み込み専用にしてください。Windows NT ファイル システム (NTFS) からダウンロードされることを意図している実行ファイルには読み込みアクセスだけを有効にしてください。

バッチ ファイルを CGI 実行可能ファイルとして実行できます。ただし、サーバーへの潜在的なセキュリティの危険を避けるため、厳重な注意を払わなければなりません。

注意   CGI 実行可能ファイルのファイル名拡張子は .exe または .cgi です。

ISAPI アプリケーションに対する実行アクセス権

Peer Web Services は、呼び出したユーザーのコンテキストで ISAPI アプリケーションを開きます。アクセス チェックは、呼び出したユーザーに対して行われます。選択したユーザーだけに実行を制限するには、インターネット データベース コネクタ (IDC) といった ISAPI アプリケーションに対して NTFS アクセス権を使います。

たとえば、.idc にアクセス権を付加しないで IDC を安全に実行するには、Inetsrv\Httpodbc.dll に、適切なユーザーだけ NTFS 実行アクセス権を許可します。Httpodbc.dll は、IDC を実装する ISAPI アプリケーション DLL の名前です。そうすることで、ユーザーが IDC を実行しようとしたときにはいつでも、サーバーはアクセス権をチェックします。実行アクセス権を得ているユーザーだけがアクセスできます。

注意   一度 ISAPI アプリケーションがロードされると、WWW サービスが停止するまでロードされたままになります。Peer Web Services は、ISAPI アプリケーションがロードされた後までセキュリティ記述子の変更を追跡しません。ISAPI アプリケーションがロードされた後にアクセス権を変更したときには、その変更を有効にするために WWW サービスを停止して再起動する必要があります。

Winnt ディレクトリとそのサブディレクトリのアクセス コントロール リストに注意してください。ISAPI アプリケーションやデータベースの中には、これらのディレクトリにあるファイルや DLL へのアクセスが必要なものがあります。

注意   ISAPI アプリケーション DLL のファイル名拡張子は .dll または .isa です。

Peer Web Services へのアプリケーションのインストール

アプリケーションやスクリプトを作成したら、アプリケーション用の仮想ディレクトリである Scripts ディレクトリ にそれらを置きます。この仮想ディレクトリには実行のアクセス権を持たせます。

また、アプリケーションによって起動されるすべてのプロセスが、十分なアクセス権を持つアカウントを使って動作するようにしてください。たとえば、アプリケーションがほかのファイルを使用するときには、プログラムに割り当てるアカウントがファイルを使用するための適切なアクセス権を持っていることが必要となります。デフォルトでは、アプリケーションは IUSR_computername アカウントで動作します。このアカウントは、実行するアプリケーション ファイルについて、管理者アクセス権と実行アクセス権を持っていなければなりません。

アプリケーションの実行

通常、作成したアプリケーションがユーザーからのデータ入力を必要としない場合は、単純に HTML ファイルの中にそのアプリケーションへのリンクを作成します。ユーザーからのデータ入力を必要とする場合には、HTML のフォームを利用します。場合によっては、データのパラメータを含む Uniform Resource Locator (URL) 送信するだけでプログラムを起動することもできます。

たとえば、ユーザーからの入力が不要なアプリケーションへの HTML リンクは次のようになります。

http://www.company.com/scripts/catalog.exe

この例で、Scripts は対話型アプリケーションの仮想ディレクトリです。

ユーザーからの入力が必要なアプリケーションを作成するには、HTML フォームに関する知識のほかに、ISAPI または CGI によるフォームの使い方に関する知識が必要です。これらの詳細については、インターネットなどで入手できる情報を参照してください。

アプリケーションとインタプリタとの関連付け

アプリケーションの作成では、一般的なほとんどのプログラミング言語を使用できます。この柔軟性に対応するため、Peer Web Services は、個々のアプリケーションを起動するためのインタプリタを判断する際に、ファイル名の拡張子を使います。次の表に、デフォルトのインタプリタの関連付けを示します。この表に示されていない関連付けを追加するには、レジストリ エディタを使用します。

拡張子 デフォルトのインタプリタ
.bat, .cmd Cmd.exe
.idc Httpodbc.dll
.exe, .com システム

セキュリティ機構の実装

リモート ユーザーに対して自分のコンピュータにあるアプリケーションの起動を許可している場合、第三者が不正にシステムに侵入するという危険が常に伴います。Microsoft Peer Web Services は、このような不正な侵入の危険性を最小限に抑えるため、2 つの重要な機構がデフォルトで設定されています。

その 1 つは、Scrips という仮想ディレクトリにアプリケーションを格納する機構です。実行アクセス権のみ設定されたディレクトリには、管理者だけがプログラムを追加できます。したがって、許可されていないユーザーは、管理者権限を取得しない限り、有害なアプリケーションをコピーして、そのコンピュータ上で実行することはできません。

仮想フォルダに関連付けられたディレクトリに対して、IUSR_computername アカウントに読み込みアクセス権と実行アクセス権を許可し、管理者だけが完全なアクセスをできるようにすることを推奨します。Perl スクリプト (ファイル名拡張子 .pl) および IDC ファイル (ファイル名拡張子 .idc および .htx) は、読み込みアクセス権と実行アクセス権の両方が必要です。しかし、何者かが安全でないファイルをサーバーにインストールできないように、書き込みアクセス権は許可しないでください。

もう 1 つは、WWW サービスに対して匿名ログオンだけを許可するように設定している場合に、リモート ユーザーからのすべての要求で IUSR_computername アカウントが使用されるという機構です。デフォルトでは、管理者から特別にアクセス権を付与されていないかぎり、IUSR_computername アカウントでは Windows NT ファイル システム (NTFS) を使ってファイルの削除や変更を行うことはできません。これにより、万一有害なプログラムがコンピュータにコピーされた場合でも、そのプログラムはサーバーのコンピュータおよびファイルに対して IUSR_computername アクセス権しか持たないため、WWW の内容が大きく損傷を受けることはなくなります。


章の最初 データのパブリッシュとデータベースの利用

WWW サービスと Peer Web Services に付属の Open Data Base Connectivity (ODBC) を利用すれば、次のようなことが可能になります。

インターネット データベース コネクタの動作

Peer Web Services によって実行されるデータベースへのアクセスの概念図を次に示します。

08_i260f

Web ブラウザ (インターネット エクスプローラ、または Netscape Navigatorなどの他社製ブラウザ) は、HTTP を使用してインターネット サーバーに要求を送信し、その処理を一任します。これに応じて、インターネット サーバーは HTML 形式のドキュメントを返信します。データベースへのアクセスは、Peer Web Services のコンポーネントの 1 つであるインターネット データベース コネクタ (IDC) を通して実現されます。インターネット データベース コネクタ Httpodbc.dll は、ODBC を使用してデータベースにアクセスする ISAPI DLL です。

次の図は、Peer Web Services からデータベースに接続するためのコンポーネントを示したものです。

08_i260g

IDC は、データベースへのアクセス方法と、出力 Web ページのフォーマットを決めるために、インターネット データベース コネクタ (.idc) ファイルと HTML エクステンション (.htx) ファイルという 2 種類のファイルを使用します。

Web ページを含め、この 2 種類のファイルは同一の文字コード セットで記述されていなければなりません。シフト JIS 以外の文字コード セット (JIS および EUC) を使用する場合は、インターネット データベース コネクタ ファイル (.idc) 内に "Charset" フィールドを加え、使用文字コード セットを指定してください。"Charset" についての詳細は、インターネット データベース コネクタ (.idc) ファイルのフィールドを参照してください。

インターネット データベース コネクタ ファイルには、適切な ODBC データ ソースへの接続と SQL ステートメントの実行のために必要な情報が含まれています。また、HTML エクステンション ファイルの名前と位置も記述されています。

HTML エクステンション ファイルは、実際の HTML ドキュメントのテンプレートとなるものです。IDC によってデータベースの情報が埋め込まれた後に、Web ブラウザに返されます。

ODBC のインストールとシステム データ ソースの作成

セットアップ時に ODBC オプションを選択すると、ODBC version 2.5 のコンポーネントがインストールされます。ODBC version 2.5 は System DSN (Data Source Name) をサポートしており、Microsoft Peer Web Services で ODBC を利用する際に必要になります。

System DSN は、Windows NT のサービスから ODBC を使用できるようにするために ODBC version 2.5 で導入された機構です。

ODBC ドライバをインストールするには

システム データ ソースを作成するには


重要   必ず [システム DSN] ボタンをクリックしてください。インターネット データベース コネクタはシステム データ ソース名がなければ正常に動作しません。

32 ビット ODBC ドライバ

インターネット データベース コネクタは、32 ビット ODBC ドライバを必要とします。ODBC オプションについては、 ヘルプ ファイル、または Windows NT ODBC ヘルプ ファイルを参照してください。

Microsoft Access ODBC ドライバ

インターネット データベース コネクタは、Microsoft(R) Office 95 および Microsoft(R) Access 95 に同梱されている 32 ビット ODBC ドライバを必要とします。Microsoft Access 2.0 の ODBC ドライバは、Peer Web Services では使用できません。

データベース アクセスによる Web ページのオーサリング

Web ページから SQL のデータベースにアクセスするには、インターネット データベース コネクタ ファイル (拡張子 .idc) と、HTML エクステンション ファイル (拡張子 .htx) が必要になります。

サンプル データベース クエリーを見渡す

このサンプルは、Sample.htm と呼ばれる単純な Web ページです。このサンプル Web ページには、ひとつだけハイパーリンクがあります。ここをクリックすると Microsoft SQL Server の ODBC ドライバを使ったクエリーが実行され、その実行結果として他の Web ページが表示されます。

次の図は、Dbsamp1.htm を Microsoft インターネット エクスプローラで表示したときの画面です (Peer Web Services が "webserver" という名前のコンピューターにインストールされていると仮定しています)。

08_i260m

"ここをクリックするとクエリーが実行されます。" と書かれたハイパーリンクをクリックすると、別の Uniform Resource Locator (URL) がサーバーに送られます。URL は、次のような形で、このハイパーリンク文章のすぐ前につけられています (表示されないようになっています)。

<A HREF="http://webserver/samples/dbsamp/dbsamp1.idc">ここをクリックするとクエリーが実行されます。</A>

使われる IDC のインターネット データベース コネクタ ファイル (Dbsamp1.idc) が URL の中で参照されています。ファイル名拡張子マッピングがあるので、URL の中で Httpodbc.dll を参照する必要はありません。

Peer Web Services では、このサンプルでインターネット データベース コネクタを使うプロセス全体は、次のダイヤグラムで示されている通り、6 つの段階で処理されます。

08_i260n

08_i260o

Sample.htx ファイルを理解する

WWW クライアントにデータを返すために、.idc ファイルは HTML エクステンション .htx ファイルと、ODBC データをマージします。合成されたデータには、標準の HTTP ヘッダ (200 OK Status、Content-Type、など) がつけられ、WWW サービスに渡され、クライアントに返されます。

.htx ファイルは、< %% >または <!--%%--> で囲まれたタグが追加された HTML 文書です。idc ファイルは、このタグを使って、文書に動的データを追加します。.htx ファイル内の HTML の書式は、データが返される場合の一般的な書式です。データベースからのデータをどのように HTML の書式にマージするかを制御する 6 種類のキーワード (begindetail、enddetail、if、else、endif、および "%z") が、.htx ファイルの中にあります。データベースの列の名前は、どのデータが HTML 文書内に返されるかを指定します。たとえば、.htx ファイルの中の次の行は、処理されたそれぞれのレコードから Emailname 列のデータを取り出してマージします。

<%begindetail%><%Emailname%><%enddetail%>

Sample.htx ファイルは、データベースから返されるデータについてのインターネット データベース コネクタ タグを含んだ HTML 文書です (このタグはわかりやすいように太字で記述されています)。HTML の書式の一部は、IDC タグがわかりやすいように、取り除かれています。

<HTML>
<HEAD><TITLE>著者と年間売り上げ</TITLE></HEAD>
<BODY BACKGROUND="/samples/images/backgrnd.gif">
<BODY BGCOLOR="FFFFFF">
<TABLE>
<TR>
<TD><IMG SRC="/samples/images/SPACE.gif" ALIGN="top" ALT=" "></TD>
<TD><A HREF="/samples/IMAGES/db_mh.map"><IMG SRC="/SAMPLES/images/db_mh.gif" ismap BORDER=0 ALIGN="top" ALT=" "></A></TD>
</TR>
<tr>
<TD></TD>
<TD>
<hr>
<font size=2>
<CENTER>
<%if idc.sales eq ""%>
<H2>売り上げが <I>5000</I> 以上の著者</H2>
<%else%>
<H2>売り上げが <I><%idc.sales%></I> 以上の著者</H2>
<%endif%>
<P>
<TABLE BORDER>
<%begindetail%>
<%if CurrentRecord EQ 0 %>
<caption>検索結果:</caption>
<TR>
<TH><B>著者</B></TH><TH><B>年間売り上げ<BR>(US ドル)</B></TH>
</TR>
<%endif%>
<TR><TD><%au_lname%></TD><TD align="right">$<%ytd_sales%></TD></TR>
<%enddetail%>
<P>
</TABLE>
</center>
<P>
<%if CurrentRecord EQ 0 %>
<I><B>売り上げが </I><%idc.sales%> 以上の著者はいません。</B>
<P>
<%else%>
<HR>
<I>
この WEB ページは、SQL クエリー結果と SAMPLE.HTX テンプレート ファイルとを
結合して作成されています。
<P>
結合は、Microsoft Internet Database Connector によって行われ、
Microsoft Internet Information Server によって結合結果が
この WEB ブラウザに送られています。
</I>
<%endif%>
</font>
</td>
</tr>
</table>
</BODY>
</HTML>

<%begindetail%> セクションと <%enddetail%> セクションが、データベースから返された行が文書中のどこに表示されるかを区切っています。クエリーから返された列は、<%%> で囲んで表示されます。この例では、 <%au_lname%> と <%ytd_sales%> のようになっています。

インターネット データベース コネクタの機能を学ぶ

インターネット データベース コネクタには、データベースから渡されたデータを含む Web ページを作成するために便利な機能がいくつかあります。

インターネット データベース コネクタ ファイル

インターネット データベース コネクタ ファイルには、データベースへのアクセスに使われる情報を含んでいます。次の節では、インターネット データベース コネクタ ファイルの機能について説明します。

パラメータ

前の節の例では、インターネット データベース コネクタ ファイルの中でクエリーが完全に定義されているという、最も単純なタイプのクエリーしか示しませんでした。しかし、このタイプのクエリーは便利で、パラメータを使ったものよりもさらに強力な Web ページを作成することもできます。パラメータは、"<INPUT...>" のような HTML のフォーム コントロールの名前と値、および、URL の中で直接指定した名前です。この名前と値は、Web ブラウザによって送られ、サーバーの SQL ステートメントで利用することができます。

たとえば、先ほどの節では Sample.idc のクエリーは、売り上げが 5000 以上の著者しか返しませんでした。パラメータを使うことで、ユーザーに 5000 のかわりにどの数を使うかを決めてもらう Web ページを作成できます。

この Web ページは、売り上げの数値をユーザーに尋ね、それに関連する変数を "sales" と名付けます。Dbsamp2.htm は、数値を受け取るための入力フィールドがついたフォームを表示します。

08_i260p

Sample2.htm で使われている、入力フィールドとボタンのための書式は次の通りです。

<FORM METHOD="POST" ACTION="/scripts/samples/sample2.idc">
<P>
年間売上数を入力してください: <INPUT NAME="sales" VALUE="5000" >
<P>
<INPUT TYPE="SUBMIT" VALUE="クエリーを実行">
</FORM>

インターネット データベース コネクタ ファイル Sample2.idc では、数値 5000 のかわりに、太字で示されたパラメータを使用します。

SQLStatement:
+SELECT au_lname, ytd_sales
+ from pubs.dbo.titleview
+ where ytd_sales > %sales%

ここで、パラメータ名は "sales" でなければいけません。これは Web ページの <INPUT NAME= "sales"> と関係しているからです。パラメータは、SQL の通常の識別子と区別するために百分率記号 (%) で囲む必要があります。インターネット データベース コネクタは、.idc ファイルの中にパラメータを見つけると、Web ブラウザから送られた値に置き換えて、それから ODBC ドライバに SQL ステートメントを送ります。

百分率記号 (%) は、SQL ではワイルドカード文字としても使われます。SQL クエリーのなかで ワイルドカードを使うことで、表の中から特定の文字列を含む要素だけを探すことができます。SQL ワイルドカードのために "%" を 1 文字入れるには、"%%" と入力してください。これにより、IDC はこの % をパラメータの印として使わないようになります。たとえば、次のようにします。

SQLStatement:
+SELECT au_lname, ytd_sales, title
+ from pubs.dbo.titleview
+ where title like '%%%title%%%'

SQL ワイルドカードとして使うために百分率記号を 2 つ並べた後、文字列をパラメータとして囲むためにさらに 1 つ百分率記号をつけます。この例では、クエリーはタイトル列に title という単語を含むすべてのエントリを検索します。このクエリーは次のようなものを返します。

title
title and deed
main title page
author and title

最初の 5 文字に title と書かれたすべてのエントリを返すには、次のようにクエリーを記述します。

SQLStatement:
+SELECT au_lname, ytd_sales, title
+ from pubs.dbo.titleview
+ where title like '%title%%%'

この例では、次のような結果が返されます。

title
title and deed

最後の 5 文字に title と書かれたすべてのエントリを返すには、次のようにクエリーを記述します。

SQLStatement:
+SELECT au_lname, ytd_sales, title
+ from pubs.dbo.titleview
+ where title like '%%%title%'

この例では、次のような結果が返されます。

title
author and title

クエリーの出力で、他のクエリーへのリンクを作成することで、より強力な Web ページを作り出すことができます。たとえば、著者の名前を普通のテキストで返すかわりに、リンク書式を使って、そのリンクで他のクエリーを動かしてそれぞれの著者の著書名を見せる、といったことができます。

Peer Web Services にある別の例では、この種類のリンクをどのようにして行うかを示しています。Dbsamp3.htm を使うと、Sample3.idc のクエリーが実行され、Sample3.htx を出力テンプレートとして結果を返します。Sample3.htx は、著者のラストネームをリンクで返し、そこをクリックすると、Sample3a.idc と Sample3.htx を使ってそれぞれの著者の著書名を表示するようになっています。

インターネット データベース コネクタ (.idc) ファイルのフィールド

次の表に、インターネット データベース コネクタ ファイルに指定できるフィールド一覧です。パラメータまたはサーバー変数は、.idc ファイルの任意の場所に現れることに注意してください。

インターネット データベース コネクタ (.idc) ファイル内の必須フィールド

フィールド 説明
Datasource ODBC Administrator またはサンプルで提供されたツールを使って、以前に作成した ODBC システム データ ソース名 (DSN) に一致する名前。
Template このクエリーから返されたデータをフォーマットするHTML エクステンション ファイルの名前。通常これらのファイルは、拡張子 .htx を使います。
SQLStatement 実行する SQL ステートメント。SQL ステートメントは、パラメータ値を含むことができます。パラメータ値は、クライアントから百分率記号 (%) で囲まれている必要があります。SQL ステートメントは、インターネット データベース コネクタ ファイルで複数の行を占めることができます。SQLStatement フィールドに続く、プラス記号 (+) で始まる各行は、SQLStatement フィールドの一部とみなされます。複数の SQLStatements が同じファイルに現れることができます。

インターネット データベース コネクタ (.idc) ファイル内のオプション フィールド

フィールド 説明
Charset HTM、HTX、IDC の各ファイルで使用する文字コードを指定します。この 3 種類のファイルは、同じ文字コードで記述されている必要があります。JIS の場合は iso-2022-jp、EUC の場合は x-euc-jp、シフト JIS の場合は x-sjis を指定します。指定しない場合には x-sjis になります。
DefaultParameters = param=value

[, param=value]
[...]

インターネット データベース コネクタ ファイルにおいて、クライアントがパラメータを指定しない場合に使われるパラメータ値のデフォルト (もしあれば)。
Expires キャッシュに保存された出力ページを更新するまでに待機する秒数。同一の要求が続くのであれば、データベースにアクセスすることなく、キャッシュに保存されたページが返されるので、Expires フィールドは便利です。一定の時間が経過した後に、データベースの再クエリーを強制するのに便利です。IDC は、デフォルトでは、出力ページをキャッシュに保存しません。IDC は、Expires フィールドが使われている場合のみ、キャッシュに保存します。
MaxFieldSize フィールド単位で IDC によって割り当てられる最大バッファ容量です。これを超える文字は、すべて省略されます。このパラメータは、8192 バイトを超える、データベースから返されるフィールドにのみ適用されます。デフォルトの値は、8192 バイトです。
MaxRecords IDC が 1 回のクエリーで返す最大のレコード数です。MaxRecords の値は、デフォルトでは設定されていません。これは、クエリーが40 億までのレコードを返せるということを示しています。返されるレコード数を制限するには、この値を設定します。
ODBCConnection このフィールドに pool の値を挿入して、接続プールとの接続を追加します。接続プールは、データベースとの接続を将来の要求のために開いたままにしておきます。このとき、プールされた接続を通じて、 Datasource、Username、および Password と同じ値を含む .idc ファイルを続いて実行するために、IDC はデータを送信します。このオプションを設定すると、インターネット データベース コネクタを使用したパフォーマンスが改善されます。また、このオプションを設定する .idc ファイルの接続が接続プールから確保されないように指定する nonpool オプションもあります。接続のキャッシュのをより精密に管理するには、このフィールドの値を nopool に設定します。また、 現在の接続数に制限がある場合、すべての接続を接続プールに独占させないでください。さもなければ、すべてのユーザーが SQL Server に接続できなくなります。

注意 接続プールのデフォルトを設定するには、PoolIDCConnections レジストリ エントリを 1 に設定する必要があります。詳細については、「第 10 章 レジストリ エントリの設定」を参照してください。

Password ユーザー名に対応したパスワードです。パスワードが空の場合、このフィールドは省略可能です。
RequiredParameters Httpodbc.dll が確保するパラメータ名は、(もしあれば) クライアントに渡されます。それ以外の場合は、エラーを返します。パラメータ名は、カンマで区切ります。
Translationfile ブラウザが適切に HTML 形式で (à、ô、éといった) 非英語文字を表示できるよう、それらをマップするファイルへのパスです。ファイルが .idc ファイルと同じディレクトリに無い場合、トランスレーション ファイルのフルパスを入力する必要があります。構文 : Translationfile: C:\directoryname\filename。英語以外の言語でデータベースをパブシッリュする場合は、Translationfile フィールドを使ってください。トランスレーション ファイルは、value=string の形式で特殊文字がマップされたテキスト ファイルです。ここで、value は国際文字、string は HTML トランスレーション コードです。
Username Datasource フィールドで指定されているデータ ソース名に有効なユーザー名です。

注意 Microsoft SQL Server を統合セキュリティ オプションとともに使っている場合、.idc ファイル内のユーザー名とパスワードのフィールドは、無視されます。SQL Server へのログオンは、Web ユーザーの認証を使って実行されます。要求が匿名ユーザーとして行われた場合、ユーザー名とパスワードは、インターネット サービス マネージャ内の匿名ユーザーの設定 (デフォルトでは、IUSR_computername) によって決定されます。クライアントの要求がログオン認証を含んでいる場合、エンド ユーザーによって供給されるユーザー名とパスワードが、SQL Server へのログオンに使用されます。

Content-Type クライアントに何が返されるかを記述する、任意の有効な MIME タイプです。.htx ファイルが HTML を含んでいる場合、ほとんど常に、"text/html" です。

ODBC Advanced Option フィールド

ODBC Advaced Option は、インターネット データベース コネクタが使用する ODBC ドライバのデバッグと微調整を可能にします。これらのオプションの詳細については、ODBC ドライバのマニュアルを参照するか、ODBC Software Development Kit (SDK) を参照してください。IDC ファイルの形式は、次のとおりです。

ODBCOptions: Option Name=Value[,Option Name=Value...]

たとえば、SQL ステートメントが 10 秒以上実行し続けないようにし、ODBC 関数呼び出しの記録を可能にするには、IDC ファイル内で、次のように指定します。

ODBCOptions: SQL_QUERY_TIMEOUT=10, SQL_OPT_TRACE=1, SQL_OPT_TRACEFILE=C:\Sql.log

次の表に、すべてのオプションを説明します。

オプション名 目的
SQL_ACCESS_MODE 0 = 読み取り/書き込み

1 = 読み取りのみ

接続が更新を引き起こす SQL ステートメントをサポートする必要がないODBC ドライバまたはデータ ソースの指示子です。このモードを使って、ロック ストラテジ、トランザクション管理やドライバまたはデータソースに適した領域を最適化することができます。このようなドライバは、更新をともなう SQL ステートメントを、データ ソースに送信されるのを防ぐ必要がありません。 読み取りのみの接続の最中に読み取りのみでない SQL ステートメントを処理するよう要求されたときのドライバとデータ ソースの動作は、定義実行です。SQL_ACCESS_MODE は、デフォルトでは 0 に設定されます。これは、読み取りと書き込みを許します。
SQL_LOGIN_TIMEOUT 整数 接続を切断するのにログオン要求が待機する秒数です。デフォルトは、ドライバ依存で、0 でない必要があります。値が 0 の場合、タイムアウトはオフになり、接続試行は、無限に待機します。指定されたタイムアウトが、データ ソースの最大ログオン タイムアウトを超えている場合は、ドライバはその値に代替します。
SQL_OPT_TRACE 0 = トレース オフ

1 = トレース オン

トレースがオンのとき、Httpodbc.dll によってなされる各 ODBC 関数呼び出しは、トレース ファイルに書き出されます。SQL_OPT_TRACEFILE オプションを使ってトレース ファイルを指定できます。ファイルがすでに存在する場合は、ODBC はそのファイルに追加します。それ以外の場合は、そのファイルを作成します。トレースがオンで、トレース ファイルが指定されていない場合は、ODBC はファイル Sql.log に書き出します。
SQL_OPT_TRACEFILE ファイル名 SQL_OPT_TRACE=1 の場合に使用されるトレース ファイルの名前です。デフォルトは SQL.LOG です。
SQL_PACKET_SIZE 整数 データベース管理システム (DBMS) と Web サーバーとの間で情報を交換するネットワーク パケット サイズ (バイト単位) です。 注意 多くのデータ ソースが、このオプションをサポートしていないか、またはネットワーク パケット サイズだけを返します。指定されたサイズが最大パケット サイズを超過している場合、または最小パケット サイズより小さい場合は、ドライバはこの値を代替します。
SQL_TRANSLATE_DLL ファイル名 ドライバがロードして、文字セットの変換のようなタスクを実行するのに使う、SQLDriverToDataSource 関数と SQLDataSourceToDriver 関数を含む DLL の名前です。
SQL_TRANSLATE_OPTION 整数 使用される変換 DLL に固有の変換機能を管理する値です。詳細については、ドライバと変換 DLL のマニュアルを参照してください。
SQL_TXN_ISOLATION 整数

1=Read Uncommited

2=Read Committed

4=Repeatable Read

8=Serializable

16=Versioning

トランザクション分離レベルを設定します。インターネット データベース コネクタは、.idc ファイルに指定できる以外のトランザクションの分離レベルをサポートしていません。 ただし、一部の DBMS では、SQL_TXN_ISOLATION オプションを 1 (Read Uncommited) に設定すると、高度の並列性をもたらし、このためより良いパフォーマンスが得られます。ただし、この設定では、ほかのトランザクションにりコミットされないデータは、回復されます。
SQL_MAX_LENGTH 整数 ドライバが、文字列またはバイナリ列から返すデータの最大量です。このオプションは、ネットワーク トラフィックを削減することを意図しており、(ドライバに対置された) 複数の段のデータ ソースがそれを実行できる場合にのみ、使用してください。
SQL_MAX_ROWS 整数 SELECT ステートメントに返される最大行数です。値が 0 (デフォルト) に等しい場合、ドライバはすべての行を返します。このオプションは、インターネット データベース コネクタ内の組込み関数 MaxRecords に対置された、データ ソース自体が返される行を制限できるときに、ネットワーク トラフィックを削減する場合に使用します。
SQL_NOSCAN 0=エスケープ句をスキャンしてコンバートします

1=エスケープ句をスキャンしないでコンバートします

ドライバがエスケープ句で SQL 文字列をスキャンするかどうかを指定します。0 (デフォルト) に設定されている場合、ドライバは、エスケープ句で SQL 文字列をスキャンします。1 に設定されている場合、ドライバは、エスケープ句で SQL 文字列をスキャンせず、その代わりに、ステートメントを直接データ ソースに送ります。SQL ステートメントが ODBC エスケープ句をまったく含まず、大括弧 ( { } ) で囲まれた特別の構文がある場合、このオプションを 1 に設定すると、SQL 文字列をスキャンしないようドライバに指示して、パフォーマンスを少しだけ向上させます。
SQL_QUERY_TIMEOUT 整数

0=タイムアウトなし

クエリーをキャンセルするのに SQL ステートメントが待機する秒数です。0 (デフォルト) に設定されている場合、タイムアウトはありません。指定されたタイムアウトがデータ ソースの最大タイム アウトを超過しているか、または最小タイムアウトよりも小さい場合、ドライバはこの値を代替します。
Integer ドライバ依存 ドライバ依存のオプション値は、number=value の形式で指定されます。たとえば、次のようになります。 4322=1, 234=String

HTML フォームで複数選択可能なリスト ボックスを使用する

<SELECT MULTIPLE...> タグを使っている HTML フォームを使うと、インターネット データベース コネクタは、選択された項目をカンマで区切ったリストにして返します。このリストは、他のパラメータと同様に .idc ファイルの中で使うことができます。しかし、パラメータが実際にリストになっているので、通常は下の例で示すように SQLSelect ステートメントの IN 句でしか使いません。 .idc ファイルのパラメータ名が単一引用符で囲まれている場合は、リストの各要素もそれぞれ単一引用符で囲まれます。 IN 句の列が、文字列型やその他のリテラルを引用符で囲うことのできる型 (日付と時刻など) である場合は、かならずパラメータ名を単一引用符で囲うようにしてください。パラメータ名が単一引用符で囲まれていない場合は、リストの各要素には引用符は付加されません。IN 句の列が、数値型やその他のリテラルを引用符で囲うことのできない型の場合は、パラメータ名を単一引用符で囲ってはいけません。

例として、HTML フォームのなかに下に示すような複数選択のリストボックスがあるとします。

<SELECT MULTIPLE NAME="region">
<OPTION VALUE="Western">
<OPTION VALUE="Eastern">
<OPTION VALUE="Northern">
<OPTION VALUE="Southern">
</SELECT>

このとき、.idc ファイルでは、次のような SQL ステートメントを使います。

SQLStatement: SELECT name, region FROM customer WHERE region IN ('%region%')

ユーザーが "Northern"、"Western"、および "Eastern" をこの HTML フォームから選択した場合は、この SQL ステートメントは次のように変換されます。

SELECT name, region FROM customer WHERE region IN ('Northern', 'Western', 'Eastern')

HTML フォームのもう 1 つの例を次に示します。こちらは数値データを使っているので、.idc ファイルのパラメータには引用符が付けられていません。

<SELECT MULTIPLE NAME="year">
<OPTION VALUE="1994">
<OPTION VALUE="1995">
<OPTION VALUE="1996">
</SELECT>

このとき、.idc ファイルでは、次のような SQL ステートメントを使います。

SQLStatement: SELECT product, sales_year FROM sales WHERE sales_year IN (%year%)

ユーザーが "1994" および "1995" をこの HTML フォームから選択した場合は、この SQL ステートメントは次のように変換されます。

SELECT product, sales_year FROM sales WHERE sales_year IN (1994, 1995)

バッチ クエリーと多重クエリーを使う

.idc ファイルでは、SQL クエリーを、バッチ クエリーと多重クエリーという 2 通りの方法でグループ化できます。

バッチ クエリー

ひとつの SQL ステートメントで、いくつものクエリーを同時に処理できるデータベース (たとえば SQL Server データベース) に対してクエリーを行う場合、パフォーマンスを向上させるために、バッチ クエリー構文を使ってステートメントを記述してください。たとえば、次のようにします。

SQLStatement:
+insert into perf(testtime, tag) values (getdate(), '%tag%')
+SELECT au_lname, ytd_sales from pubs.dbo.titleview where ytd_sales>5000
+SELECT count(*) as nrecs from pubs.dbo.titleview where ytd_sales>5000

多重クエリー

一連の SQL クエリーを同時に処理できないデータベースに対してクエリーを行う場合、多重クエリーとしてクエリーを構成してください。たとえば、次のようにします。

SQLStatement:
+insert into perf(testtime, tag) values (getdate(), '%tag%')
SQLStatement:
+SELECT au_lname, ytd_sales from pubs.dbo.titleview where ytd_sales>5000
SQLStatement:
+SELECT count(*) as nrecs from pubs.dbo.titleview where ytd_sales>5000

バッチ クエリーは、すべて同時に実行されますが、多重クエリーは 1 つずつ処理されます。そのため、データベースがバッチ クエリーを取り扱えるときには、バッチとしてクエリーを構成するほうが、パフォーマンスが向上するでしょう。

HTML エクステンション (.htx) ファイル

HTML エクステンション ファイルには、出力の HTML 文書をどのように構築するかを制御するたくさんのキーワードが含まれています。以下の節では、このキーワードについて説明します。

<%begindetail%>, <%enddetail%>

<%begindetail%> キーワードと <%enddetail%> キーワードは、HTML エクステンション ファイルの中で、データベースからのデータの出力がマージされる領域を囲みます。その領域の中では、列の名前を <% と %> または <!--%%--> で囲んだものが、クエリーから返されたデータを埋め込む場所を示すために使われます。たとえば、次のようになります。

<%begindetail%>
<%au_lname%>: <%ytd_sales%>
<%enddetail%>

この例は、au_lname と ytd_sales の 2 つの列の一覧を出力します。どの列もこの方法で参照できます。列名は、HTML エクステンション ファイルの他のどの場所で使用してもかまいません。

注意クエリーから返されるレコードがない場合、<%begindetail%> の領域はスキップされます。結果の集合を返す SQL ステートメント (たとえば SELECT) が複数ある場合は、それぞれに対応するように、<%begindetail%> <%enddetail%> 領域を .htx ファイル中に置くようにします。

<%if%>, <%else%>, <%endif%>

HTML エクステンション ファイルには、どのように Web ページが構成されるかをコントロールするために、if-then-else 文による条件論理を含めることができます。たとえば、一般的な使い方としては、クエリーの結果を表示する <%begindetail%> 領域の最初の行に条件を挿入して、クエリーから返された結果のレコードがなかった場合には、"Sorry, no authors had YTD sales greater than" %idc.sales%. と表示させるようにすることです。<%if%> ステートメントと、埋め込み変数 "CurrentRecord" を使うことで、返されたレコードがなかったときにはエラー メッセージを表示するように出力を仕立てることができます。<%if%> ステートメントの使い方の例を次に示します。

<%begindetail%><%if CurrentRecord EQ 0 %>

クエリーの結果です

<B>Author YTD Sales<BR></B>
<%endif%>
<%au_lname%>
<%ytd_sales%>
<%enddetail%>
<P>
<%if CurrentRecord EQ 0 %>
<I><B>Sorry, no authors had YTD sales greater than </I><%idc.sales%>.</B>
<P>
<%else%>
<HR>
<I>
The Web page you see here was created by merging the results of the SQL query with the template file Sample.htx.
<P>
The merge was done by the Microsoft Internet Database Connector and the results were returned to this Web browser by the Microsoft Peer Web Services
</I>
<%endif%>

</BODY>
</HTML>

一般的な書式は次の通りです。

<%if condition %>
HTML text
[<%else%>
HTML text]
<%endif%>

ここで、condition は次の形をしています。

そして、operator には次のいずれかを使用できます。

operator 説明
EQ value1 と value2 が等しいか
LT value1 が value2 より小さいか
GT value1 が value2 より大きいか FONT>
CONTAINS value1 の一部分に文字列 value2 が含まれているか

オペランド value1 および value2 には、列名、埋め込み変数のひとつ (CurrentRecord または MaxRecords。この下を参照してください)、HTTP 変数名 (以下を参照してください)、あるいは定数を指定できます。<%if%> ステートメントの中で使うときには、変数は <% と %> で囲む必要はありません。たとえば、"Green" という名前の著者に対して特別な処理を行いたい場合は、次の条件文を使います。

<%begindetail%>
<%if au_lname EQ "Green"%>
this guy is green!
<%endif%>
<%enddetail%>

<%if%> ステートメントは、また、HTTP 変数の情報に基づいて特別な処理を行わせるためにも使用できます。たとえば、クライアントの Web ブラウザの種類によって異なるページを表示するには、次のような記述を HTML エクステンション ファイルに埋め込みます。

<%if HTTP_USER_AGENT contains "Mozilla"%>
client supports advanced HTML features
<%else%>
client is <%HTTP_USER_AGENT%>
<%endif%>

CurrentRecord, MaxRecords

埋み込み変数 CurrentRecord には、<%begindetail%> が処理された回数が入ります。最初に <%begindetail%> を通るときには、値は 0 です。その後、データベースから別のレコードを受け取るたびに、毎回 CurrentRecord の値は変化します。 埋め込み変数 MaxRecords には、インターネット データベース コネクタ ファイルの MacRecored フィールドの値が入ります。MacRecords と CurrentRecord は <%if%> ステートメントの中でのみ利用可能です。

インターネット データベース コネクタ ファイルからのパラメータ

インターネット データベース コネクタ ファイルからのパラメータを、HTML エクステンション ファイルからアクセスするときには、パラメータの名前の頭に "idc" とピリオドをつけます。先に示した Sample3.htx では、パラメータ %sales% の値を示すために、次のような行を入れています。

The value of the sales parameter is: <%idc.sales%>

HTTP 変数

HTML エクステンション ファイルの変数の中には、サーバーに接続した Web クライアントと、環境についてのたくさんの情報が入っているものがあります。加えて、クライアントが送ったすべてのヘッダが利用可能です。インターネット データベース コネクタを使ってこれらのものにアクセスするには、名前を変換しなければなりません。


次の表は、デフォルトの変数の一覧です。これらは、CGI アプリケーションには環境変数として、IDC アプリケーションには HTTP 変数として渡されます。

Peer Web Services サーバー変数


変数 意味
ALL_HTTP すべての HTTP ヘッダはこの一覧の変数のように処理されていない形で含まれています。この変数は HTTP_<ヘッダ フィールド名> の形式をしています。たとえば、次のようになっています。

HTTP_ACCEPT: */*, q=0.300, audio/x-aiff, audio/basic, image/jpeg, image/gif, text/plain, text/html

HTTP_USER_AGENT: Microsoft Internet Explorer/0.1 (Win32)

HTTP_REFERER: http://webserver/samples/dbsamp/dbsamp3.htm

HTTP_CONTENT_TYPE: application/x-www-form-urlencoded

HTTP_CONTENT_LENGTH: 10

AUTH_TYPE 使用されている認証のタイプです。ユーザー名がサーバーに認証されている場合、Basic が含まれます。それ以外の場合は存在しません。
CONTENT_LENGTH スクリプトがクライアントから受け取ると予想しているバイト数です。
CONTENT_TYPE POST 要求の本体で渡された情報の内容の種類です。
GATEWAY_INTERFACE このサーバーが準拠している CGI (Common Gateway Interface) 指定のリビジョンです。
HTTP_ACCEPT 特別な種類の HTTP ヘッダです。Accept フィールドの値が連結され、カンマ (,) で区切られます。たとえば、HTTP ヘッダの一部が次のようになっているとします。

accept: */*; q=0.1

accept: text/html
accept: image/jpeg

HTTP_ACCEPT 変数は、次の値を持ちます。

*/*; q=0.1, text/html, image/jpeg
LOGON_USER このユーザーの Windows NT アカウントです。
PATH_INFO クライアントによる、追加のパス情報です。これは、URL の中の、スクリプト名の後、クエリー文字列の前にある部分 (もしあれば) です。
PATH_TRANSLATED PATH_INFO の値ですが、仮想パス名がディレクトリしていに展開されています。
QUERY_STRING このスクリプトを参照した URL で疑問符 (?) の後に続く情報です。
REMOTE_ADDR クライアントの IP アドレスです。
REMOTE_HOST クライアントのホスト名です。
REMOTE_USER クライアントによって供給され、サーバーに認証されたユーザー名です。
REQUEST_METHOD HTTP 要求のメソッドです。
SCRIPT_NAME 実行されているスクリプト プログラムの名前です。
SERVER_NAME 自分を参照する URL の中で現れる、サーバーのホスト名 (または IP アドレス) です。
SERVER_PORT 要求を受け取った TCP/IP ポートです。
SERVER_PORT_SECURE 値は 0 または 1 です。1 の場合は、要求が暗号化されたポートから行われたことを示します。
SERVER_PROTOCOL この要求に関連して情報を取り出すプロトコルの名前とバージョンです。通常は HTTP/1.0 です。
SERVER_SOFTWARE インターネット サーバー エクステンションが動作している Web サーバーの名前とバージョンです。
URL 要求の URL です。


目次索引前の章章の最初次の章

(C) 1996 by Microsoft Corporation. All rights reserved.