HTMLベースのXMLでは、スタイルシートとして、XSLとCSSの両方を使うことができます。
このページでは、IE5.0を利用して、スタイルシートのテンプレートを利用して、繰り返しデータの表示などをサンプルソースを掲載しています。
住所録は、複数の個人情報が格納される形式となります。
個人情報は、<名前><郵便番号><住所><電話番号>などのような論理タグで定義できるため、HTMLファイルやCSVファイルよりもわかりやすくなります。
住所録のように、複数のレコードを表形式で表示するものを帳票と呼びます。
では、まず以下の内容のaddr.xmlと、addr.xslと、addr.cssを作成しましょう。
XMLがデータの定義で、XSLとCSSがスタイルの定義となります。
addr.xml |
---|
<?xml version="1.0" encoding="ISO-2022-JP" ?> <?xml:stylesheet type="text/xsl" href="addr.xsl" ?> <住所録> <個人情報 ID="1"> <名前>升村 丞</名前> <郵便番号>920-0967</郵便番号> <住所>金沢市菊川1-9-6</住所> <電話番号>076-261-4921</電話番号> </個人情報> <個人情報 ID="2"> <名前>北陸 太郎</名前> <郵便番号>920-0000</郵便番号> <住所>金沢市大手町1-1-1</住所> <電話番号>076-111-3333</電話番号> </個人情報> <個人情報 ID="3"> <名前>金沢 花子</名前> <郵便番号>920-0123</郵便番号> <住所>金沢市片町1-2-3</住所> <電話番号>076-123-4567</電話番号> </個人情報> </住所録> |
IE5.0で、スタイルシートの指定をしないで表示すると、データの階層構造が表示されます。
XMLで定義したデータは、スタイルシートによって、HTMLの表形式で表示されます。
個人情報はデータの繰り返しブロックとなりますので、別のテンプレートとして定義してあります。
さらに、各項目も別のテンプレートで定義することもできます。
このようにXMLスタイルシートでは、apply-templatesで、検索した内容をテンプレートを使って表示することにより、記述が簡略化できます。
addr.xsl |
---|
<?xml version="1.0" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html lang="ja"> <head> <title>住所録</title> <link rel="stylesheet" type="text/css" href="addr.css"/> </head> <body> <h1>住所録</h1> <table> <tr> <th>名前</th> <th>郵便番号</th> <th>住所</th> <th>電話番号</th> </tr> <xsl:apply-templates select="住所録/個人情報"/> </table> </body> </html> </xsl:template> <xsl:template match="個人情報"> <tr> <td><xsl:value-of select="名前"/></td> <td><xsl:value-of select="郵便番号"/></td> <td><xsl:value-of select="住所"/></td> <td><xsl:value-of select="電話番号"/></td> </tr> </xsl:template> </xsl:stylesheet> |
次に、以下のHTMLスタイルシートファイル(addr.css)を作成します。
スタイルシートは、XMLスタイルシート(*.xsl)とHTMLスタイルシート(*.css)の2種類を使用しています。
XMLスタイルシートでは、XMLデータに依存する表現を定義します。
HTMLスタイルシートでは、タグ全体の表現や、すべての画面に共通な定義をします。
見出しの色や大きさや、表の背景色などのデザインは、HTMLスタイルシートで定義してあります。
HTMLスタイルシートは、なくてもデフォルトで表示されます。
addr.css |
---|
<style> body { background-color:#ffffff; color:#000000; } h1 { color:#00007f; } table { border:1 solid; } th { background-color:#cfffcf; border:1 solid; padding:4px; margin:4px; } td { background-color:#ffffcf; border:1 solid; padding:4px; margin:4px; } </style> |
作成したら、IE5.0で表示してみましょう。
これで、XMLで定義した住所録データを、スタイルシートによって、HTMLの表形式で表示することができました。 XMLスタイルシートを使うと、データの表示順序を変更したり、レイアウトを自由に変更することができます。
IE5.0では、for-eachを使って、手続き的なスタイルシートを定義することもできます。 表示イメージは、前の例と全く同じです。 perlでCGIを作成している人には、こちらの方が使いやすいかもしれません。
addr01.xsl |
---|
<?xml version="1.0" encoding="ISO-2022-JP" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html lang="ja"> <head> <title>住所録</title> <link rel="stylesheet" type="text/css" href="addr.css"/> </head> <body> <h1>住所録</h1> <table> <tr> <th>名前</th> <th>郵便番号</th> <th>住所</th> <th>電話番号</th> </tr> <xsl:for-each select="住所録/個人情報"> <tr> <td><xsl:value-of select="名前"/></td> <td><xsl:value-of select="郵便番号"/></td> <td><xsl:value-of select="住所"/></td> <td><xsl:value-of select="電話番号"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> |
今作成した住所録のXMLデータを利用して、スタイルシートを切り替えることにより、住所カードを作成してみましょう。
他にも、名刺などの形式で表示することもできます。
このように、1件のデータの内容の詳細を表示するものを単票と呼びます。
では、住所カード用のXSLデータを作成してみましょう。
addrcard.xsl |
---|
<?xml version="1.0" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html lang="ja"> <head> <title>住所録</title> <link rel="stylesheet" type="text/css" href="addr.css"/> </head> <body> <h1>住所録</h1> <xsl:apply-templates select="住所録/個人情報[@ID = 1]"/> </body> </html> </xsl:template> <xsl:template match="個人情報"> <table><tr> <th>名前</th> <td><xsl:value-of select="名前"/></td> <tr></tr> <th>郵便番号</th> <td><xsl:value-of select="郵便番号"/></td> <tr></tr> <th>住所</th> <td><xsl:value-of select="住所"/></td> <tr></tr> <th>電話番号</th> <td><xsl:value-of select="電話番号"/></td> </tr></table> </xsl:template> </xsl:stylesheet> |
XMLデータから1件のデータを抽出するためには、select指定で、XMLタグ名[@属性名 = 属性値]という形式で指定します。
この条件指定は、value-ofやapply-templatesで利用することができます。
実際にIE5.0で表示してみましょう。
データが1件だけ表示できたと思います。
個人単位でXMLデータを管理したり、グループ単位でXMLデータを管理する場合は、複数のXMLファイルをマージする必要があります。
そこで、今作成した住所録のXMLデータを個人単位に分割してみましょう。
スタイルシートは共通ですから、表示された結果は、全く同じとなります。
分割する場合は、DTDのエンティティを作成しますので、以下のように記述します。
addr10.xsl |
---|
<?xml version="1.0" encoding="ISO-2022-JP" ?> <?xml:stylesheet type="text/xsl" href="addr.xsl" ?> <!DOCTYPE addr [ <!ENTITY addr11 SYSTEM "addr11.xml"> <!ENTITY addr12 SYSTEM "addr12.xml"> <!ENTITY addr13 SYSTEM "addr13.xml"> ]> <住所録> &addr11; &addr12; &addr13; </住所録> |
DTDのENTITYの定義で、SYSTEMで、ファイル名を指定します。
&エンティティ名で、参照できます。