Using XML-DBMS


Table of Contents


  1. About XML-DBMS
  2. Architectural Overview
  3. How it works
  4. Property File Settings
  5. Classes, their uses and required Values
  6. Property File Examples

About XML-DBMS

XML-DBMS is built to function as an piece of middleware much like a database Driver. The key difference with other database drivers is that it maps between XML and SQL (bi-directionally i.e from XML to SQl & from SQL to XML).
It does this via an XML File called a Map File (.mp). This sets out the relationship between an XML structure and an SQL one. Look at the existing Documents such as FILL IN HREF's HERE for a full explanation. There are a number of classes which make the system easy to use which are listed here

Architectural Overview
Back to Table of Contents

The main class for storing and retrieving information from a database is:

de.tudarmstadt.ito.xmldbms.tools.Transfer

Which processes a Properties file and calls the relevant method on the

de.tudarmstadt.ito.xmldbms.TransferEngine Class.

The methods for Transfer are detailed here
The methods for TransferEngine are detailed here

The frequently used Objects such as properties objects, processed XSLT sheets and map objects are created once and are then stored in a hashmap / object cache:

de.tudarmstadt.ito.xmldbms.objectcache.ObjectCache

How it works
Back to Table of Contents

XMLDBMS uses a number of classes which obtain their settings either via the commandline and / or properties files

A Properties file is simply a text file which consists of Key=Value pairings e.g.

User=Adam

sets the User to be Adam

The Commandline is used in a strict left to right way i.e. if you have 2 identical settings contained within 2 properties files then the 2nd setting is the final one.

Example:
If you had 2 properties files A.txt and B.txt the commandline would be:

File=A.txt File=B.txt

If both properties files contained "User=" settings (e.g. A.txt had User=Adam but B.txt had User=Fred) then the final properties Object which is used internally by the program would have a value of User=Fred.
A Properties file is used as a condensed Commandline i.e. having a User=Adam in a properties file which you load is the exact same thing as typing User=Adam on the Commandline. Anything which you can pass in via the Commandline can be passed in via a properties file and vice versa.

The code can deal with multiple properties files being used at once. The reason for this is that you might want to define more than one properties file as the first might be an "Admin File" ie. it might contain settings which are "Global" to the program for example the parser you wish to use or the database / database driver or the JMS Topic Connection factory or the JMSContext or the XSLTClass etc.. The second file might then simply contain settings specific to it such as the Mapfile or XSLTScript to use, the JMSTopic you wish to publish to etc.
This allows you to change the globals settings by changing a single file rather than by altering every single properties file.
All the settings which are available to the system are set out in the class:

de.tudarmstadt.ito.xmldbms.tools.XMLDBMSProps

I will divide the settings up into (hopefully) logical groups such as Database, JMS, Classes to be loaded etc.

Property File Settings
Back to Table of Contents

  1. Database Settings
  2. Classes to be loaded
  3. Values
  4. Actions
  5. Files
  6. Namespace Info
  7. Action Info
  8. JMS (Java Message Service) Information
  9. JNDI Information
  10. KeyGenerator Information

Database
SettingDescriptionPossible Values
URL This sets the URL of the Database See your Database JDBC info
DriverThis sets the Database JDBC DriverSee your Database JDBC info
UserThis sets the Database UserThe User Name
PasswordThis sets the Database PasswordThe User's password
JDBCLevelThis sets the JDBC Level
This can be left out if using JDBC1 as JDBC1 is assumed.
However if using JDBC2 then this must be set to 2
1 or 2
DataSourceIf using JDBC 2 then this sets the DB DatasourceSee your Appserver / Database JDBC info
DBInitialContextIf using JDBC 2 then this sets the DB JNDI Initial ContextSee your Database JDBC info

Classes to be loaded
Back to Property File Settings
SettingDescriptionPossible Values
NameQualifierClass The Class which sets the Namespacing (e.g. DOM2)
If you don't need any namespace (e.g. with Xerces 1) leave this out
NameSpace Values
ParserUtilsClassThis sets the Parser you wish to useParserUtils Values
KeyGeneratorClassThis sets the KeyGenerator you wish to use KeyGenerator Values
XSLTClassThis sets the XSLTProcessor you wish to use
Currently only Xalan 1 & Xalan 2 are supported
XSLTClass Values

Values
Back to Property File Settings
SettingDescriptionPossible Values
Yes This simply sets the "Yes" value e.g.
"UseDocRoot=Yes"
Yes
NoThis simply sets the "No" value No
Action"Action=" See below for ActionsAction
AfterInsertOne of the CommitModesAfterInsert
AfterDocumentThe other CommitModeAfterDocument
FileThis tells the system to load a file as
a property file. Used as "File="
File
AUTO_ACKNOWLEDGEOne of the JMS Acknowledgement modesAUTO_ACKNOWLEDGE
DUPS_OK_ACKNOWLEDGEAnother JMS Acknowledgement modeDUPS_OK_ACKNOWLEDGE
CLIENT_ACKNOWLEDGEAnother JMS Acknowledgement modeCLIENT_ACKNOWLEDGE

Actions - These Determine what Action the Transfer Class will take
E.g. Action=StoreDocument
Back to Property File Settings
SettingDescriptionPossible Values
StoreDocument Store a Document in the Database StoreDocument
RetrieveDocumentBySQLRetrieve a Document from the DB via
an SQl Select Statement
RetrieveDocumentBySQL
RetrieveDocumentByKeyRetrieve a Document from the DB using
a Key Value for a table
RetrieveDocumentByKey
RetrieveDocumentByKeysRetrieve a Document from the DB using
a Key Values for a tables
RetrieveDocumentByKeys
CreateMapFromXMLSchemaCreates a Map + associated SQL Create Table
SQL Scripts from a XML Schema (XSD)
NOT YET IMPLEMENTED
CreateMapFromDTDCreates a Map + associated SQL Create Table
SQL Scripts from a Document Type Definition (DTD)
CreateMapFromDTD
CreateMapFromTableCreates a Map from a SQL TableNOT YET IMPLEMENTED
CreateMapFromTablesCreates a Map from a set of SQL TablesNOT YET IMPLEMENTED
CreateMapFromSelectCreates a Map from a SQL SELECT StatementNOT YET IMPLEMENTED

Files - Files to be used for Input or Output
Back to Property File Settings
SettingDescriptionPossible Values
OutputFile File name to write out a properties file to if using the
GUI or GeneratePropFile to build a properties file
Name and Path of File
MapFileThe MapFileName and Path of File
XMLFileThe XML File to transfer Data to / from
Also used as the file source for XSLT Testing
Name and Path of File
SchemaFileThe XML Schema File to use if Generating Maps from
an existing Schema. Currently only DTD'es
are supported
Name and Path of File
XSLTScriptIf using XSLT this sets the Script (.xsl)Name and Path of File
XSLTOutputSets the Output File for testing XSLTName and Path of File
DocRootSets a Document root to allow a number of files
to have simply a filename e.g. XSLTScript might simply
be called myXsl.xsl. If DocRoot was http://myserver/ then
the full path would resolve to http://myserver/myXsl.xsl
Root Path
UseDocRootTells the System to use (or not) the DocRootYes or No


Namespace Information
Back to Property File Settings
SettingDescriptionPossible Values
Prefix The Namespace Prefix Whatever you want...
NamespaceURI The URI of the Namespace Whatever you want...


Action Information
Back to Property File Settings
SettingDescriptionPossible Values
Select The Select Statement to use when using RetrieveDocumentBySQL
Hey it's your SQL
CommitMode The Commit Mode to use when storing Information
In a Database
AfterInsert or AfterDocument
Table Table name to use when using RetrieveDocumentByKey or
RetrieveDocumentByKeys. For multiple tables
add a number e.g. Table1= Table2= etc
Your Table Name(s)
Key Keyle value to use when using RetrieveDocumentByKey or
RetrieveDocumentByKeys. For multiple keys
add a number e.g. Key1= Key2= etc
Key Value(s)
OrderColumns Used when creating a MapFile e.g. using
CreateMapFromDTD to create a column in the SQL Table Structure
In order to preserve Order in a set of the Same Elements
Yes or No
Catalog Used when creating a MapFile e.g. using
CreateMapFromDTD to Set the Catalog for the SQL Table Structure
NOT YET IMPLEMENTED
Schema Used when creating a MapFile e.g. using
CreateMapFromDTD to Set the Schema for the SQL Table Structure
NOT YET IMPLEMENTED
SQLSeparator Used when creating a MapFile e.g. using CreateMapFromDTD to Set
the SQL Separator for the SQL Create Table Statements.
Defaults to ";" if left out
Consult your DB Docs
Basename Not Used Currently. Will be used as part of
GenerateMap to set the name for the outputted Mapfile
NOT YET IMPLEMENTED


JMS (Java Message Service) Information
Back to Property File Settings
SettingDescriptionPossible Values
JMSContext The JMSContextSee your JMS Docs
JMSPasswordA Password to use if your JMS server is set
to use Username/Passwords
Your JMS Password
JMSUserA User to use if you JMS server is set
to use Username/Passwords
Your JMS Username
JMSProviderURL The Provider URL of your JMS ServerSee your JMS Docs
JMSTCF The JMS Topic Connection Factory to use See your JMS Docs
JMSTopic The JMS Topic name Your JMS Topic Name
JMSAckMode The JMS Acknowledge Mode See Values
JMSMessage This is used in the JMS Test Suite. It allows
You to set file which you wish to send
Name and Path of File
JMSTestNum This is used in the JMS Test Suite. It allows
You to set how many times you wish to send a file / message
A number
JMSSilent This is used in the JMS Test Suite. It allows
You to set whether the only output will be the message
Yes


JNDI Information
Back to Property File Settings
Note: This is only used if you want to get Files via JNDI.
I had this in but found JNDI to be flakey so I pulled it out
JNDI Tell the System to use JNDI to fetch a file NOT YET IMPLEMENTED
InitialContext The JNDI Initial ContextNOT YET IMPLEMENTED


KeyGenerator Information
Back to Property File Settings
Note: You only need this if you want to use it as the KeyGen will default to
your user name as schema & XMLDBMSKEY as the table name
KeyGenTable The Table name to use for the KeyGeneratorYour KeyGen Table Name
KeyGenCat The Catalog name to use for the KeyGeneratorYour KeyGen Table Catalog Name
KeyGenSchema The Schema name to use for the KeyGeneratorYour KeyGen Table Schema Name
KeyGenSep The Qualifier Separator for the KeyGen e.g.
The Sep might usually be "." as in Schema.table
This will default to "." if not set
See your DB docs


NameSpace Values
These choices set which namespace you wish to use
Back to Classes to be Loaded
SettingDescriptionPossible Values
DOM2 DOM2 Namespace handling Classde.tudarmstadt.ito.domutils.NQ_DOM2
DataChannel DataChannel Namespace handling Classde.tudarmstadt.ito.domutils.NQ_DataChannel
IBM IBM Namespace handling Classde.tudarmstadt.ito.domutils.NQ_IBM
Oracle Oracle 1 Namespace handling Classde.tudarmstadt.ito.domutils.NQ_Oracle
Oracle2 Oracle 2 Namespace handling Classde.tudarmstadt.ito.domutils.NQ_Oracle2
Sun Sun Namespace handling Classde.tudarmstadt.ito.domutils.NQ_Sun



ParserUtils Values
These choices set which parser you wish to use
Back to Classes to be Loaded
SettingDescriptionPossible Values
IBM XML4J IBM XML4J Implementation Classde.tudarmstadt.ito.domutils.ParserUtilsIBM
JAXP JAXP Implementation Classde.tudarmstadt.ito.domutils.ParserUtilsJAXP
Xerces Xerces Implementation Classde.tudarmstadt.ito.domutils.ParserUtilsXerces
Oracle2 Oracle 2 Implementation Classde.tudarmstadt.ito.domutils.ParserUtilsOracle2
Sun Sun Parser Implementation Classde.tudarmstadt.ito.domutils.ParserUtilsSun


KeyGenerator Values
These choices set which KeyGenerator you wish to use
Back to Classes to be Loaded
SettingDescriptionPossible Values
KeyGeneratorHighLow New KeyGen Class. Allows the setting
of the KeyGen Tablename, Schema etc
de.tudarmstadt.ito.xmldbms.helpers.KeyGeneratorHighLow
KeyGeneratorImpl Original KeyGen Classde.tudarmstadt.ito.xmldbms.helpers.KeyGeneratorImpl


XSLTClass Values
These choices set which XSLT Processor you wish to use
Back to Classes to be Loaded
SettingDescriptionPossible Values
Xalan1 Xalan 1 Implementation Classde.tudarmstadt.ito.xmldbms.xslt.ProcessXslt1
Xalan2 Xalan 2 Implementation Classde.tudarmstadt.ito.xmldbms.xslt.ProcessXslt2


Classes and their uses including Property File Examples and required Values
Back to Table of Contents

The main Classes are:

Transfer
TransferEngine
GenerateMap
MapEngine
ParserUtils
ProcessXSLT
JMSWrapper

Base level classes

ProcessProperties
GetFile

Utility Classes

GeneratePropFile
XMLDBMS (GUI)

Transfer
Back to Classes

Use:

java de.tudarmstadt.ito.xmldbms.tools.Transfer args[]
e.g.
java de.tudarmstadt.ito.xmldbms.tools.Transfer File=mypropertiesfile

Transfer processes the properties which you feed in and takes the Action as defined by the "Action=" property.
The Public methods are the programmable ones (if you wish to wrap Transfer within your own code).
If you wish to use Transfer on it's own (i.e. not wrapped in your own class / logic) then have a look at the JavaDoc for the class.

Property File Values required for Different Transfer Actions

Programming

Obviously if you are using Transfer within a wrapper then you'd probably not want to use an XML File as Input / output but rather a string.
The basic rule is where the method ends with "_s" it either takes an xml file as a String input (e.g. dispatchStoreDocument_s) or returns the XML as a String (e.g. dispatchRetrieveDocumentByKey_s). i.e if you were passing in a text message (String msg1) obtained via JMS you might call:

TransferEngine te = new TransferEngine();
Transfer e = new Transfer();
te.init(props);
e.dispatchStoreDocument_s(te, props, msg1);


or if you wanted to fetch some xml from a db & send it as a string you might use:

TransferEngine te = new TransferEngine();
Transfer e = new Transfer();
te.init(props);
String message = e.dispatchRetrieveDocumentByKey_s(te,props);



TransferEngine
Back to Classes
The TransferEngine is not usually called directly from code.

The Best way (and the way I would recomend) is to call it from Transfer as seen in the above piece of code.
You initialize the TransferEngine by simply calling init and providing it with a properties object as the argument.
It uses this to set up the Parser, the JDBC info etc.
TransferEngine (in it's createMap() method) uses the Object Cache to stored map Objects which means it only needs to create a map object once and then it can reuse the object thus speeding up map object handling quite a lot (in long running processes).

GenerateMap
Back to Classes

GenerateMap is similar to Transfer in that it is an easy to use class which process'es the properties you feed in & then starts MapEngine in order to Generate a Map.

It is designed to be used simply to produce mapfiles.

Use:

java de.tudarmstadt.ito.xmldbms.tools.GenerateMap args[]
e.g.
java de.tudarmstadt.ito.xmldbms.tools.GenerateMap File=mypropertiesfile

GenerateMap processes the properties which you feed in and takes the Action as defined by the "Action=" property.

Property File Values required for Different Generate Map Actions

MapEngine
Back to Classes

The MapEngine is similar to TransferEngine and is also not usually called directly from code.

The Best way (and the way I would recomend) is to call it from Generatemap.

ParserUtils
Back to Classes

The ParserUtils Interface is used to set up the system for different Parsers.
I am including this in the list purely for the programmers reading this as some of the methods are usefull if chaining different actions together (see ProcessXSLT).

In essence look at the JavaDoc / Interface as the methods are usefull as of and by themselves if you are wrapping XML-DBMS code in your own and wish to manipulate the XML Document. As an example, the JAXP ParserUtil provides most of the stuff "missing" from JAXP e.g. the ability to write out a document.

ProcessXSLT
Back to Classes

ProcessXSLT works via an XSLTLoader which then loads a class which implements ProcessXslt Interface. Both Xalan 1 & 2 are supported. There is a small engine called XSLTest which allows you to run XSLT scripts in the same way as Transfer and GenerateMap.

Use:

de.tudarmstadt.ito.xmldbms.xslt.XSLTest args[]
e.g.
java de.tudarmstadt.ito.xmldbms.xslt.XSLTest File=mypropertiesfile

Property File Values required for Different XSLT Actions

The point of the design (as you will see with the JMS code as well) is that given a common properties object, chains of string handling can be marshalled either going from XML > SQL & vice versa. Given large and complex DTD'es such as the Biztalk/Oagi etc and a set of (possibly unchangeable) SQL tables to map them to you will like this.

Given the example used in the Transfer section:
To transform an "outgoing" (i.e. DB to XML) file/string

TransferEngine te = new TransferEngine();
Transfer e = new Transfer();
te.init(props);
String message = e.dispatchRetrieveDocumentByKey_s(te,props);
XSLTLoader xs = new XSLTLoader();
processxslt = xs.init(props);
String Message1 = processxslt.transformString(message, props.getProperty(XMLDBMSProps.XSLTScript));

To transform an "incoming" (i.e. XML to DB) file/string

XSLTLoader xs = new XSLTLoader();
processxslt = xs.init(props);
String msg1 = processxslt.transformString(msg, props.getProperty(XMLDBMSProps.XSLTScript));
TransferEngine te = new TransferEngine();
Transfer e = new Transfer();
te.init(props);
e.dispatchStoreDocument_s(te, props, msg1);

ProcessXSLT1 & 2 (along with de.tudarmstadt.ito.xmldbms.tools.ProcessProperties and de.tudarmstadt.ito.xmldbms.TransferEngine)use the object cache. i.e. once an XSLT Sheet has been processed once then the Processed Sheet / Object is held in the Object Cache and that is retrieved thus saving on processing the sheet everytime (if running in a long running process).

JMSWrapper
Back to Classes

de.tudarmstadt.ito.xmldbms.jms.JMSWrapper is a catch all Class for doing JMS messaging.
It can send & receive & it's even got an "onMessage(Message)" method to have a go with.
It's fairly simple to write to but looking at the 2 User Useable classes (using the good old File=property file command line as with everything else) should show you that.
It should handle most proper JMS servers & even handles SonicMQ w/o trouble (SonicMQ does not use an Initial Context). The 2 User Classes are:

JMSTest which sends messages

and

JMSTestRec which receives messages


Use:

de.tudarmstadt.ito.xmldbms.jms.JMSTest args[]
e.g.
de.tudarmstadt.ito.xmldbms.jms.JMSTest File=mypropertiesfile

Use:

de.tudarmstadt.ito.xmldbms.jms.JMSTestRec args[]
e.g.
de.tudarmstadt.ito.xmldbms.jms.JMSTestRec File=mypropertiesfile

Note: It is possible to send Java objects via JMS. In the JMSwrapper is a test receive method receiveTestObj() and a send method send(ArrayList message) which is built to demonstrate this using an ArrayList. It could be adapted to any serializable object.
I have played with sending Properties Objects & even the entire ObjectCache via JMS and it works. This could be used to scale an "XMLDBMS Server" Horizontally (i.e many Appservers serving / storing XML docs from / into a single DB).



Given the example used in the XSLT section:
To transform an "outgoing" (i.e. DB to XML) file/string and send it

TransferEngine te = new TransferEngine();
Transfer e = new Transfer();
te.init(props);
String message = e.dispatchRetrieveDocumentByKey_s(te,props);
XSLTLoader xs = new XSLTLoader();
processxslt = xs.init(props);
String Message1 = processxslt.transformString(message, props.getProperty(XMLDBMSProps.XSLTScript));
JMSWrapper j = new JMSWrapper();
j.init(props1);
j.send(Message1);

Property File Values required for Different JMS Actions

Base Classes
Back to Classes

These classes provide support services to XMLDBMS. You can use them all over the place as they are very usefull.

It should be pointed out that these classes are for developers as otherwise they simply act as invisible support for the rest of the code.

ProcessProperties
Back to Classes

de.tudarmstadt.ito.xmldbms.tools.ProcessProperties is the class which loads & process'es properties files. All classes which can be started directly using the commandline / properties file (e.g. Transfer, JMSTest etc) all extend ProcessProperties e.g.

public class GenerateMap extends ProcessProperties

It has one central method getProperties(String[] args, int start) The Int start gives the arg number to start the processing from. Usually it is 0. The class is small and simple and is one of the few to use the ObjectCache.
The best thing is again to look at the code as it's (hopefully) fairly simple.


GetFile
Back to Classes

de.tudarmstadt.ito.xmldbms.tools.GetFile is an interface to allow for the abstraction of retrieving files. It is implemented via 2 Classes:

de.tudarmstadt.ito.xmldbms.tools.GetFileJNDI

and

de.tudarmstadt.ito.xmldbms.tools.GetFileURL

The GetFileJNDI works but I'm not too happy with the solidity of fetching files via JNDI at the moment. Maybe I am just unlucky but fetching (even text files such as property files) was a bit dodgy & slow & hard to set up (vs setting up a webserver to serve the files). As such I've left the class there for when / if someone wants to store /retrieve their files (XSLT,Properties, map files) using JNDI e.g. using LDAP but it's unused at the moment.

GetFileURL will load files from any source handled by the Java URL class, local files and Jar files.

My favourite because of it's speed and simplicity is to use http. I would caution that there is a bug (not in our code) which prevents loading an XML file from a jar/zip file where the dtd is also stored in the jar/zip & the reference points to the jar. i.e if using the jar loading to load resources then the XML files must either
(a) not have a DOCTYPE declaration or
(b) it must reference somewhere other than the jar file (e.g. a http url).
GetFileURL also has a method called public String fullqual(String filename) which returns a fully qualified path to the file e.g. file:/// etc.
To load from a jar simply address the file as /filename or /directoryinZipFile/filename.


Utility Classes
Back to Classes

GeneratePropFile
Back to Classes

de.tudarmstadt.ito.xmldbms.tools.GeneratePropFile is a very simple commandline class which is simply used to turn a commandline and / or a set of property files into a single property file.


XMLDBMS
Back to Classes

de.tudarmstadt.ito.xmldbms.gui.XMLDBMS is a sort of proto-GUI (Graphical User Interface). I have been rethinking what's needed as a GUI. Anyway it helps with creating properties files. It does not help with creating mapfiles or XSLT sheets.


Example Properties Files
Back to Table of Contents
  1. JMS
  2. XSLT
  3. Generate Map:
    1. CreateMapFromDTD
  4. Transfer:
    1. StoreDocument
    2. RetrieveDocumentBySQL
    3. RetrieveDocumentByKey
    4. RetrieveDocumentByKeys
  5. Example "Admin" (Global) File

Example JMS Properties Files
Back to Example Properties Files

Here is an example of using the JMSTest class to send a file (D\:\\aat\\rt\\test1.xml) to a topic called testtopic located on a machine called MyMachine using Weblogic once (set by the JMSTestNum=1)

JMSContext=weblogic.jndi.WLInitialContextFactory
JMSProviderURL=t3://MyMachine:7001
JMSTopic=testtopic
JMSAckMode=CLIENT_ACKNOWLEDGE
JMSTCF=jms.defaultConnectionFactory
JMSTestNum=1
JMSMessage=D\:\\aat\\test1.xml

Here is the same thing where the file you wish to send is located on an http server:

JMSContext=weblogic.jndi.WLInitialContextFactory
JMSProviderURL=t3://MyMachine:7001
JMSTopic=testtopic
JMSAckMode=CLIENT_ACKNOWLEDGE
JMSTCF=jms.defaultConnectionFactory
JMSTestNum=1
JMSMessage=http://MyMachine/test1.xml


Here is the same thing where the JMS Server is SwiftMQ

JMSContext=com.swiftmq.jndi.InitialContextFactoryImpl
JMSProviderURL=smqp://MyMachine:4001
JMSTopic=testtopic
JMSAckMode=CLIENT_ACKNOWLEDGE
JMSTCF=jms.defaultConnectionFactory
JMSTestNum=1
JMSMessage=http://MyMachine/test1.xml

Note:

You could pull messages off this topic / attach a listener simply by calling the JMSTestRec Class and using the exact same properties.

For normal (not testing) useage only the following need to be set:

JMSContext
JMSProviderURL
JMSTopic
JMSAckMode
JMSTCF
Note:

JMSAckMode defaults to AUTO_ACKNOWLEDGE is not set. If that is what you want then you don't have to set JMSAckMode.

Example XSLT Properties File
Back to Example Properties Files

In the example below I am transforming the test1.xml file using the test1.xsl script & the de.tudarmstadt.ito.xmldbms.xslt.XSLTest class and I am setting the output file to be output1.xml. I am using Xalan1 as set by the XSLTClass.

XSLTScript=D:\\aat\\test1.xsl
XMLFile=D:\\aat\\test1.xml
XSLTClass=de.tudarmstadt.ito.xmldbms.xslt.ProcessXslt1
XSLTOutput=D:\\aat\\output1.xml


The same example except that I am fetching the xsl and xml files via http but saving locally.

XSLTScript=http://MyMachine/test1.xsl
XMLFile=http://MyMachine/test1.xml
XSLTClass=de.tudarmstadt.ito.xmldbms.xslt.ProcessXslt1
XSLTOutput=D:\\aat\\output1.xml

For normal (not testing) useage only the following need to be set:

XSLTScript
XSLTClass