使用 SPARQL 查询 ontology 中的数据类型数据时间插入
Datatype dataTime insertion in ontology with SPARQL queries
我正在尝试使用以下 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 允许执行查询。
Ontology 使用的是 link。
如果您打印创建的查询字符串,您应该很快就能看到它是无效的,即
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 就不会将它们解释为字符串的 start/end。
我还添加了 \n
,即换行符到您的字符串中,因为这将帮助解析器为您提供更有意义的错误消息,以及比您通过现有查询获得的 line 1, column 96
更精确的错误位置.
一般来说,如果您需要将常量注入到 query/update 中,您最好使用 Jena 中的 Parameterized SPARQL String 支持,因为您当前的方法是,它更不容易出错并且不易受到 SPARQL 注入的影响.
我正在尝试使用以下 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 允许执行查询。 Ontology 使用的是 link。
如果您打印创建的查询字符串,您应该很快就能看到它是无效的,即
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 就不会将它们解释为字符串的 start/end。
我还添加了 \n
,即换行符到您的字符串中,因为这将帮助解析器为您提供更有意义的错误消息,以及比您通过现有查询获得的 line 1, column 96
更精确的错误位置.
一般来说,如果您需要将常量注入到 query/update 中,您最好使用 Jena 中的 Parameterized SPARQL String 支持,因为您当前的方法是,它更不容易出错并且不易受到 SPARQL 注入的影响.