从 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 实体包含一个减号,因此当 运行 这个查询在里面时,我得到以下异常Java 使用 OpenRdf 的应用程序:
org.openrdf.query.QueryEvaluationException: org.openrdf.rio.RDFParseException: Expected '.', found '–' [line 3]
有什么办法可以避免这个问题吗?
谢谢!
为了帮助可能遇到相同问题的其他用户,我将在此处post介绍使用 OpenRDF v2.7.x.[=14= 设置图形查询首选输出格式的方法。 ]
您需要创建 SPARQLRepository 的子class 才能访问 HTTPClient(由于某些原因,该字段为 protected
.
public class NtripleSPARQLRepository extends SPARQLRepository {
public NtripleSPARQLRepository(String endpointUrl) {
super(endpointUrl);
this.getHTTPClient().setPreferredRDFFormat(RDFFormat.NTRIPLES);
}
}
您只需要为此 class 创建一个新实例:
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 转义)时看到了这一点。
我将 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 实体包含一个减号,因此当 运行 这个查询在里面时,我得到以下异常Java 使用 OpenRdf 的应用程序:
org.openrdf.query.QueryEvaluationException: org.openrdf.rio.RDFParseException: Expected '.', found '–' [line 3]
有什么办法可以避免这个问题吗?
谢谢!
为了帮助可能遇到相同问题的其他用户,我将在此处post介绍使用 OpenRDF v2.7.x.[=14= 设置图形查询首选输出格式的方法。 ]
您需要创建 SPARQLRepository 的子class 才能访问 HTTPClient(由于某些原因,该字段为 protected
.
public class NtripleSPARQLRepository extends SPARQLRepository {
public NtripleSPARQLRepository(String endpointUrl) {
super(endpointUrl);
this.getHTTPClient().setPreferredRDFFormat(RDFFormat.NTRIPLES);
}
}
您只需要为此 class 创建一个新实例:
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 转义)时看到了这一点。