[英]OpenRdf Exception when parsing data from DBPedia
我将OpenRdf与Sparql一起使用以从DBPedia收集数据,但是在针对DBPedia Sparql端点运行的以下查询中遇到一些错误:
CONSTRUCT{
?battle ?relation ?data .
}
WHERE{
?battle rdf:type yago:Battle100953559 ;
?relation ?data .
FILTER(?relation != owl:sameAs)
}
LIMIT 1
OFFSET 18177
我修改了LIMIT和OFFSET以指出引发问题的特定结果。
响应是这样的:
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix ns1: <http://en.wikipedia.org/wiki/> .
<http://dbpedia.org/resource/Mongol%E2%80%93Jin_Dynasty_War> foaf:isPrimaryTopicOf ns1:Mongol–Jin_Dynasty_War .
问题是ns1:Mongol–Jin_Dynasty_War实体包含减号,因此在使用OpenRdf的Java应用程序中运行此查询时,出现以下异常:
org.openrdf.query.QueryEvaluationException:org.openrdf.rio.RDFParseException:预期为“。”,找到为“ –” [第3行]
有什么办法可以解决这个问题?
谢谢 !
为了帮助可能遇到相同问题的其他用户,我将在此处发布使用OpenRDF v2.7.x为图形查询设置首选输出格式的方法。
您需要创建SPARQLRepository的子类来访问HTTPClient(由于某些原因,该字段为protected
。
public class NtripleSPARQLRepository extends SPARQLRepository {
public NtripleSPARQLRepository(String endpointUrl) {
super(endpointUrl);
this.getHTTPClient().setPreferredRDFFormat(RDFFormat.NTRIPLES);
}
}
您只需要创建此类的新实例:
NtripleSPARQLRepository repository = new NtripleSPARQLRepository(service);
RepositoryConnection connection = new SPARQLConnection(repository);
Query query = connection.prepareQuery(QueryLanguage.SPARQL, "YOUR_QUERY");
如果要查询Virtuoso服务器,则在Virtuoso的实现中可能会遇到草率的情况。 我在获取XML结果(输出中的垂直选项卡,但仅XML 1.0)以及最新的JSON结果(\\ U转义表示“基本多语言平面”中的字符)时看到了这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.