1

我想在 Apache Jena Fuseki 上使用 MAKG(Microsoft Academic Knowledge Graph)( https://makg.org/)和 DBPedia 数据集(使用关键字)进行 SPARQL 查询。SERVICE

在此之前,我想为 MAKG 测试一些更简单的查询,例如:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX magc: <https://makg.org/class/>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX fabio: <http://purl.org/spar/fabio/>
PREFIX prism: <http://prismstandard.org/namespaces/basic/2.0/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT distinct ?paperTitle ?paperPubDate
WHERE {
        ?paper rdf:type magc:Paper .
        ?paper prism:keyword "hydrogen"^^xsd:string .
        ?paper fabio:hasDiscipline ?field .
        ?paper dcterms:title ?paperTitle .
        ?paper prism:publicationDate ?paperPubDate .
}
LIMIT 100

它检索关键字等于 的论文"hydrogen"

使用 MAKG 端点https://makg.org/sparql,它运行良好(结果)。但是,如果我在 Apache Jena Fuseki 上测试相同的查询,它不会检索到任何行。

SELECT ?paperTitle ?paperPubDate WHERE {
  SERVICE <https://makg.org/sparql> {
    ?paper rdf:type magc:Paper .
    ?paper prism:keyword "hydrogen"^^xsd:string .
    ?paper fabio:hasDiscipline ?field .
    ?paper dcterms:title ?paperTitle .
    ?paper prism:publicationDate ?paperPubDate .
  }
}
LIMIT 100

一般来说,当我想通过特定字符串进行查询时,它似乎不起作用。

你有什么提示吗?

先感谢您。

4

1 回答 1

2

makg.org 服务器是 Virtuoso,它使用 RDF 1.0 处理数据,因此 "hydrogen"^^xsd:string != "hydrogen"。

Apache Jena Fuseki 使用 RDF 1.1,其中 "hydrogen"^^xsd:string 与 "hydrogen" 相同。

问题是发送的查询正在发送“hydrogen”,因为它使用 RDF 1.1 缩写将查询服务部分重构为字符串。

使用 Fuseki 的方法是使用过滤器。

?paper prism:keyword ?X . FILTER(str(?X) = "hydrogen")

严格str()来说不需要(SPARQL 将“=”定义为字符串值,而不是同项),但 makg.org 确实需要它。


此外,LIMIT 需要通过将其放在 SERVICE 中来访问 makg.org 服务器:

PREFIX ...

SELECT ?paperTitle ?paperPubDate WHERE {
  SERVICE <https://makg.org/sparql> {
    SELECT * {
      ?paper rdf:type magc:Paper .
      ?paper prism:keyword "hydrogen"^^xsd:string .
      ?paper fabio:hasDiscipline ?field .
      ?paper dcterms:title ?paperTitle .
      ?paper prism:publicationDate ?paperPubDate .
    } LIMIT 100
  }
}
于 2021-12-06T22:14:02.060 回答