2017-08-31 9 views
0

Ich versuche, ditamap Datei von meinem XSLT Stylesheet Verarbeitung mit Fn: doc() -Funktion zu lesen. Ant schlägt jedoch fehl, da die öffentliche DTD-Kennung nicht aufgelöst werden kann, selbst wenn eine Katalogdatei angegeben ist.Eine Ditamap in ant xslt Aufgabe lesen

[ditamap: mKeyDefUi.ditamap]

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd"> 
<map> 
    <keydef keys="UI_Action"> 
     <topicmeta> 
     <keywords> 
      <keyword>処理</keyword> 
     </keywords> 
     </topicmeta> 
    </keydef> 
    <keydef keys="UI_ActionAfterPrinting"> 
     <topicmeta> 
     <keywords> 
      <keyword>印刷終了時の設定</keyword> 
     </keywords> 
     </topicmeta> 
    </keydef> 
    ... 
</map> 

[ant buld.xml Hauptteil]

<property name="key.map.url" value="file:/D:/SVN/acme-dev/VisualWorks/ja-JP/keydef-map/mKeyDefUi.ditamap"/> 
<property name="dita.catalog.file" value="/D:/DITA-OT/dita-ot-2.5.2/catalog-dita.xml"/> 
... 
<!-- Main target --> 
<target name="uicontrol.conv"> 
    <echo message="topic.file.prop=${topic.file.prop}"/> 
    <antcall target="uicontrol.conv.impl"> 
     <param name="prmTopicFileProp" value="${topic.file.prop}"/> 
     <param name="prmOutputDirUrl" value="${output.dir.url}"/> 
     <param name="prmKeyMapUrl" value="${key.map.url}"/> 
     <param name="prmLogFileUrl" value="${log.file.url}"/> 
    </antcall> 
</target> 

<target name="uicontrol.conv.impl"> 
    <property name="dummy.input" value="${basedir}/dummy-in.xml"/> 
    <property name="dummy.output" value="${basedir}/dummy-out.xml"/> 
    <property name="xsl.file" value="${basedir}/xsl/convUicontrol.xsl"/> 
    <xslt processor="trax" in="${dummy.input}" out="${dummy.output}" style="${xsl.file}" force="true"> 
     <factory name="net.sf.saxon.TransformerFactoryImpl"/> 
     <param name="PRM_TOPIC_FILE_PROP" expression="${prmTopicFileProp}"/> 
     <param name="PRM_OUTPUT_DIR_URL" expression="${prmOutputDirUrl}"/> 
     <param name="PRM_KEY_MAP_URL" expression="${prmKeyMapUrl}"/> 
     <param name="PRM_LOG_FILE_URL" expression="${prmLogFileUrl}"/> 
     <xmlcatalog> 
      <catalogpath> 
       <pathelement location="${dita.catalog.file}"/> 
      </catalogpath> 
     </xmlcatalog> 
    </xslt> 
</target> 

[The ant log]

Executing: 
"c:\program files\oxygen xml editor 19\jre/bin/java" -Xmx256m -classpath "C:\Program Files\Oxygen XML Editor 19\tools\ant/lib/ant-launcher.jar" "-Dant.home=C:\Program Files\Oxygen XML Editor 19\tools\ant" org.apache.tools.ant.launch.Launcher -lib "D:\My_Documents\Java\SaxonPE9-8-0-3J\saxon9pe.jar" -lib "D:\My_Documents\Java\xml-commons-resolver-1.2\resolver.jar" -lib "D:\My_Documents\Java\xml-commons-external-1.4.01\xml-apis.jar" -lib "D:\My_Documents\Java\xml-commons-external-1.4.01\xml-apis-ext.jar" -f "build.xml" "-Dwebhelp.trial.license=no" -v -d 

Apache Ant(TM) version 1.9.8 compiled on December 25 2016 
Buildfile: D:\SVN\acme\key\uicontrol-conv\build.xml 
Adding reference: ant.PropertyHelper 
Detected Java version: 1.8 in: c:\program files\oxygen xml editor 19\jre 
Detected OS: Windows 8.1 
... 

uicontrol.conv.impl: 
Setting project property: dummy.input -> D:\SVN\acme\key\uicontrol-conv/dummy-in.xml 
Setting project property: dummy.output -> D:\SVN\acme\key\uicontrol-conv/dummy-out.xml 
Setting project property: xsl.file -> D:\SVN\acme\key\uicontrol-conv/xsl/convUicontrol.xsl 
    [xslt] Using class org.apache.tools.ant.taskdefs.optional.TraXLiaison 
    [xslt] In file D:\SVN\acme\key\uicontrol-conv\dummy-in.xml time: 1504138459522 
    [xslt] Out file D:\SVN\acme\key\uicontrol-conv\dummy-out.xml time: 0 
    [xslt] Style file D:\SVN\acme\key\uicontrol-conv/xsl/convUicontrol.xsl time: 1504138455268 
    [xslt] Processing D:\SVN\acme\key\uicontrol-conv\dummy-in.xml to D:\SVN\acme\key\uicontrol-conv\dummy-out.xml 
    [xslt] Loading stylesheet D:\SVN\acme\key\uicontrol-conv\xsl\convUicontrol.xsl 
java.lang.NoSuchFieldException: _isNotSecureProcessing 
resolve: 'util_string.xsl' with base: 'file:/D:/SVN/acme/key/uicontrol-conv/xsl/convUicontrol.xsl' 
Class org.apache.tools.ant.types.resolver.ApacheCatalogResolver loaded from parent loader (parentFirst) 
Apache resolver library found, xml-commons resolver will be used 
Using catalogpath 'D:\DITA-OT\dita-ot-2.5.2\catalog-dita.xml' 
Parsing D:\DITA-OT\dita-ot-2.5.2\catalog-dita.xml 
resolve: 'file:/D:/SVN/acme-dev/VisualWorks/ja-JP/keydef-map/mKeyDefUi.ditamap' with base: 'file:/D:/SVN/acme/key/uicontrol-conv/xsl/convUicontrol.xsl' 
resolveEntity: '-//OASIS//DTD DITA Map//EN': 'file:/D:/SVN/acme-dev/VisualWorks/ja-JP/keydef-map/map.dtd' 
No matching catalog entry found, parser will use: 'file:/D:/SVN/acme-dev/VisualWorks/ja-JP/keydef-map/map.dtd' 
    [xslt] D:\SVN\acme\key\uicontrol-conv\xsl\convUicontrol.xsl:17:4: Fatal Error! I/O error reported by XML parser processing file:/D:/SVN/acme-dev/VisualWorks/ja-JP/keydef-map/mKeyDefUi.ditamap: D:\SVN\acme-dev\VisualWorks\ja-JP\keydef-map\map.dtd (Specified file does not found.) Cause: java.io.FileNotFoundException: D:\SVN\acme-dev\VisualWorks\ja-JP\keydef-map\map.dtd (Specified file does not found.) 
    [xslt] Failed to process D:\SVN\acme\key\uicontrol-conv\dummy-in.xml 
    [antcall] Exiting D:\SVN\acme\key\uicontrol-conv\build.xml. 

BUILD FAILED 
D:\SVN\acme\key\uicontrol-conv\build.xml:20: The following error occurred while executing this line: 
D:\SVN\acme\key\uicontrol-conv\build.xml:32: Fatal error during transformation using D:\SVN\acme\key\uicontrol-conv\xsl\convUicontrol.xsl: I/O error reported by XML parser processing file:/D:/SVN/acme-dev/VisualWorks/ja-JP/keydef-map/mKeyDefUi.ditamap: D:\SVN\acme-dev\VisualWorks\ja-JP\keydef-map\map.dtd (Specified file does not found.); SystemID: file:/D:/SVN/acme/key/uicontrol-conv/xsl/convUicontrol.xsl; Line#: 17; Column#: 4 

Der XSLT Aufgabe geladene neueste DITA-OT-Katalogdatei. Aber öffentliche Kennung '- // OASIS // DTD DITA Map // EN' wurde nicht aufgelöst. Was ist falsch an meiner build.xml?

+0

Es sieht für mich so aus, als ob die öffentliche Kennung WAS gelöst wurde, aber es wurde zu der falschen Sache aufgelöst. Darüber hinaus bin ich leider kein Experte für Kataloge und mein Ausgangspunkt für das Debugging wäre der gleiche wie bei Ihnen, aber mit weniger Informationen über den Inhalt Ihres Dateispeichers. –

+0

Der entsprechende Quellcode der Antelle: https://searchcode.com/codesearch/view/28924649/ – tmakita

+0

Sehen Sie, ob Sie Ant aus der Gleichung nehmen und es mit Saxon von der Befehlszeile mit der Option -catalog ausführen können. Ob es funktioniert oder nicht, Sie werden etwas von der Übung lernen. Wenn Sie die Option "Saxon -t" festlegen, sollte die Protokollierung des Resolvers aktiviert sein. –

Antwort

0

Sie sollten auch versuchen, der Xerces-Bibliothek "xercesImpl.jar" einen Klassenpfadverweis hinzuzufügen. Auch diese Fehlerzeile in der Konsole ausgegeben:

java.lang.NoSuchFieldException: _isNotSecureProcessing 

scheint darauf hinzudeuten, dass es ein Versuch, die Xalan TransformerFactoryImpl zu verwenden.

+0

Wenn xercesImpl.jar hinzugefügt wird, verwendet ant diese anstelle von com.sun.org.apache.xerces.internal. Aber das Ergebnis wurde nicht geändert. Das Stylesheet verwendet XSLT 3.0-Funktionen. Das Entfernen der Dokumenttyp-Deklaration von ditamap erzeugt das erwartete Ergebnis. Dies bedeutet, dass SaxonPE9-8-0-3J in dieser build.xml funktioniert. – tmakita

+0

Dann sollten Sie Michael Kay Vorschlag versuchen, eine Befehlszeile zu bauen und Ant aus der Gleichung zu bekommen ... –

Verwandte Themen