繁体   English   中英

从DBPedia解析数据时,OpenRdf异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM