blob: ba083b6ef7d1f4eb0cc67c2961c6de8d6b1c70de (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# blog.kummerlaender.eu
…is the XSLT based static site generator especially developed to generate this website.
Its MIT licensed source code is available both [Github] and [cgit].
The implementation of a pure[^1] XSLT solution to the problem of static site generation required the development of a collection of external functions enabling access to the filesystem, external applications and other transformations from inside XSLT. These external functions are not part of this project and were developed separately as [InputXSLT].
## Overview
The implementation of the static site generator contained within the `detail` directory of the linked repository and consists of four XSL transformations that all form a link in the generation chain executed by [BuildXSLT].
These transformations traverse the given source directory, plan tasks[^2] to be executed, process those tasks and summarize the result for the user.
~~~
common:~# ixslt --input make.xml --transformation ../BuildXSLT/build.xsl
Tasks processed: 19
Tasks successful: 19
▶ Generation successful.
common:~#
~~~
The source directory is structured into separate levels that are processed sequentially according to their name. The first level contains all actual contents of the website which are read into separate article, page and tag data sources in the data level. After the base data sources are generated further meta data sources are aggregated by the meta level. Finally the actual _XHTML_ pages are generated by the transformations contained within the result level. It is important to note that most of these links in the generation chain are created dynamically by the static site generator, i.e. the required data sources of each transformation are determined based on meta tags inside of the stylesheets themselves and there is no fixed limit of how many levels the system is able to process.
## Differentiation and limitations
This approach to static site generation is novel in the manner that it is the only publicly available XSLT based solution to this problem domain that I am aware of, which uses XSLT as both the application and template language. I extended XSLT with [InputXSLT] and developed this static site generation in the attempt of producing something as flexible as [Symphony CMS] that generates static output.
The current implementation of the concept described on this page is limited in the sense that it doesn't support incremental regeneration but generates the whole website from scratch on each run. While this problem should also be solvable in pure XSLT, I currently do not plan on solving it as it is fast enough for my current use cases and largely depends on the speed of the used Markdown processor and syntax highlighter anyway.
[^1]: Pure as in all templates, data source aggregation and the generation logic itself is implemented in XSLT. Tasks like e.g. syntax highlighting and Markdown processing are still handled by external programs called from within XSLT.
[^2]: Tasks include cleaning directories, generating transformations and symlinking directories and files into the target directory
[Github]: https://github.com/KnairdA/blog.kummerlaender.eu/
[cgit]: http://code.kummerlaender.eu/blog.kummerlaender.eu/
[BuildXSLT]: /page/build_xslt/
[InputXSLT]: /page/input_xslt/
[Symphony CMS]: http://getsymphony.com
|