我有一个ANT任务,它使用RDF文件 - cpldm.ttl并对其运行查询,该查询存在于文件ASK-ldm.rq中。它是使用JAVA ant任务完成的。代码如下 -
<java classname="arq.sparql" fork="true" outputproperty="javaresult" errorproperty="javaerror1">
<arg value="--data=${tools.dir}/build-config/SPARQL/cpldm.ttl"/>
<arg value="--query=${tools.dir}/build-config/SPARQL/ASK-ldm.rq"/>
<jvmarg value="-Xmx1024M"/>
<classpath>
<path>
<fileset dir="${jena.dir}/lib">
<include name="*.jar"/>
</fileset>
</path>
</classpath>
</java>
现在我想通过使用一组SPARQL查询文件(.rq)/ fileset来扩展它。像'ASK1-ldm.rq',ASK2-ldm.rq等,对于每一个我想在查询在同一个RDF文件'cpldm.ttl'上运行后捕获'outputproperty'
我希望我能够正确地解释这一挑战,如果不是随意问的话。
使用Simon的建议后,最终的代码是 -
<target name="validation">
<foreach target="javatask" param="queryFile">
<fileset dir="${tools.dir}/build-config/SPARQL/Queries">
<include name="*.rq"/>
</fileset>
</foreach>
</target>
<target name="javatask">
<java classname="arq.sparql" fork="true" outputproperty="javaresult" errorproperty="javaerror1">
<arg value="--data=${tools.dir}/build-config/SPARQL/cpldm.ttl"/>
<arg value="--query=${queryFile}"/>
<jvmarg value="-Xmx1024M"/>
<classpath>
<path>
<fileset dir="${jena.dir}/lib">
<include name="*.jar"/>
</fileset>
</path>
</classpath>
</java>
<fail message="Error at: ${javaerror1}">
<condition>
<not>
<equals arg1="${javaerror1}" arg2=""/>
</not>
</condition>
</fail>
<echo message="Result for {queryFile} is: ${javaresult}"/>
</target>
在输出中,我首先收到此消息 -
[foreach] The nested fileset element is deprectated, use a nested path instead
然后在外面显示 -
javatask:
[echo] Result for {queryFile} is: Ask => Yes
首先,该错误消息的含义是什么,我想在put put中看到'queryFile'的名称,以便我知道哪个文件给出了什么结果。
还有其他帮助?
答案 0 :(得分:1)
如果你想在不编码java的情况下这样做,你可以通过将这个java任务包装在macro中来实现结果。然后,每个要处理的文件可以调用该宏一次。如果您不想手动多次调用宏,可以使用foreach task from ant-contrib。
如果您不反对为此创建自己的ant任务,我建议您阅读"Writing you own task"。如果您了解java,那么创建Ant任务并不困难。您可以通过以下方式指定您自己的任务:它处理文件集并为每个文件集调用原始java类。
更新:An example for foreach can be seen here。正如您所看到的,它实际上可以多次调用任务,因此您不需要在这种情况下创建宏。