# 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).
* XSLT or XSL? The usual 3-letters-extension of XSLT files are .xsl, so, it causes some confusion with .xls which is the suffix of older Microsoft Excel files.
* XSLT or XSL-FO? XSLT can be used to transform XML into XSL Formatting Objects (XSL-FO), which can then be converted to PDF, PostScript and PNG. XSLT and XSL-FO are distinct things.
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:
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 known 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:
* 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.
* controlled use: a convention, independent of language, using a local-standard 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 controlled registered functions (conventions for use the FN namespace):
* Standard-register Functions: a proposal.