ANT用于运行一组文件中存在的查询的脚本

时间:2014-03-03 10:45:37

标签: ant rdf sparql

我有一个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'的名称,以便我知道哪个文件给出了什么结果。

还有其他帮助?

1 个答案:

答案 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。正如您所看到的,它实际上可以多次调用任务,因此您不需要在这种情况下创建宏。