Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替换Jena中SPARQL查询中的变量_Java_Sparql_Rdf_Jena - Fatal编程技术网

Java 替换Jena中SPARQL查询中的变量

Java 替换Jena中SPARQL查询中的变量,java,sparql,rdf,jena,Java,Sparql,Rdf,Jena,我需要替换SPARQL查询中的一些变量(indx、placx、datx、tempx),为此我使用以下代码: ParameterizedSparqlString ps=new ParameterizedSparqlString(); ps.setCommandText(“插入数据”+ "{" + “:indx:locatedIn:placx;“+”:onDate datx;“+”:测量温度。”+ "}"); ps.setIri(“:”,“http://www.example.com/tempse

我需要替换SPARQL查询中的一些变量(indx、placx、datx、tempx),为此我使用以下代码:

ParameterizedSparqlString ps=new ParameterizedSparqlString();
ps.setCommandText(“插入数据”+
"{" + 
“:indx:locatedIn:placx;“+”:onDate datx;“+”:测量温度。”+
"}");
ps.setIri(“:”,“http://www.example.com/tempsensor#");
ps.setLiteral(“indx”,ind);
ps.setLiteral(“placx”,plac);
ps.setLiteral(“datx”,dat);
ps.setLiteral(“tempx”,temp);
System.out.println(ps.toString())

运行时,它只需打印:
插入数据{:indx:locatedIn:placx;:onDate datx;:measures tempx.}
如何在查询中成功插入值

更新#1
代码中引入的更改如下:

ps.setBaseUri(“http://www.example.com/tempsensor#");
ps.setCommandText(“前缀:\n”+
“插入数据\n”+
“{\n”+
?indx:locatedIn?placx;“+”:onDate?datx;“+”:measures?tempx。\n“+
"}");
ps.setIri(“?indx”,ps.getBaseUri()+ind);
ps.setIri(“placx”,ps.getBaseUri()+plac);
ps.setLiteral(“datx”,dat);
ps.setLiteral(“tempx”,temp);
System.out.println(ps.toString());
我得到的输出是:

PREFIX : <http://www.example.com/tempsensor#>
INSERT DATA
{
 <#ind1>  :locatedIn <#Delhi> ;:onDate "2015-02-01" ; :measures 13 .
}
前缀:
插入数据
{
:locatedIn;:onDate“2015-02-01”;:措施13。
}
我不知道我哪里做错了。我需要这样的输出:

 PREFIX : <http://www.example.com/tempsensor#>
    INSERT DATA
    {
     :ind1  :locatedIn :Delhi ; :onDate 2015-02-01 ; :measures 13 .
    }
前缀:
插入数据
{
:ind1:地点:德里;:onDate 2015-02-01;:措施13。
}
i、 例如,ind1应该没有引号、尖括号和#,日期应该没有引号。locatedIn是objecttypeProperty,onDate和measures是数据类型属性。实际上,我需要逐行从CSV中读取数据并插入到本体中。为此,我想编写一个脚本,在这里我将读取CSV的行,并将其转换为SPARQL字符串。在下一步中,我将使用创建的字符串进行更新SPARQL查询。

在查询中需要使用变量,而不是常量。例如,您的字符串最初应为:

insert data { ?indx :locatedIn ?placx ... }

然后可以使用各种setXXX函数。但是,请注意,不仅仅是setLiteral。这里不应该使用setLiteral来设置?indx的值,因为在RDF中,文本不能是三元组的主题。对于这种情况,您应该使用setIri。有关完整列表,请参见文档。

请参见您需要在查询中使用变量。例如,
insert data{?indx:locatedIn?placx…}
。我遵循给定类的方法,得到的输出为:'PREFIX:insert data{:locatedIn;:onDate“2015-02-01”;:measures 13.}。您仍然需要通过完整的IRIs。前缀只是用来缩写东西,但你仍然需要传递完整的东西。我在主要问题中提供了所有更新细节,作为更新#1
insert data { ?indx :locatedIn ?placx ... }