SAXONICA

Saxon Documentation
Full Contents
About Saxon
Changes in this Release
Notices
Using XSLT 2.0
Using XQuery
Handling Source Documents
XML Schema Processing
XPath API for Java
Saxon on .NET
Extensibility
Saxon Extensions
Sample Saxon Applications
| Introduction
» | Knight's Tour
| JAXP Transformation Examples
| SaxonServlet
| The Book List Stylesheet
| Shakespeare Example
| The Bible
| JDOM Example
| Example applications for .NET
The Saxon SQL Extension
XSLT Elements
XPath 2.0 Expression Syntax
Function Library
Standards Conformance

# Knight's Tour

This program is available in two forms: as an XSLT stylesheet `tour.xsl` and as an XQuery `tour.xq`.

This is a program whose output is a knight's tour of the chessboard (the knight can start on any square, and has to visit each square exactly once). The XSLT version was published as an example stylesheet in my book XSLT 2.0 Programmers Reference (Wrox Press) but has been completely reworked so it now makes extensive use of features in XSLT 2.0, XPath 2.0 and XQuery. It is worth studying the stylesheet and query as an introduction to the use of the new features in these languages. Comparing the two versions, it can be seen that they are very similar: the only differences are in the surface syntax of the two languages.

The stylesheet can be found in the file `samples/styles/tour.xsl`, the query in `samples/query/tour.xq`. No source document is required.

You can run this example with Saxon on the Java platform using a command of the form:

java -jar saxon9.jar -it main samples\styles\tour.xsl start=e5 >tour.html

or

java -cp saxon9.jar net.sf.saxon.Query samples\query\tour.xq start=e5 >tour.html

On the .NET platform, the equivalent commands are:

Transform -it main samples\styles\tour.xsl start=e5 >tour.html

or

Query samples\query\tour.xq start=e5 >tour.html

When you display the resulting HTML file in your browser it should look like this:

Knight's tour starting at e5

6 | 3 | 8 | 21 | 42 | 51 | 18 | 39
9 | 22 | 5 | 2 | 19 | 40 | 43 | 50
4 | 7 | 20 | 41 | 52 | 49 | 38 | 17
23 | 10 | 27 | 48 | 1 | 44 | 55 | 60
26 | 31 | 24 | 53 | 56 | 61 | 16 | 37
11 | 28 | 47 | 34 | 45 | 54 | 59 | 64
32 | 25 | 30 | 13 | 62 | 57 | 36 | 15
29 | 12 | 33 | 46 | 35 | 14 | 63 | 58

Next