XSLT3.0への道(17) XPath3.0のパワー

もしこれを読まれたあなたがDimitre Novatchevさんをご存知だったら相当のXSLTに憧憬が深い勉強家じゃないかと思います.Dimitre Novatchevさんは、XSLT/XPathの世界ではとても有名な「オタク」です.すごいプログラムばっかり書いています.私もWEBを探しに探した末に彼が作ったXSLT1.0のテンプレートを見つけ出し、数ステップ変更しただけで索引のソーティングのコアモジュールとして使わせてもらっています.

  DITAのindextermをソートする

  [xsl] Sorting with unknown number of sort keys (Was: Re: Sort question)
  http://www.biglist.com/lists/xsl-list/archives/200303/msg00007.html

彼はStackOverflowやxsl-listでXPath/XSLT関連の質問にも積極的に答えています.

その彼が今年の8月初めのBalisage 2013 The Markup Conferenceで"Programming in XPath 3.0"というテーマでプレゼンテーションを行っています.これがBalisageのWEBに公開されています.

  Programming in XPath 3.0

XPath 3.0は今後勧告になってゆくであろうXSLT3.0とXQuery 3.0で共用される重要な構成部分です.どのようなことがかかれているか、簡単に紹介いたします(厳密ではありません.スゴク自己流です).

1.XPath3.0はXPath1.0/2.0で成し遂げられなかった特筆すべき特徴を実装している.

XPath式の中に変数を定義できる、anonymous function(関数リテラル、無名関数)をXPath式のなかに定義できる、高階関数を実装している.

2.例えば、Definitive XML Schemaの作者として有名なPriscilla Warmsleyさんが、FunctXというXQuery1.0とXSLT2.0で使うライブラリを公開している.しかしXQueryXPathで2つの実装を作らねばならない.

  FunctX Functions

⇒XPath3.0になれば、XQueryXSLTで共用できる関数を一つのXPathの実装で作ることができるようになります.

3.高階関数(High Order Function)を実装している.関数をパラメータとして渡したり、関数の戻り値を関数とすることができる.

4.関数のPartial application(部分適用 http://en.wikipedia.org/wiki/Partial_application)ができる.


6.無名関数の再帰が実現できる.

7.新たなXMLドキュメントや要素を生成できる(!)

⇒今まで単にXPathは入力XMLの一部を返すものだと理解されてきました.例えば以下のMicrosoftLINQXPathの比較.

  Differences Between XPath and LINQ to XML

XPath does not allow projection of new types. It can only return collections of nodes from the tree, whereas LINQ to XML can execute a query and project an object graph or an XML tree in a new shape. LINQ to XML queries encompass much more functionality and are much more powerful than XPath expressions.

でもXPath3.0は、新しくXMLドキュメントや要素を生成できちゃいます.

8.XSLT3.0のxsl:evaluateを使用すれば、XPath式を外部のテキストファイルから持ってくることもできちゃう.

などなどです.XPath 3.0はいいことづくめですね!興味のある方はぜひご自身でご覧ください.