今回のヒントで使用するインスタンス・データをリスト 1 に示します。
リスト 1. インスタンス文書
<auctionItems xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<auctionItem itemID="2">
<purchaseDate>2006-09-18</purchaseDate>
<auctionLength>600</auctionLength>
<purchasePrice>10</purchasePrice>
<description>Vintage hair dryer</description>
<estimatedValue>N/A</estimatedValue>
</auctionItem>
<auctionItem itemID="5">
<purchaseDate>2006-09-18</purchaseDate>
<auctionLength>300</auctionLength>
<purchasePrice>4</purchasePrice>
<description>Box Lot</description>
<estimatedValue>N/A</estimatedValue>
</auctionItem>
</auctionItems>
|
次に、Perl スクリプトをコールするために必要なフォームを見てみましょう。
Perl スクリプトに POST リクエストを行う方法は、HTML を使った場合と似ています。リスト 2 に示すフォームを見てください。
リスト 2. Perl スクリプトにリクエストを送信する
<?xml version="1.0" encoding="ASCII"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xforms="http://www.w3.org/2002/xforms">
<head>
<title>Instance Data-To-XHTML/XForms Example</title>
<xforms:model id="auctionItems">
<xforms:instance src="auctions.xml"/>
<xforms:submission id="submit_model_auctionItems"
action=http://localhost/cgi-bin/xformsPerl.pl
method="post"/>
</xforms:model>
<link href="gen_default.css" rel="stylesheet"/>
</head>
<body>
<h1 align="center">Auction Item Inventory</h1>
<xforms:repeat nodeset="auctionItem" id="repeatAuctionItems">
<h2 align="center">Auction Item</h2>
<xforms:input ref="@itemID">
<xforms:label>Item ID</xforms:label>
</xforms:input>
<xforms:input ref="purchaseDate">
<xforms:label>Purchase Date</xforms:label>
</xforms:input>
<xforms:input ref="auctionLength">
<xforms:label>Auction Length</xforms:label>
</xforms:input>
<xforms:input ref="purchasePrice">
<xforms:label>Purchase Price</xforms:label>
</xforms:input>
<xforms:input ref="description">
<xforms:label>Description</xforms:label>
</xforms:input>
<xforms:input ref="estimatedValue">
<xforms:label>Estimated Value</xforms:label>
</xforms:input>
</xforms:repeat>
<xforms:group>
<xforms:trigger>
<xforms:label>Insert Auction Item</xforms:label>
<xforms:insert nodeset="auctionItem"
at="index('repeatAuctionItems')"
position="after" ev:event="DOMActivate" />
</xforms:trigger>
<xforms:trigger>
<xforms:label>Delete Auction Item</xforms:label>
<xforms:delete nodeset="auctionItem"
at="index('repeatAuctionItems')"
ev:event="DOMActivate" />
</xforms:trigger>
</xforms:group>
<xforms:submit submission="submit_model_auctionItems">
<xforms:label>Submit</xforms:label>
</xforms:submit>
</body>
</html>
|
太字で示した行に注意してください。送信ボタンは、この送信タグにリンクされており、これを Perl スクリプトに送信するようにさせるには、単純にアクション属性の URL を Perl スクリプトの URL (この場合は http://localhost/cgi-bin/xformsPerl.pl) に設定します。次に、このリクエストを Perl を使って処理します。
リスト 3 には、XForms の POST リクエストを受信する Perl スクリプトが含まれています。
リスト 3. Perl を使って POST リクエストをキャプチャーし、表示する
#!perl
use warnings;
use strict;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/xml\n\n";
my $data = param('POSTDATA');
print $data;
|
最初の 2 つの use 文は、どのような警告レポートや構文チェックが必要なのかを Perl に命令しています。その次の 2 つの use 文は、CGI スタイルのスクリプトを使っていることを Perl に伝えています。次に、text/xml のコンテンツ・タイプを持つヘッダーが表示されます。次に、POST されたデータを param('POSTDATA') 変数から取得します。最後の print 文は、この XML をブラウザーに表示します (図 1)。
図 1. XForms XML インスタンス・データを Perl を使って表示する
素晴らしい! これで、Perl の XML::Simple を使って、あるいは任意の Perl XML モジュールを使って、自由自在に XML を処理できるのです。Perl と XML を使い始めるためには、参考文献にあげた IBM developerWorks のリソースを参照してください。
これで、Perl スクリプトに POST リクエストを送信する XForms を作成できるようになりました。そして、フォームから送信された XML インスタンス・データをキャプチャーし、処理できるようになりました。Perl と同じくらい一般的な Web プログラミング言語を使っている人達にとっては、そこに XForms を追加することは興奮すべき新たな冒険であり、もう皆さんは既にその冒険に出発しているのです。
| 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|---|---|---|
| Perl XForms samples | xforms_perl_source.zip | 4KB | HTTP |
-
ディスカッション・フォーラムに参加してください。
- XML で Perl を使い始めるためのヒントとなる記事として、「XML とスクリプト言語」(developerWorks、2000年2月) を参照してください。
- XForms 入力のスキーマ型として、他にどんなものがあるのか、w3cschools を調べてみてください。
-
このシリーズは、XForms を使い始めるためのガイドとして最適です。
- alphaWorks の Visual XForms Designer について学ぶには、ここから出発してください。
-
developerWorks のXML ゾーンには、XForms や他の XML 技術に関するスキルの向上に役立つ資料が豊富に用意されています。
-
Technology bookstore には、この記事や他の技術的な話題に関する本が豊富に取り揃えられています。