Here is the little script I use to start Saxon from the command line. With the help of two or three environment variables, it can be used as your day-to-day XSLT transformer. But having options to deal with the class path, it can also be used in Makefiles (or whatever) in projects that use extensions or even modified version of Saxon.
I think the doc at the beginning of the script is clear enough. Unfortunately, I can't translate it to a Windows BATCH script as I don't know it. The script is below and can be downloaded here.
#! /bin/sh ## saxon [--b|--sa]? [--catalogs=...]* [--catalog-verbose[=...]]* ## [--add-cp=...]* [--cp=...]* <original Saxon args> ## ## Order of arguments is not significant, but the arguments to be ## forwarded to Saxon must be at the end. See below for an ## explanation of the arguments. ## ## Depends on the following environment variables: ## ## - APACHE_XML_RESOLVER_JAR (if catalogs are used) ## - SAXON_SCRIPT_DIR (must contain saxon8.jar or saxon8sa.jar, and ## the licence file and saxon8-sql.jar if used) ## - SAXON_SCRIPT_HOME (if different from $HOME, for tilde "~" ## substitution) JAVA=java # Use saxon8.jar if the default has to be the B version. SAXON_JAR="${SAXON_SCRIPT_DIR}/saxon8sa.jar" SAXON_SQL="${SAXON_SCRIPT_DIR}/saxon8-sql.jar" # Use net.sf.saxon.Transform if the default has to be the B version. SAXON_CLASS=com.saxonica.Transform CATALOG_VERB=1 USE_SQL=false if [[ -z "$SAXON_SCRIPT_HOME" ]]; then MY_HOME=$HOME else MY_HOME=$SAXON_SCRIPT_HOME fi CP_DELIM=";" while echo "$1" | grep -- ^-- >/dev/null 2>&1; do case "$1" in # XSLT Basic version. --b) SAXON_CLASS=net.sf.saxon.Transform SAXON_JAR="${SAXON_SCRIPT_DIR}/saxon8.jar";; # XSLT Schema-Aware version. --sa) SAXON_CLASS=com.saxonica.Transform SAXON_JAR="${SAXON_SCRIPT_DIR}/saxon8sa.jar";; # Add XML Catalogs URI resolution, by adding a catalog to the # catalog list. Resolve "~" only on the head of the option. # May be repeated. --catalogs=*) # Add separator. if [[ -n $CATALOGS ]]; then CATALOGS="$CATALOGS$CP_DELIM" fi # Resolve "~". TMP_CAT=`echo $1 | sed s/^--catalogs=//` if echo "$TMP_CAT" | grep -- '^~' >/dev/null 2>&1; then TMP_CAT="$MY_HOME"`echo $TMP_CAT | sed s/^~//`; fi CATALOGS="$CATALOGS$TMP_CAT";; # Set the XML Catalogs resolver verbosity. --catalog-verbose=*) CATALOG_VERB=`echo $1 | sed s/^--catalog-verbose=//`;; # Set the XML Catalogs resolver verbosity to 3. --catalog-verbose) CATALOG_VERB=3;; # Add some path to the class path. Resolve "~" only on the # head of the option. May be repeated. --add-cp=*) # Resolve "~". TMP_CP=`echo $1 | sed s/^--add-cp=//` if echo "$TMP_CP" | grep -- '^~' >/dev/null 2>&1; then TMP_CP="$MY_HOME"`echo $TMP_CP | sed s/^~//`; fi ADD_CP="$ADD_CP$CP_DELIM$TMP_CP";; # Set the class path. Resolve "~" only on the head of the # option. May be repeated. --cp=*) # Resolve "~". TMP_CP=`echo $1 | sed s/^--cp=//` if echo "$TMP_CP" | grep -- '^~' >/dev/null 2>&1; then TMP_CP="$MY_HOME"`echo $TMP_CP | sed s/^~//`; fi CP="$CP$CP_DELIM$TMP_CP";; # Add the Saxon SQL jar to the class path. --sql) USE_SQL=true esac shift; done if [[ -z "$CP" ]]; then CP="$SAXON_JAR" fi if [[ "$SAXON_CLASS" = com.saxonica.Transform ]]; then CP="$CP$CP_DELIM$SAXON_SCRIPT_DIR" fi if [[ "$USE_SQL" ]]; then CP="$CP$CP_DELIM$SAXON_SQL" fi if [[ -z "$CATALOGS" ]]; then "$JAVA" \ -cp "$CP$ADD_CP" \ $SAXON_CLASS \ "$@" else "$JAVA" \ -cp "$CP$CP_DELIM$APACHE_XML_RESOLVER_JAR$ADD_CP" \ -Dxml.catalog.files="$CATALOGS" \ -Dxml.catalog.verbosity=$CATALOG_VERB \ $SAXON_CLASS \ -r org.apache.xml.resolver.tools.CatalogResolver \ -x org.apache.xml.resolver.tools.ResolvingXMLReader \ -y org.apache.xml.resolver.tools.ResolvingXMLReader \ "$@" fi
Posted by Florent Georges, on 2007-01-03T22:07:00, tags: saxon and xslt.