NAME
	xsltc - Sun XSLT Compiler 


SYNOPSIS
	xsltc [-o <output>] [-d <directory>] [-j <jarfile>] 
	      [-p <package name>]
              [-u] <stylesheet>... 


DESCRIPTION
	The Sun XSLT Compiler is a Java-based tool for compiling XSLT
	stylesheets into lightweight and portable Java byte codes 
	called translets.  

	The XSLT Compiler can be run on any platform including UNIX,
	Windows, NT, Mac that supports Java 1.2.x or later. The generated
	translets can be run on any platform that supports a Java
	Runtime Environment, including a Palm Pilot with J2ME CLDC 
	(Java 2 Micro Edition, Connected Limited Device Configuration).

OPTIONS

	The following options are supported:

	-o <output>
		Changes the name of the generated translet class.
		By default, the translet class would be named
		<stylesheet>, if -o <output> is set, then the 
		translet class would be named <output>. Translet
		class files are written as .class files.

	-d <directory>
		Changes the destination directory. By default, any
		translet class files generated would be placed in 
		the current working directory. If -d <directory> 
		is specified, the files would be output to <directory>.

	-j <jarfile>
		Outputs all generated translet class files into a 
		jar file named <jarfile>.jar. When this option is 
		used only a jar file will be output.

	-p <package name>
		Specify a package name for all generated translet
		classes.		

	-u
		Specifies that <stylesheet> location will be a URI
		such as 'http://myserver/stylesheet1.xsl'.		


OPERANDS

	The following operand is supported:

	<stylesheet>    A path name of an input stylesheet file. 


EXAMPLES
	Example 1:  Creating a translet from stylesheet 'hamlet.xsl'.

	example%  xsltc hamlet.xsl

	would produce a set of class files such as 'hamlet.class',
	'hamlet$0.class', 'hamlet$1.class'.

	Example 2:  Outputting all classes into a jar file.

	example%  xsltc -j hamlet.jar hamlet.xsl

	would produce a single jar file output, 'hamlet.jar' which would
	contain all the generated .class files for the hamlet translet.

	Example 3: Naming the class file.  

	example%  xsltc -o newhamlet hamlet.xsl

	would produce a set of class files such as 'newhamlet.class',
	'newhamlet$0.class', etc rather than the default which would 
	be 'hamlet.class', 'hamlet$0.class', etc.	

	Example 4: Multiple stylesheets. 

	example%  xsltc hamlet1.xsl hamlet2.xsl hamlet3.xsl

	would produce a set of class files derived from the three
	stylesheets. 

	Example 5: Package Specification.

	example% xsltc -p com.mycompany.translets hamlet.xsl

	would produce a set of class files such as 
	'com/mycompany/translets/hamlet.class',
	'com/mycompany/translets/hamlet$0.class', etc.

FILES
	file.xsl		input XSLT stylesheet
	file.class		byte code file
	file.jar		java archive file
	
SEE ALSO
	xslt, jar.

BUGS
	Refer to the top-level README included in this release.

AUTHORS
	Jacek Ambroziak,                       jacek.ambroziak@East.Sun.COM
	Santiago Pericas-Geertsen,    santiago.pericasgeertsen@East.Sun.COM 

	Contributors:

	Morten Jorgensen		   morten.jorgensen@Ireland.Sun.COM
	G. Todd Miller,                            todd.miller@East.Sun.COM
