Goodpic.com
2004年05月15日

Amazon アソシエイト解説 2:WEBサービスからXSLTで簡単なHTMLを作成

前回に引き続き(Amazon WEBサービス:REST/XSLTを使い倒す1 基礎知識)、アマゾンのアフィリエイト機能をカスタマイズする方法です。
Amazon REST/XSLT WEBサービスの概要を理解したところで、簡単なアマゾンからのXMLレスポンスを受け取って、ブラウザで見られるHTMLにXSLT機能によって変換してみたいと思います。

まずは商品情報をアマゾンから取得しましょう。以下のURLをクリックしてください。

http://xml-jp.amznxslt.com/onca/xml3?dev-t=D2JW5SAFEH7L0B&t=goodpic-22&f=xml&locale=jp&type=lite&AsinSearch=4873111811

これが最も簡単な商品情報のXMLです。AsinSearchといって、商品個々につけられているASIN番号( この場合は4873111811 )を指定することで、商品情報を検索します。詳しいパラメーターの意味はこちらの記事を参考にしてください。

このXMLの商品情報に「<Details>というタグ要素は、○○のように変換したい」という変換ルールを適用することで、HTML文章に変換します。変換ルールを複数記述した文章のことをXSLT文章と呼びます。
早速ですが、上記の商品情報XMLを変換するXSLT文章を見てみます。

simple.xsl

インターネット・エクスプローラーなどで上のsmple.xslを見ると、行の左側に”-”や”+”が付いていて、階層表示されていると思います。この左側の”-”や”+”をクリックすると、それ以下の階層が表示されたり、隠されたりするので、このXSLT文章の階層構造がよくわかると思います。大きく分けると

・ 第1階層 <xsl:stylesheet パラメーター>
・ 第2階層の1番目 <xsl:output method="html" encoding="utf-8" />
・ 第2階層の2番目 <xsl:template match="/"> とその下の階層
・ 第2階層の3番目 <xsl:template match="Details"> とその下の階層

があるのが分かると思います。そして、それぞれの階層は、かならず同じ名前のタグで閉じられている、例えば<xsl:stylesheet>ではじまった階層が</xsl:stylesheet>で閉じられています。HTMLと違って、XML、XSLTのタグはかならず閉じる必要があります。第2階層の1番目の <xsl:output method="html" encoding="utf-8" />は閉じていないように見えますが、タグの終わりが” />”となっています。これは<xsl:output method="html" encoding="utf-8"></xsl:output>と同じ意味の短縮形なのですね。

したがって、このXSLT文章内に、変換用にHTMLタグを書く際にも、上記のルール「タグは必ず閉じる」ことが必要になります。一番最初に間違えやすいのは、HTMLで改行を意味する<br>タグだと思います。<br>タグといえども、かならず閉じる必要があるので、<br />と書きましょう。
閉じてないタグがあったり、まちがった階層構造(例えば<a><b></a></b>など。正しくは<a><b></b></a>)だとエラーになってしまいます。これは、XSLT文章を編集して、インターネット・エクスプローラーなどで見てみると間違いを指摘してくれるので、ひとつづつ直していきましょう。

では順番に中身を見ていきます。

<?xml version="1.0" ?>

これは、この文章がXMLだよという宣言です。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

そして、ここからがxsltですよ、と定義しています。このような第一階層部分をルート要素といいます。具体的な変換ルールはこの<xsl:stylesheet>変換ルール</xsl:stylesheet>の第2階層の部分に記述することになります。

<xsl:output method="html" encoding="utf-8" />

これは<xsl:stylesheet>に含まれる要素型といって、変換後の表示形式を指定しています。この場合は、文字エンコーディングがutf-8のhtmlを表示すると指定しています。

<xsl:template match="/">

第2階層の変換ルールは、テンプレート・ルールと呼ばれて、<xsl:template></xsl:template>と記述されます。<xsl:template>は”match”属性と呼ばれるパラメーターを持ちます。これは商品情報XMLのどの部分にマッチする場合に、変換ルールを適用するかということを指定していて、<xsl:template match="/">とは商品情報XMLの一番上の階層から、変換ルールを適用することを示しています。

また、変換後に表示するhtmlの外枠がここで定義されています。
<html> 
<head></head> 
<body> 
 
</body> 
</html> 
というhtmlを、商品情報の外側に表示するということですね。ここで注意したいのは、<head></head>は、中に何も書かなくても必ずつけておきましょう。というのもAmazonのサーバがXSLTプロセッサで変換処理をするときに、HTMLの文字エンコーディングなど、ブラウザで表示するのに必要な情報を<head>内に付け足してくれることがあるからです。僕はここで一回、みごとに文字化けにはまって(笑)、ブログへコメントで助けてもらいました。

このテンプレート・ルールの<body>の中に以下のタグがあります。

<xsl:apply-templates select="ProductInfo/Details" />

これは、このスタイルシート内で定義したテンプレートルールを、属性select=""で指定した部分に適用するよ、という指定になります。この例では、商品情報XMLの階層<ProductInfo><Details>の部分に対してテンプレート・ルールを適用します。そして変換ルールは、

・ 第2階層の3番目 <xsl:template match="Details"> とその下の階層

によって指定されています。ひとまずは、以上がxslt文章の大枠になります。商品情報XMLにこのXSLT文章を適用してみましょう。商品情報を取得したWEBサービスに、パラメーターとしてXSLTのURLを指定してアクセスします。パラメーターの指定は

&f=http://www.goodpic.com/mt/pic/etc/simple.xsl

のようにすると成型されたHTMLが表示されます。

http://xml-jp.amznxslt.com/onca/xml3?
dev-t=D2JW5SAFEH7L0B&t=goodpic-22
&f=http://www.goodpic.com/mt/pic/etc/simple.xsl
&locale=jp&type=lite&AsinSearch=4873111811

次回「Amazon アソシエイト解説 3:XSLTでHTMLタグを書く方法」では具体的なタグの使い方をまとめてみたいと思います。

関連記事
AmazonのXML Webサービス(REST)はXSLを書くだけでもかなり使える
Amazon WEBサービス:REST/XSLTを使い倒す1 基礎知識

Posted by jkanekomt at 2004年05月15日 00:24 | trackBack



Comments
Post a comment









Remember personal info?







関連記事