Actually the last email did not formate properly, hence I just wanted to rewrite the part about the directory structure:
_APP_TypeSystem.xml is stored in the following path relative to the project root /app/informationExtraction/appTypes/ Hey again me, Furthermore I do have a directory /app/rutaComponents with the following content — ./descritor (Fixed descriptors) — ./generatedComponents (Dynamic components) with following content —— ./descriptor — — ./resources — — ./script — ./resources — ./script (Fixed scripts) — ./scriptImporter (Importer for dynamic and new scripts) With the script importer, I can import scripts from /app/rutaComponents/generatedComponents/script in order to create a descriptor in ./generatedComponents/descriptor Again sorry for the inappropriate formation! Best, Ingo > On 11 Nov 2016, at 13:04, Ingo Glaser <[email protected]> wrote: > > Hi Peter, > > I figured that even when using version 2.5.0, importByLocation is default for > me. I did debug it as well as the import tags in the created .xml files do > have an attribute location. > > When I was previously talking about the error, this happened during executing > one of my pipelines. Therefore I’ve used some previously created descriptors, > they did work in version 2.3.0 though. These descriptors are based on ruta > scripts, which do not change anymore. However, I’ve also the option to create > (or update) a ruta script manually and then using the application in order to > create the proper descriptor in xml. The weird thing I’ve just noticed is, > when creating the .xml descriptor from my ruta script, the (or an) error > already occurred when using version 2.3.0, however, the process of creating > the .xml descriptor did not abort. When using version 2.5.0 the creation > process does abort though. Either way, the pipeline with version 2.5.0 does > not work. When running my pipeline, either with the newly created descriptors > (where the error occurs during creation) or with the existing ones, the > process is aborted with the error from my first message. > > The error I show you below, actually occurs when running my importer. Hence I > also add the importer. The previous error, as already mentioned actually > occurred when running my pipeline and thus using the fixed created > descriptor. So for now I think it makes more sense, to first solve the > problem with creating the descriptor from my ruta scripts. I think afterwards > I can solve the other issue as well, since they somehow relate to each other. > > Below I’d like to give you some more information, also according to your > request: > > The _APP_TypeSystem.xml is stored in the following path relative to the > project root /app/informationExtraction/appTypes/ > Furthermore I do have a directory /app/rutaComponents with the following > content > ./descriptor (Fixed descriptors) > ./generatedComponents (Dynamic components) > ./descriptor > ./resources > ./script > ./resources > ./script (Fixed scripts) > ./scriptImporter (Importer for dynamic and new scripts) > With the script importer, I can import scripts from > ./generatedComponents/script in order to create a descriptor in > ./generatedComponents/descriptor > > - Complete error: > > org.apache.uima.ruta.extensions.RutaParseRuntimeException: > org.apache.uima.ruta.extensions.RutaParseRuntimeException: > org.apache.uima.ruta.extensions.RutaParseRuntimeException: > org.apache.uima.ruta.extensions.RutaParseRuntimeException: > java.lang.RuntimeException: Cannot resolve imports in _APP_TypeSystem > at > org.apache.uima.ruta.parser.RutaParser.emitErrorMessage(RutaParser.java:397) > at > org.apache.uima.ruta.parser.RutaParser.file_input(RutaParser.java:733) > at > org.apache.uima.ruta.descriptor.RutaDescriptorFactory.parseDescriptorInformation(RutaDescriptorFactory.java:146) > at > rutaComponents.scriptImporter.RutaComponentGenerator.generate(RutaComponentGenerator.java:79) > at controllers.RutaController.saveRutaFile(RutaController.java:91) > at > Routes$$anonfun$routes$1$$anonfun$applyOrElse$82$$anonfun$apply$82.apply(routes_routing.scala:1494) > at > Routes$$anonfun$routes$1$$anonfun$applyOrElse$82$$anonfun$apply$82.apply(routes_routing.scala:1494) > at > play.core.Router$HandlerInvokerFactory$$anon$4.resultCall(Router.scala:264) > at > play.core.Router$HandlerInvokerFactory$JavaActionInvokerFactory$$anon$15$$anon$1.invocation(Router.scala:255) > at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:55) > at play.GlobalSettings$1.call(GlobalSettings.java:67) > at play.core.j.JavaAction$$anonfun$11.apply(JavaAction.scala:82) > at play.core.j.JavaAction$$anonfun$11.apply(JavaAction.scala:82) > at > scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) > at > scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) > at > play.core.j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:40) > at > play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:46) > at > play.core.j.HttpExecutionContext.execute(HttpExecutionContext.scala:32) > at scala.concurrent.impl.Future$.apply(Future.scala:31) > at scala.concurrent.Future$.apply(Future.scala:485) > at play.core.j.JavaAction$class.apply(JavaAction.scala:82) > at > play.core.Router$HandlerInvokerFactory$JavaActionInvokerFactory$$anon$15$$anon$1.apply(Router.scala:252) > at > play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:130) > at > play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:130) > at play.utils.Threads$.withContextClassLoader(Threads.scala:21) > at > play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:129) > at > play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:128) > at scala.Option.map(Option.scala:145) > at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:128) > at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:121) > at > play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:483) > at > play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:483) > at > play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:519) > at > play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:519) > at > play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:496) > at > play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:496) > at > scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) > at > scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) > at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:41) > at > akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:393) > at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) > at > scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) > at > scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) > at > scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) > Caused by: org.apache.uima.ruta.extensions.RutaParseRuntimeException: > org.apache.uima.ruta.extensions.RutaParseRuntimeException: > org.apache.uima.ruta.extensions.RutaParseRuntimeException: > java.lang.RuntimeException: Cannot resolve imports in _APP_TypeSystem > at > org.apache.uima.ruta.parser.RutaParser.emitErrorMessage(RutaParser.java:397) > at > org.apache.uima.ruta.parser.RutaParser.globalStatements(RutaParser.java:891) > at > org.apache.uima.ruta.parser.RutaParser.file_input(RutaParser.java:714) > ... 42 more > Caused by: org.apache.uima.ruta.extensions.RutaParseRuntimeException: > org.apache.uima.ruta.extensions.RutaParseRuntimeException: > java.lang.RuntimeException: Cannot resolve imports in _APP_TypeSystem > at > org.apache.uima.ruta.parser.RutaParser.emitErrorMessage(RutaParser.java:397) > at > org.apache.uima.ruta.parser.RutaParser.globalStatement(RutaParser.java:929) > at > org.apache.uima.ruta.parser.RutaParser.globalStatements(RutaParser.java:870) > ... 43 more > Caused by: org.apache.uima.ruta.extensions.RutaParseRuntimeException: > java.lang.RuntimeException: Cannot resolve imports in _APP_TypeSystem > at > org.apache.uima.ruta.parser.RutaParser.emitErrorMessage(RutaParser.java:397) > at > org.apache.uima.ruta.parser.RutaParser.importStatement(RutaParser.java:2609) > at > org.apache.uima.ruta.parser.RutaParser.globalStatement(RutaParser.java:916) > ... 44 more > Caused by: java.lang.RuntimeException: Cannot resolve imports in > _APP_TypeSystem > at > org.apache.uima.ruta.RutaEnvironment.importPackageFromTypeSystem(RutaEnvironment.java:594) > at > org.apache.uima.ruta.parser.RutaParser.importPackage(RutaParser.java:548) > at > org.apache.uima.ruta.parser.RutaParser.importStatement(RutaParser.java:2565) > ... 45 more > Caused by: org.apache.uima.util.InvalidXMLException: An import could not be > resolved. No file with name "_APP_TypeSystem.xml" was found in the class > path or data path. (Descriptor: <unknown>) > at > org.apache.uima.resource.metadata.impl.Import_impl.findAbsoluteUrl(Import_impl.java:122) > at > org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl.resolveImports(TypeSystemDescription_impl.java:230) > at > org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl.resolveImports(TypeSystemDescription_impl.java:210) > at > org.apache.uima.ruta.RutaEnvironment.importPackageFromTypeSystem(RutaEnvironment.java:592) > ... 47 more > > - This is the relevant code of the importer: > > public class RutaComponentGenerator { > > public static String GENERATED_COMPONENTS_PATH = "app" + File.separator + > "rutaComponents" + File.separator + "generatedComponents" + File.separator; > > /** > * The path where the script will be written > **/ > public static String SCRIPT_OUTPUT_PATH = GENERATED_COMPONENTS_PATH + > "script" + File.separator; > > /** > * The path where the generated *TypeSystem.xml will be written > **/ > private File typeSystemOutputDirectory = new > File(GENERATED_COMPONENTS_PATH + "descriptor"); > > /** > * The path where the generated *Engine.xml will be written > **/ > private File analysisEngineOutputDirectory = new > File(GENERATED_COMPONENTS_PATH + "descriptor"); > > // The paths where other relevant scripts descriptors, and resources are > private String[] scriptPaths = new String[]{"app" + File.separator + > "rutaComponents" + File.separator + "script", GENERATED_COMPONENTS_PATH + > "script"}; > private String[] descriptorPaths = new String[]{"app" + File.separator + > "rutaComponents" + File.separator + "descriptor", GENERATED_COMPONENTS_PATH + > "descriptor", "app" + File.separator + "informationExtraction" + > File.separator + "lexiaTypes"}; > private String[] resourcePaths = new String[]{"app" + File.separator + > "rutaComponents" + File.separator + "resources", GENERATED_COMPONENTS_PATH + > "resources"}; > > /** > * Prepares Generates the XML files needed for the AnalysisEngine and the > TypeSystem of the new RUTA component > * > * @param scriptName The file name of the script for which the > RUTA-component shall be generated > */ > public void generate(String scriptName) { > > if (!typeSystemOutputDirectory.exists()) { > typeSystemOutputDirectory.mkdirs(); > } > if (!analysisEngineOutputDirectory.exists()) { > analysisEngineOutputDirectory.mkdirs(); > } > > RutaDescriptorFactory factory = null; > try { > factory = new RutaDescriptorFactory("app" + File.separator + > "rutaComponents" + File.separator + "descriptor" + File.separator + > "BasicTypeSystem.xml", "app" + File.separator + "rutaComponents" + > File.separator + "descriptor" + File.separator + "BasicEngine.xml"); > } catch (MalformedURLException e) { > e.printStackTrace(); > } > > RutaBuildOptions options = new RutaBuildOptions(); > options.setEncoding("UTF-8"); > options.setResolveImports(true); > > // ToDo: Ensure that Mercurial-controlled scripts can't be rebuilt > with this mechanism (for security reasons) > // ToDo: Ensure that the filename is unique for all scripts > File scriptToBuild = new File(SCRIPT_OUTPUT_PATH + scriptName + > ".ruta"); > > try { > RutaDescriptorInformation descriptorInformation = > factory.parseDescriptorInformation(scriptToBuild, options); > String packageString = ""; > > String engineOutput = new File(analysisEngineOutputDirectory, > packageString + descriptorInformation.getScriptName() + > options.getAnalysisEngineSuffix() + ".xml").getAbsolutePath(); > > String typeSystemOutput = new File(typeSystemOutputDirectory, > packageString + descriptorInformation.getScriptName() + > options.getTypeSystemSuffix() + ".xml").getAbsolutePath(); > > Pair<AnalysisEngineDescription, TypeSystemDescription> > descriptions = factory.createDescriptions(engineOutput, typeSystemOutput, > descriptorInformation, options, scriptPaths, descriptorPaths, resourcePaths); > > write(descriptions.getKey(), engineOutput); > write(descriptions.getValue(), typeSystemOutput); > } catch (RecognitionException re) { > System.err.println("Failed to parse UIMA Ruta script file: " + > scriptToBuild.getAbsolutePath()); > re.printStackTrace(); > } catch (IOException ioe) { > System.err.println("Failed to load UIMA Ruta script file: " + > scriptToBuild.getAbsolutePath()); > ioe.printStackTrace(); > } catch (Exception e) { > e.printStackTrace(); > } > } > > private void write(XMLizable desc, String aFilename) throws SAXException, > IOException { > OutputStream os = null; > try { > File out = new File(aFilename); > out.getParentFile().mkdirs(); > os = new FileOutputStream(out); > Logger.info("Debug info: Writing descriptor to: " + out); > desc.toXML(os); > } finally { > IOUtils.closeQuietly(os); > } > } > } > - Again some sample imports I’m using: > > // Import types > IMPORT PACKAGE de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos FROM > _LEXIA_TypeSystem AS pos; > > I’d really appreciate any help and thanks so much in advance! > > Best, > Ingo >> On 10 Nov 2016, at 16:33, Peter Klügl <[email protected]> wrote: >> >> Hi, >> >> this should work just like in 2.3.0. However, there are some changes >> (and a bug concerning the datapath). >> >> I assume that you use the ruta-maven-plugin to create the descriptors? >> Did you use import-by-location before? I think the default changed to >> import-by-name. >> >> <importByName>true</importByName> >> >> You can switch the import back to import-by-location in the plugin >> configuration (set it to false), but I rather recommend to use >> import-by-name in maven built projects. >> In order to do this, you best place the type system descriptor in the >> classpath. If you do not want to refer to the type system with package, >> place it directly in the classpath root, e.g., in src/main/resources. >> >> In case of a DKPro Core type system, add the artifact as a dependency if >> not done yet and change your import to: >> >> IMPORT PACKAGE de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos FROM >> desc.type.POS AS pos; >> >> Then, you do not need to copy anything since the typesystem is directly >> loaded from the dependency (the jar in the m2 repo). >> >> btw, there is an up-to-date example project for the integration of DKPro >> Core in Ruta scripts: >> https://github.com/pkluegl/ruta/tree/master/ruta-german-novel-with-dkpro >> >> In case this did not solve your problem: How did you import the >> typesystem before? >> - Is the type system located in the root of the classpath? >> - Did you specify descriptorPaths in the configuration parameters? >> - Have you set the datapath? >> >> Best, >> >> Peter >> >> >> Am 10.11.2016 um 15:57 schrieb Ingo Glaser: >>> Hey guys, >>> >>> I recently updated from Apache UIMA Ruta version 2.3.0 to 2.5.0. However, >>> after the upgrade, my application does not run anymore, due to some error >>> in the ruta scripts. I get the following error: >>> >>> Caused by: org.apache.uima.util.InvalidXMLException: An import could not be >>> resolved. No file with name "_APP_TypeSystem.xml" was found in the class >>> path or data path. (Descriptor: <unknown>) >>> at >>> org.apache.uima.resource.metadata.impl.Import_impl.findAbsoluteUrl(Import_impl.java:115) >>> at >>> org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl.resolveImports(TypeSystemDescription_impl.java:228) >>> at >>> org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl.resolveImports(TypeSystemDescription_impl.java:208) >>> at >>> org.apache.uima.ruta.RutaEnvironment.importPackageFromTypeSystem(RutaEnvironment.java:592) >>> ... 67 more >>> I assume that's because of the import within my ruta script. Do you have >>> any idea, if and how the way we import something in a script has changed >>> from version 2.3 to 2.5? >>> >>> I do import like this: >>> >>> IMPORT PACKAGE de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos FROM >>> _APP_TypeSystem AS pos; >>> >>> Thanks already in advance for your help! >>> >>> >>> >>> >> >
