Mercurial > hg > mpdl-group
view software/mpdl-services/mpiwg-mpdl-xml/src/de/mpg/mpiwg/berlin/mpdl/xml/tmp/XmlExamples.java @ 18:dc5e9fcb3fdc
Erstellung
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Wed, 09 Nov 2011 15:27:46 +0100 |
parents | |
children |
line wrap: on
line source
package de.mpg.mpiwg.berlin.mpdl.xml.tmp; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import java.util.Date; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import com.sun.org.apache.xerces.internal.parsers.SAXParser; import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException; import de.mpg.mpiwg.berlin.mpdl.xml.transform.BasicTransformer; import net.sf.saxon.s9api.Processor; import net.sf.saxon.s9api.QName; import net.sf.saxon.s9api.SaxonApiException; import net.sf.saxon.s9api.Serializer; import net.sf.saxon.s9api.XQueryCompiler; import net.sf.saxon.s9api.XQueryEvaluator; import net.sf.saxon.s9api.XQueryExecutable; import net.sf.saxon.s9api.XdmAtomicValue; import net.sf.saxon.s9api.XdmValue; import net.sf.saxon.s9api.XsltCompiler; import net.sf.saxon.s9api.XsltExecutable; import net.sf.saxon.s9api.XsltTransformer; public class XmlExamples { private XsltTransformer xsltTransformer; private Processor processor; private boolean saxonFast = false; public static void main(String[] args) { try { XmlExamples xmlUtil = new XmlExamples(); xmlUtil.saxonFast = true; // xmlUtil.init(); // xmlUtil.testXQuery(); // xmlUtil.testGetFragment(); xmlUtil.testMpdlTransformer(); // xmlUtil.performanceTestGetFragment(); // xmlUtil.performanceTestGetFragment("text/Goerz_2008.xml"); } catch (Exception e) { e.printStackTrace(); } } private void init() { try { StreamSource xslStreamSource = new StreamSource("examples/getFragment.xsl"); if (saxonFast) { xslStreamSource = new StreamSource("examples/getFragmentSaxonFast.xsl"); } processor = new Processor(true); XsltCompiler xsltCompiler = processor.newXsltCompiler(); XsltExecutable xsltExecutable = xsltCompiler.compile(xslStreamSource); xsltTransformer = xsltExecutable.load(); } catch (SaxonApiException e) { e.printStackTrace(); } } private void testMpdlTransformer() { try { // String fragment = getFragment("examples/Benedetti_1585.xml", "pb", 300, "pb", 301); BasicTransformer mpdlTransformer = new BasicTransformer(); String srcUrl = "http://mpdl-test.mpiwg-berlin.mpg.de:30030/mpdl/page-query-result.xql?document=/echo/la/Benedetti_1585.xml&mode=text&pn=13&export=pureXml"; String xslUrl = "http://mpdl-test.mpiwg-berlin.mpg.de:30030/mpdl/presentation/pageHtml.xsl"; String outputPropertiesStr = "method=xhtml media-type=text/html omit-xml-declaration=no indent=no encoding=utf-8"; mpdlTransformer.transform(srcUrl, xslUrl, "", outputPropertiesStr); // xslUrl = "http://mpdl-test.mpiwg-berlin.mpg.de:30030/mpdl/presentation/pageXml.xsl"; // mpdlTransformer.transformByTransformerFactory(srcUrl, xslUrl, "", outputPropertiesStr); } catch (ApplicationException e) { e.printStackTrace(); } } private void testGetFragment() { getFragment("examples/Benedetti_1585.xml", "pb", 300, "pb", 302); // getFragmentByJavax("examples/Benedetti_1585.xml", "pb", 300, "pb", 301); /* getFragment("examples/Test_1789.xml", "pb", 1, "pb", 2); getFragment("examples/Goerz_2008.xml", "pb", 58, "pb", 59); getFragment("examples/Benedetti_1585.xml", "lb", 385, "lb", 387); getFragment("examples/Benedetti_1585.xml", "pb", 300, "pb", 302); getFragment("examples/Benedetti_1585.xml", "pb", 303, "pb", 304); getFragment("examples/Goerz_2008.xml", "pb", 58, "pb", 59); */ } private void performanceTestGetFragment() { for (int i=1; i<=100; i++) { String fileName = "/Users/jwillenborg/java/eclipse-workspace/XmlUtil/examples/tmp/Test-" + i + ".xml"; // String fileName = "examples/Test.xml"; Date before = new Date(); for (int j=300; j<=400; j++) { getFragment(fileName, "pb", j, "pb", j+1); } Date after = new Date(); System.out.println(i+ ". Needed time: " + (after.getTime() - before.getTime()) + " ms"); } } private void testXQuery() { // String xqueryStr = "declare namespace TEI='http://www.tei-c.org/ns/1.0'; //TEI:pb[@n=\"1\"]/following::*[. << //TEI:pb[@n=\"2\"]]"; // String xqueryStr = "declare namespace TEI='http://www.tei-c.org/ns/1.0'; (//TEI:pb[@n=\"1\"]/following::*) intersect (//TEI:pb[@n=\"2\"]/preceding::*)"; String xqueryStr = "declare namespace TEI='http://www.tei-c.org/ns/1.0'; //TEI:pb[@n=\"1\"]"; xquery("examples/Goerz_2008.xml", xqueryStr); } private void xquery(String xmlFileName, String xqueryStr) { try { StreamSource xmlDoc = new StreamSource(xmlFileName); XQueryCompiler xQueryCompiler = processor.newXQueryCompiler(); XQueryExecutable xQueryExecutable = xQueryCompiler.compile(xqueryStr); Serializer serializer = new Serializer(); serializer.setOutputWriter(new StringWriter()); XQueryEvaluator xQueryEvaluator = xQueryExecutable.load(); Date before = new Date(); xQueryEvaluator.setSource(xmlDoc); XdmValue result = xQueryEvaluator.evaluate(); // xQueryEvaluator.run(serializer); // System.out.println(serializer.getOutputDestination().toString()); Date after = new Date(); System.out.println("Needed time: " + (after.getTime() - before.getTime()) + " ms"); } catch (SaxonApiException e) { e.printStackTrace(); } } private String getFragment(String xmlFileName, String ms1Name, int ms1Pos, String ms2Name, int ms2Pos) { String pageFragment = null; try { StreamSource xmlDoc = new StreamSource(new StringReader("<?xml version=\"1.0\"?><bla/>")); if (! saxonFast) xmlDoc = new StreamSource(xmlFileName); Serializer serializer = new Serializer(); serializer.setOutputWriter(new StringWriter()); serializer.setOutputProperty(Serializer.Property.INDENT, "yes"); xsltTransformer.setSource(xmlDoc); // needs some time for bigger documents xsltTransformer.setDestination(serializer); QName xmlFileNameQName = new QName("xmlFileName"); XdmValue xmlFileNameXdmValue = new XdmAtomicValue(xmlFileName); QName ms1NameQName = new QName("ms1Name"); XdmValue ms1NameXdmValue = new XdmAtomicValue(ms1Name); QName ms1PositionQName = new QName("ms1Position"); XdmValue ms1PositionXdmValue = new XdmAtomicValue(ms1Pos); QName ms2NameQName = new QName("ms2Name"); XdmValue ms2NameXdmValue = new XdmAtomicValue(ms2Name); QName ms2PositionQName = new QName("ms2Position"); XdmValue ms2PositionXdmValue = new XdmAtomicValue(ms2Pos); xsltTransformer.setParameter(xmlFileNameQName, xmlFileNameXdmValue); xsltTransformer.setParameter(ms1NameQName, ms1NameXdmValue); xsltTransformer.setParameter(ms1PositionQName, ms1PositionXdmValue); xsltTransformer.setParameter(ms2NameQName, ms2NameXdmValue); xsltTransformer.setParameter(ms2PositionQName, ms2PositionXdmValue); xsltTransformer.transform(); // needs some time for bigger documents pageFragment = serializer.getOutputDestination().toString(); } catch (SaxonApiException e) { e.printStackTrace(); } return pageFragment; } private void getFragmentByJavax(String xmlFileName, String ms1Name, int ms1Pos, String ms2Name, int ms2Pos) { try { StreamSource xslStreamSource = new StreamSource("examples/getFragment.xsl"); Transformer transformer = TransformerFactory.newInstance().newTransformer(xslStreamSource); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); StreamResult result = new StreamResult(new StringWriter()); StreamSource xmlStreamSource = new StreamSource(xmlFileName); transformer.setParameter("ms1Name", ms1Name); transformer.setParameter("ms1Position", new Integer(ms1Pos)); transformer.setParameter("ms2Name", ms2Name); transformer.setParameter("ms2Position", new Integer(ms2Pos)); transformer.transform(xmlStreamSource, result); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } } private void performanceTestGetFragment(String xmlFileName) { try { // init StreamSource xslStreamSource = new StreamSource("examples/getFragment.xsl"); Processor processor = new Processor(true); XsltCompiler xsltCompiler = processor.newXsltCompiler(); XsltExecutable xsltExecutable = xsltCompiler.compile(xslStreamSource); XsltTransformer xsltTransformer = xsltExecutable.load(); StreamSource xmlDoc = new StreamSource(xmlFileName); Serializer serializer = new Serializer(); serializer.setOutputWriter(new StringWriter()); serializer.setOutputProperty(Serializer.Property.INDENT, "yes"); xsltTransformer.setSource(xmlDoc); // needs some time for bigger documents xsltTransformer.setDestination(serializer); for (int i=1; i<=100; i++) { QName ms1NameQName = new QName("ms1Name"); XdmValue ms1NameXdmValue = new XdmAtomicValue("pb"); QName ms1PositionQName = new QName("ms1Position"); XdmValue ms1PositionXdmValue = new XdmAtomicValue(i); QName ms2NameQName = new QName("ms2Name"); XdmValue ms2NameXdmValue = new XdmAtomicValue("pb"); QName ms2PositionQName = new QName("ms2Position"); XdmValue ms2PositionXdmValue = new XdmAtomicValue(i+1); xsltTransformer.setParameter(ms1NameQName, ms1NameXdmValue); xsltTransformer.setParameter(ms1PositionQName, ms1PositionXdmValue); xsltTransformer.setParameter(ms2NameQName, ms2NameXdmValue); xsltTransformer.setParameter(ms2PositionQName, ms2PositionXdmValue); Date before = new Date(); xsltTransformer.transform(); // needs some time for bigger documents Date after = new Date(); System.out.println(i+ ". Needed time: " + (after.getTime() - before.getTime()) + " ms"); } } catch (SaxonApiException e) { e.printStackTrace(); } } private void getFragmentByContentHandler(String xmlFileName, String ms1Name, int ms1Pos, String ms2Name, int ms2Pos) { Date before = new Date(); File inputFile = new File(xmlFileName); GetFragmentContentHandler getFragmentContentHandler = new GetFragmentContentHandler(ms1Name, ms1Pos, ms2Name, ms2Pos); try { XMLReader xmlParser = new SAXParser(); xmlParser.setContentHandler(getFragmentContentHandler); InputStream inputStream = new FileInputStream(inputFile); BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); InputSource input = new InputSource(bufferedInputStream); xmlParser.parse(input); bufferedInputStream.close(); String fragment = getFragmentContentHandler.getFragment(); } catch (SAXException e) { Date after = new Date(); System.out.println(". Needed time: " + (after.getTime() - before.getTime()) + " ms"); e.printStackTrace(); } catch (IOException e) { Date after = new Date(); System.out.println(". Needed time: " + (after.getTime() - before.getTime()) + " ms"); e.printStackTrace(); } } }