XSL Transformations XSL Transformationsの概要

XSL Transformations

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/11/21 04:23 UTC 版)

XSL Transformations
拡張子.xsl, .xslt
MIMEタイプapplication/xslt+xml[注釈 1][1]
開発者World Wide Web Consortium (W3C)
種別XML変換言語関数型言語
派生元XML
国際標準1.0 (Recommendation),

2.0 (Recommendation),

3.0 (Recommendation)
XML変換におけるXSLTの位置付け

XSLT 1.0 は1999年11月23日にW3C勧告となり、2007年には JIS X 4169 としてJIS規格へ翻訳された。XSLT 2.0 は2007年1月23日に、3.0は2017年6月8日にW3C勧告となった。

XSLTはXML形式の文書を変換する。XPath による選択と検索にもとづき、XML文書全体または文書の一部に対して変換を行い、XML として出力する他、XML(整形式)ではないその他任意のテキスト形式としても出力できる。

例としては次のような応用がある。

  • 一定フォーマットのHTML用の、文書型宣言・ヘッダ情報の追加
  • テキストの移動
  • テキストのソート

変換の指定は関数型言語として見ることもでき、実のところチューリング完全であるため、コンピュータ・プログラムを書くようにしてどんな応用も可能である。裏返せば、その機能を十分に発揮させるためには利用者に通常のプログラミングと同様の能力と作業が必要であり、しばしばXMLに対して持たれている「プログラミングが不要」という期待を裏切るものではある。

変換の対象となるXML文書は木構造であり、XSLTによる変換は宣言的に指定される。つまり、XSLTプログラムは、変換をどう行うべきか指定する規則をいくつか集めたものからなり、この規則を再帰的に適用することによって変換を行う。

XSLT処理系はまずどの規則が適用できるかチェックし、優先順にもとづいて該当する変換を行う。

XSLTプログラムは、以下のようにXML文書の形式をとる。

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

データ変換

XML 形式のデータを様々な形式のデータに変換できる。ここではその例を示す。

変換前のXML

<?xml version="1.0" ?>
<persons>
  <person username="JS1">
    <name>John</name>
    <family-name>Smith</family-name>
  </person>
  <person username="MI1">
    <name>Morka</name>
    <family-name>Ismincius</family-name>
  </person>
</persons>
変換後の形式 XSLTコード 変換結果
XML
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/persons">
    <root>
      <xsl:apply-templates select="person"/>
    </root>
  </xsl:template>

  <xsl:template match="person">
    <name username="{@username}">
      <xsl:value-of select="name" />
    </name>
  </xsl:template>

</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <name username="JS1">John</name>
  <name username="MI1">Morka</name>
</root>
XHTML
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/1999/xhtml">

  <xsl:output method="xml" indent="yes" encoding="UTF-8"/>

  <xsl:template match="/persons">
    <html>
      <head> <title>Testing XML Example</title> </head>
      <body>
        <h1>Persons</h1>
        <ul>
          <xsl:apply-templates select="person">
            <xsl:sort select="family-name" />
          </xsl:apply-templates>
        </ul>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="person">
    <li>
      <xsl:value-of select="family-name"/><xsl:text>, </xsl:text><xsl:value-of select="name"/>
    </li>
  </xsl:template>

</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head> <title>Testing XML Example</title> </head>
  <body>
    <h1>Persons</h1>
      <ul>
        <li>Ismincius, Morka</li>
        <li>Smith, John</li>
      </ul>
  </body>
</html>
CSV
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="text" encoding="UTF-8"/>

  <xsl:template match="/persons">
    <xsl:apply-templates select="person" />
  </xsl:template>

  <xsl:template match="person">
    <xsl:value-of select="@username" />
    <xsl:text>,</xsl:text>
    <xsl:apply-templates select="*" />
  </xsl:template>

  <xsl:template match="name">
    <xsl:value-of select="." />
    <xsl:text>,</xsl:text>
  </xsl:template>

  <xsl:template match="family-name">
    <xsl:value-of select="." />
    <xsl:text>&#10;</xsl:text>
  </xsl:template>

</xsl:stylesheet>
JS1,John,Smith
MI1,Morka,Ismincius

テンプレート関数

XSLT はテンプレートの関数を再帰的な形で定義ができる純粋関数型言語でもある。

下記のものはテンプレート関数 String_replaceAllである。これは、パラメーター this で指定した文字列中にある、パラメーター substring で指定した部分文字列をすべて、パラメーター replacement で指定する文字列に置換した文字列を返す関数。これの例から以下の点が分かる。

  • テンプレート関数の定義の仕方(xsl:templatexsl:param
  • 引数の値の参照の仕方($引数名
  • 条件分けの仕方(xsl:ifxsl:choose
  • XSLT関数(notcontainssubstring-beforesubstring-after
  • XSLT関数の使い方(<xsl:value-of select="XSLT関数 (引数...)" />
  • 定義されたテンプレート関数の呼び出し方(xsl:call-templatexsl:with-param:再帰呼び出しの箇所)
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="String_replaceAll">
  <!-- 引数 -->
  <xsl:param name="this" select="''" />
  <xsl:param name="substring" />
  <xsl:param name="replacement" />

  <xsl:if test="not ($this='')">
    <xsl:choose>
      <!-- this に substring が含まれる場合の値 -->
      <xsl:when test="contains ($this, $substring)">
        <xsl:value-of select="substring-before ($this, $substring)" />
        <xsl:copy-of select="$replacement" />
        <xsl:call-template name="String_replaceAll"> <!-- 再帰呼び出し -->
          <xsl:with-param name="this" select="substring-after ($this, $substring)" />
          <xsl:with-param name="substring" select="$substring" />
          <xsl:with-param name="replacement" select="$replacement" />
        </xsl:call-template>
      </xsl:when>

      <!-- そうでない場合の値 -->
      <xsl:otherwise>
        <xsl:value-of select="$this" />
      </xsl:otherwise>
    </xsl:choose>
  </xsl:if>
</xsl:template>
</xsl:stylesheet>

注釈

  1. ^ 上記#メディア型参照。
  2. ^ RFC 3023 は「application/xslt+xml」を推奨している。なお、「text/xml」は廃止予定。

出典



「XSL Transformations」の続きの解説一覧



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「XSL Transformations」の関連用語

XSL Transformationsのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



XSL Transformationsのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのXSL Transformations (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2024 GRAS Group, Inc.RSS