【问题标题】:OpenRdf Exception when parsing data from DBPedia从 DBPedia 解析数据时出现 OpenRdf 异常
【发布时间】:2015-03-12 13:24:13
【问题描述】:

我使用 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: Expected '.', found '-' [line 3]

有什么办法可以规避这个问题吗?

谢谢!

【问题讨论】:

  • 这不是减号,而是破折号 (U+2013) 在该位置是非法字符,因此这似乎是 DBPedia Turtle 编写器中的错误。您最好的选择可能是要求以不同格式(例如 NTriples)输出。我不熟悉 OpenRDF API,所以我不确定您有哪些选择。
  • @Alex 感谢您的提示,我能够将输出设置为 NTriples,这完全解决了问题。

标签: java rdf sparql dbpedia sesame


【解决方案1】:

为了帮助可能遇到相同问题的其他用户,我将在此处发布使用 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");

【讨论】:

  • 不错的解决方法。 FWIW 这个方法没有被公开暴露只是我们的疏忽:你可能会注意到在替代的 HTTPRepository 类中,它公开可用的。我在 Sesame 的问题跟踪器中记录了一张改进票来解决这个问题:openrdf.atlassian.net/browse/SES-2193
【解决方案2】:

如果您正在查询 Virtuoso 服务器,那么您可能会在 Virtuoso 的实现中遇到马虎。我在获取 XML 结果(输出中的垂直选项卡,但只有 XML 1.0)和最近在 JSON 结果中(\U 转义不在基本多语言平面中的字符)时看到了这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-20
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    相关资源
    最近更新 更多