使用SPARQL查询在本体中插入数据类型dataTime

时间:2015-02-23 06:04:11

标签: java rdf sparql jena ontology

我手动尝试使用以下SPARQL命令在owl文件中插入数据:

qry = "PREFIX : <http://www.example.com/tempsensor#>" + 
       "INSERT DATA" +
           "{" + 
 ":ind1 :locatedIn :Delhi ;" + ":onDate "+ "2014-10-01T00:10:10"^^xsd:dateTime +" ;" + ":measures 13 ;" + " :hasUnit Celsius   ." + "}" ;
        UpdateAction.parseExecute(qry,ontmod);

在跑步时,我得到例外:

Encountered " <INTEGER> "10 "" at line 1, column 96. Was expecting one of:
"graph" ...
"}" ...
";" ...
"," ...
"." ...
at com.hp.hpl.jena.sparql.lang.ParserSPARQL11Update._parse(ParserSPARQL11Update.java:78)

我应该如何格式化日期时间,以便sparql允许执行查询。 使用的本体论是在link给出的。

1 个答案:

答案 0 :(得分:1)

如果您打印创建的查询字符串,您应该很快就能看到它是无效的,即

System.out.println(qry);

问题在于,您没有像SPARQL中的文字所需的那样在日期时间周围加上引号。

因此,您的更新需要看起来更像这样:

qry = "PREFIX : <http://www.example.com/tempsensor#>\n" + 
      "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n" +
      "INSERT DATA\n" +
      "{\n" + 
      ":ind1 :locatedIn :Delhi ;\n" + 
      ":onDate \"2014-10-01T00:10:10\"^^xsd:dateTime ;\n" + 
      ":measures 13 ;" + " :hasUnit Celsius .\n" + 
      "}" ;

请注意,需要使用\"来转义引号,以便Java不会将它们解释为字符串的开头/结尾。

我还在字符串中添加了\n即换行符,因为这有助于解析器为您提供更有意义的错误消息,其错误位置比您使用现有查询得到的line 1, column 96更准确。< / p>

通常,如果您需要将常量注入查询/更新中,最好使用Jena中的Parameterized SPARQL String支持,这种支持非常容易出错并且不像您当前的方法那样容易受到SPARQL注入攻击。