2017-08-31 8 views
0

私はfn:doc()関数を使ってXSLTスタイルシート処理からditamapファイルを読み込もうとしています。しかし、カタログファイルが指定されていてもDTDの公開識別子を解決できないため、antは失敗します。ant xsltタスクでditamapを読む

[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> 

[アリbuld.xml主要部]

<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> 

[アリログ]

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 

XSLTタスクがロード最新のDITA-OTカタログファイル。しかし、公開識別子 ' -// OASIS // DTD DITA Map // EN'は解決されませんでした。 私のbuild.xmlで何が問題になっていますか?

+0

公開識別子が解決されたかのように見えますが、間違ったことに解決されました。それを超えて、私はカタログに関する専門家ではなく、デバッグの出発点はあなたのものと同じだが、ファイルストアの内容に関する情報は少ない。 –

+0

関連するantソースコード:https://searchcode.com/codesearch/view/28924649/ – tmakita

+0

Antを方程式から取り除き、Saxonをコマンドラインから-catalogオプションで実行することができるかどうかを確認してください。それがうまくいくかどうか、あなたは運動から何かを学ぶでしょう。 Saxon -tオプションを設定すると、リゾルバのロギングを有効にする必要があります。 –

答えて

0

また、Xercesライブラリ "xercesImpl.jar"へのクラスパス参照を追加するようにしてください。あなたのコンソール出力で また、このエラーライン:

java.lang.NoSuchFieldException: _isNotSecureProcessing 

はXalanのTransformerFactoryImplを使用しようとする試みがあることを示しているように思われます。

+0

xercesImpl.jarを追加すると、antはcom.sun.org.apache.xerces.internalの代わりにそれを使用します。しかし結果は変わらなかった。また、スタイルシートはXSLT 3.0の機能を使用します。 ditamapから文書型宣言を削除すると、予期した結果が得られます。つまり、このbuild.xmlではSaxonPE9-8-0-3Jがうまく動作します。 – tmakita

+0

次に、マイケル・ケイの提案を試して、コマンドラインを構築し、Antを式から外してみてください... –

関連する問題