XMLのスタイルシートは、XSL(eXtensible Style Language)とも呼ばれ、XMLデータの表現方法を定義するための言語です。
XMLデータに対して、スタイルシートを指定することで、整形して表示することができます。
XMLでは、HTML4.0+CSSと同様、XML+XSLとして、文章の内容と表現(書式)は分離して管理できます。
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で、ファイル名を指定します。
&エンティティ名で、参照できます。