XSLT

XSLT (Extensible Stylesheet Language Transformations) is a language for transforming XML documents into other XML documents (of the same XML schema or not), or other objects such as HTML for web pages, or plain text for other uses, or many other txt-based formats (ex. RTF or any SGML document).

When transforming "XML to XML" a chain of more transforms are possible, when transforming "XML to object", the chaining must stop (objects are terminal).

There are two main XSLT standard groups:


 * XSLT-v1 (old): was published as a W3C recommendation in November 1999. As of 2014, however, XSLT v1.0 is still widely used, since 2.0 and 3.0 is not supported natively in web browsers or for environments like LAMP.


 * XSLT-v2 and XSLT-v3 (newers): only works in "Java world" and few proprietary frameworks, like Oracle's or Altova's products.

The present wikibook is about XSLT-v1, that have the wider community of users.

The XSLT-v1 parsers, like libXml2, are fast and stable. The main XSLT-v1 use, in a MVC context, is as MVC-Viewer to filter or render, with minimal processing cost, the XML produced by the MVC-modeler. For a "Turing complete" processing, to avoid XSLT-v2 or XSLT-v3 migration, the usual workaround is to use processing from the embedding language, by the register-functions facility. Example: this wikibook shows how to use register-functions when XSLT is used in a PHP environment.

Registered functions
XPath-v1 and XSLT-v1 are essential standards, present in almost all XML applications, and many open platform browsers (Firefox, Chrome and others), portable systems (like ANDROID), desktop systems (like UBUNTU or Windows), databases (ex. PostgreSQL, MySQL, etc.), and others.

But XPath-v1 and XSLT-v1 are limited in processing capabilities. A good alternative is to use external functions, that can be registered in the XPath or XSLT parser. This facility is knowed as registeredFunctions.

RegisteredFunctions are essential to writing good XPath-v1 and XSLT-v1 applications, but are rarely well explained: to enhance processing capabilities you need to understand RegisterdFunctions, whose purpose and exact contexts of use.

A programming language (ex. PHP) or an agent (ex. web-browser) that uses the XSLT or XPath parser, can be called back for offer their internal functions (ex. browser's Javascript functions or PHP's functions).

RegisteredFunctions are not well documented. W3C standards not defined all details and not offer a "tutorial for registeredFunctions".

The PHP/Python/Javascript/etc. manual itself doesn't have a simple explanation that actually captures the essence and most posts written around the web seem to be missing some detail or other as well.

This wikibook attempts to fill that gap; and takes a broad sweep of related topics to do so. Two main wais, to use the external functions, are proposed here:
 * 1) free use: any function, build-in or user-defined, when the best practice is to use a specific namespace, like "php" for PHP or "py" for Python.
 * 2) controled use: a convention, independent of language, using a local-stanard library. The best practice is to use a generic namespace, like "fn". So, if the project changes, for instance, from PHP to Pythom, the XSLT (or XPath) stay with the same code and namespaces.

Related books
For free use registered functions:
 * PHP: PHP Programming/XSL/registerPHPFunctions

For controled registered functions (conventions for use the FN namespace):
 * /Standard-register Functions/: a proposal.