使用 Fuseki(MAKG 数据集)查询在 SPARQL 中不起作用的字符串

Query on string not working in SPARQL with Fuseki (MAKG dataset)

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

在此之前,我想针对 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, it's working well (result)。 但是,如果我在 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

总的来说,我想按特定字符串查询时好像不行

你有什么提示吗?

提前致谢。

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
  }
}