使用 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
}
}
我想在 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
}
}