Hello Guys,

 

I´ve been messing around with BaseX for a few days and now I am kind of stuck.

 

I have a XSL 2.0 Transformation sheet which works perfectly fine for a standalone application using Saxon HE. Now I tried to use the XSLT module of BaseX with Java. Here is my code:

 

import java.io.IOException;

 

import org.basex.core.Context;

import org.basex.core.cmd.CreateDB;

import org.basex.core.cmd.List;

import org.basex.core.cmd.XQuery;

 

public class App {

       public static void main(String[] args) {

           try {

               // initialize timer

               final long time = System.nanoTime();

               // create session

               final BaseXClient session = new BaseXClient("localhost", 1984, "admin", "admin");

               System.out.println(session.execute("info"));

               // create db context

               Context ctx = new Context();

               // create db

               new CreateDB("stammdaten", "stammdaten2.xml").execute(ctx);

               // show all databases

               System.out.print(new List().execute(ctx));

               // xls transformation

               System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");

               String query = "declare option output:method 'xml';"

                                         + " declare option db:chop 'no';"

                                         + " let $in := db:open('stammdaten')"

                                         + " let $style := doc('template.xsl')"

                                         + " return xslt:transform($in, $style)";

               String result = new XQuery(query).execute(ctx);

               System.out.println("Result: " + result);

               ctx.close();

               // close session

               session.close();

               // print time needed

               final double ms = (System.nanoTime() - time) / 1000000d;

               System.out.println("\n\n" + ms + " ms");

             } catch(final IOException  ex) {

               // print exception

               ex.printStackTrace();

             }

       }

}

 

 

I have started the basexhttp.bat in the bin directory and executed the above code. I get the following console output and stack trace:

 

General Information:

Version: 8.4.1

Used Memory: 20405 KB

 

Global options:

ASYNCTIMEOUT: 3600

AUTHMETHOD: Basic

CACHERESTXQ: false

DBPATH: C:/Program Files (x86)/BaseX/data

DEBUG: false

GLOBALLOCK: false

HOST: localhost

HTTPLOCAL: false

IGNORECERT: false

KEEPALIVE: 600

LANG: English

LANGKEYS: false

LOG: true

LOGMSGMAXLEN: 1000

NONPROXYHOSTS:

 PARALLEL: 8

PASSWORD:

 PORT: 1984

PROXYHOST:

 PROXYPORT: 0

REPOPATH: C:/Program Files (x86)/BaseX/repo

RESTPATH:

 RESTXQPATH:

 SERVERHOST:

 SERVERPORT: 1984

STOPPORT: 8985

TIMEOUT: 30

USER:

 WEBPATH: C:\Program Files (x86)\BaseX\webapp

 

Local options

ADDARCHIVES: true

ADDCACHE: false

ADDRAW: false

ARCHIVENAME: false

ATTRINCLUDE:

 ATTRINDEX: true

AUTOFLUSH: true

AUTOOPTIMIZE: false

BINDINGS:

 CASESENS: false

CATFILE:

 CHECKSTRINGS: true

CHOP: true

COMPPLAN: true

CREATEFILTER: *.xml

CREATEONLY: false

CSVPARSER:

 DEFAULTDB: false

DIACRITICS: false

DOTCOMPACT: false

DOTPLAN: false

DTD: false

EXPORTER:

 FORCECREATE: false

FTINCLUDE:

 FTINDEX: false

HTMLPARSER:

 INLINELIMIT: 100

INTPARSE: false

JSONPARSER:

 LANGUAGE: en

LSERROR: 0

MAINMEM: false

MAXCATS: 100

MAXLEN: 96

MAXSTAT: 30

MIXUPDATES: false

PARSER: xml

QUERYINFO: false

QUERYPATH:

 RUNQUERY: true

RUNS: 1

SERIALIZE: true

SERIALIZER:

 SKIPCORRUPT: false

SPLITSIZE: 0

STEMMING: false

STOPWORDS:

 STRIPNS: false

TAILCALLS: 256

TEXTINCLUDE:

 TEXTINDEX: true

TEXTPARSER:

 TOKENINCLUDE:

 TOKENINDEX: false

UPDINDEX: false

WRITEBACK: false

XINCLUDE: true

XMLPLAN: false

 

Name        Resources  Size    Input Path                                                                                     

-----------------------------------------------------------------------------------------------------------------------------

stammdaten  1          812176  D:/Projekte/XYZ/workspaces/workspace_poc/BaseX/stammdaten2.xml 

 

1 database(s).

org.basex.core.BaseXException: Stopped at ., 1/154:

[FODC0002] "" (Line 1): Vorzeitiges Dateiende.

       at org.basex.core.Command.execute(Command.java:101)

       at org.basex.core.Command.execute(Command.java:123)

       at net.atos.epi.XMLTransformationProofOfConceptBaseX.App.main(App.java:31)

Caused by: org.basex.query.QueryException: "" (Line 1): Vorzeitiges Dateiende.

       at org.basex.query.QueryError.get(QueryError.java:1344)

       at org.basex.query.func.xslt.XsltTransform.item(XsltTransform.java:39)

       at org.basex.query.expr.ParseExpr.iter(ParseExpr.java:44)

       at org.basex.query.MainModule.iter(MainModule.java:110)

       at org.basex.query.QueryContext.iter(QueryContext.java:342)

       at org.basex.query.QueryProcessor.iter(QueryProcessor.java:81)

       at org.basex.core.cmd.AQuery.query(AQuery.java:90)

       at org.basex.core.cmd.XQuery.run(XQuery.java:22)

       at org.basex.core.Command.run(Command.java:398)

       at org.basex.core.Command.execute(Command.java:100)

       ... 2 more

Caused by: java.io.IOException: "" (Line 1): Vorzeitiges Dateiende.

       at org.basex.build.xml.SAXWrapper.parse(SAXWrapper.java:83)

       at org.basex.build.SingleParser.parse(SingleParser.java:33)

       at org.basex.build.Builder.parse(Builder.java:73)

       at org.basex.build.MemBuilder.dataClip(MemBuilder.java:77)

       at org.basex.build.MemBuilder.build(MemBuilder.java:66)

       at org.basex.build.MemBuilder.build(MemBuilder.java:61)

       at org.basex.build.MemBuilder.build(MemBuilder.java:50)

       at org.basex.build.MemBuilder.build(MemBuilder.java:40)

       at org.basex.query.value.node.DBNode.<init>(DBNode.java:85)

       at org.basex.query.func.xslt.XsltTransform.item(XsltTransform.java:37)

       ... 10 more

Caused by: org.xml.sax.SAXParseException; systemId: file:///D:/Projekte/XYZ/workspaces/workspace_poc/BaseX/; lineNumber: 1; columnNumber: 1; Vorzeitiges Dateiende.

       at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)

       at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)

       at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)

       at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)

       at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source)

       at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)

       at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)

       at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)

       at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)

       at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)

       at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)

       at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)

       at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)

       at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)

       at org.basex.build.xml.SAXWrapper.parse(SAXWrapper.java:78)

       ... 19 more

 

 

(Vorzeitiges Dateiende = Premature end of file)

 

When I run my standalone application with stammdaten2.xml and my template.xsl everything is fine, so I doubt that the stylesheet is the problem. The stylesheet is rather complex and consists of several subtemplates, which are included with <xsl: include href=”xyz.xsl” />.

 

Running the XQuery in the BaseX GUI does not work, since the GUI only provides support for XLST 1.0. Is there a way to change that?

 

The stacktrace tells me that the system tries to open and parse an empty file, but I have no idea why and which file causes the problem. My assumption is the template.xsl causes the problem, since it said that it “Stopped at .”  I copied the stylesheets in every folder that was reasonable for me, but I still got this error. Please tell me what I did wrong.

 

Best regards,

Jan Taschner