出版

XML、ADO、ASP を組み合わせる方法を知りたいですか? Web 開発ゾーン TechMail で概要が説明されているこのプロジェクトでは、これら 3 つすべてを使用して電話番号リスト プログラムを作成します。
編集者注:この記事は元々、TechRepublicのWeb開発ゾーン「TechMail」に掲載されたものです。購読すると、Web開発関連のプロジェクトやトレンドに関する情報を受け取ることができます。
今週は、Active Server Pages (ASP) で拡張マークアップ言語 (XML) と ActiveX データ オブジェクト (ADO) を使用します。最新バージョンの Internet Information Server (IIS 5) と ADO (2.6) では、レコードセット オブジェクトのデータを XML として永続化し、ASP レスポンス オブジェクトに直接保存できるようになりました。
このPhonelist.aspプロジェクトは、基盤となるAccessデータベースを作成することから始まりました。あらゆる企業に役立つシンプルなデータセットを開発するというアイデアでした。まず、テーブルに「contacts」という名前を付け、「FirstName」、「LastName」、「Location」、「Phone」の4つのフィールドを追加しました。XMLとXSL(Extensible Stylesheet Language)は大文字と小文字が区別されるため、フィールド名がXSLスタイルシートの定義と一致していることを確認してください。
シリーズ第3弾
TechRepublicのWeb Development Zoneに掲載されたこの記事では、XMLとActive Server Pages(ASP)の統合に関する問題について解説しています。第1回の記事ではXMLとXSLの統合について、第2回の記事ではNetscapeや携帯端末ユーザー向けのXMLとXSLの表示について解説しました。
このプロジェクトのASPは、データを取得してXML形式で返すという、1つの主要な機能のみを提供します。まず、コンテンツタイプをtext/xmlに指定します。次に、XMLヘッダー情報と、XMLデータの書式設定に使用するスタイルシートのリンク情報を追加します。最後に、データを取得するためのADOレコードセットオブジェクトを作成します。ここでXMLテクノロジのシンプルさが大いに役立ちます。レコードセット全体をループ処理したり、ASP内でデータの書式設定と表示を行うためにHTMLとスクリプトコードを混在させたりする代わりに、レコードセットを開いてデータをXML形式でレスポンスオブジェクトに保存するだけです。
以前のTechMailsでも書いたように、開発者がXSLを使ってデータをフォーマットし、表示できる容易さは実に魅力的です。プロセスをシンプルにすればするほど、問題が発生する可能性は低くなります。
ADO MDAC リリース 2.6 の詳細情報とダウンロードについては、Microsoft Universal Access Data Web サイトを参照してください。
以下は Phonelist.asp プログラムのコードです。
<%@ Language=VBScript %>
<%
Response.ContentType = “text/xml”
Response.Write “<?xml version=””1.0″” ?>” & vbcrlf
Response.Write “<?xml-stylesheet type=””text/xsl”” ” & _
“href=”#”PhoneList.XSL”” ?>” & vbcrlf & vbcrlf
rsContacts を Server.CreateObject(“ADODB.Recordset”) に設定し、
dataConnStr を “Provider=Microsoft.Jet.OLEDB.4.0;” & _
“ユーザー ID=Admin;データ ソース=D:\Inetpub\wwwroot\ASP_Utils\PhoneList.mdb;” & _
“モード=共有拒否なし;拡張プロパティ=””””;” & _
“Jet OLEDB:システム データベース=””””;Jet OLEDB:レジストリ パス=””””;” & _
“Jet OLEDB:データベース パスワード=””””;Jet OLEDB:エンジンの種類=5;” & _
“Jet OLEDB:データベース ロック モード=1;Jet OLEDB:グローバル部分的一括操作=2;” & _
“Jet OLEDB:グローバル一括トランザクション=1;Jet OLEDB:新しいデータベース パスワード=””””;” & _
“Jet OLEDB: システム データベースの作成 = False;Jet OLEDB: データベースの暗号化 = False;” & _
“Jet OLEDB: 圧縮時にロケールをコピーしない = False;Jet OLEDB:” & _
“レプリカ修復なしで圧縮 = False;Jet OLEDB:SFP = False;ユーザー ID = Admin;”
sql = “SELECT LastName + ', ' + FirstName AS Name, ” & _
“Phone, Location FROM Contacts ORDER BY LastName”
rsContacts.ActiveConnection = dataConnStr
rsContacts.Source = sql
rsContacts.CursorLocation = 3'クライアント側カーソルを使用
rsContacts.Open
rsContacts.ActiveConnection = nothing
rsContacts.Save 応答、1 'adPersistXML
Set rsContacts = Nothing
%>
Phonelist.xsl ファイルのソース:
<HTML xmlns:xsl=”http://www.w3.org/TR/WD-xsl”>
<TITLE>Company Phone List</TITLE>
<STYLE>
.Table {background:black}
.TableHead {font:bold; color:white; background:blue}
.ColumnHeader {font:normal 'Verdana' bold; color:white; background:blue}
.TableRow {font:x-small 'Verdana'; color:black; background:#CCCCCC}
</STYLE>
<BODY>
<DIV >
<TABLE CLASS=”Table” ID=”RecordTable”>
<THEAD>
<TR CLASS=”TableHead”>
<TH CLASS=”ColumnHeader”>Name</TH>
<TH CLASS=”ColumnHeader”>Location</TH>
<TH CLASS=”ColumnHeader”>Phone</TH>
</TR>
</THEAD>
<xsl:for-each select=”xml/rs:data/z:row”>
<TR CLASS=”TableRow”>
<TD><xsl:value-of select=”@Name” /></TD>
TD align=”center”><xsl:value-of select=”@Location” /></TD>
<TD><xsl:value-of select=”@Phone” /></TD>
</TR>
</xsl:for-each>
</TABLE>
</DIV>
</BODY>
</HTML>
XML の詳細については、MSDN Online の XML 開発者センターを参照してください。

レシャミ・ベルサウス