在SPARQL查询中加入语义端点

ℝap*_*ink 5 database semantic-web sparql

我正在尝试使用bibleontology和dbpedia语义数据库的请求:

PREFIX bibleontology: <http://bibleontology.com/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?art ?abstract WHERE { 
bibleontology:Ezra owl:sameAs ?art .
?art dbo:abstract ?abstract .
}
Run Code Online (Sandbox Code Playgroud)

这种请求既不适用于bibleontology SPARQL端点,也不适用于dbpedia SPARQL端点.请求的各个部分在每个SPARQL端点上都能正常工作.

是否可以通过这种方式加入数据库?

小智 11

我是bibleontology.com的工程师

bibleontology.com采用SPARQL1.1

PREFIX bibleontology: <http://bibleontology.com/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT ?art ?abstract
WHERE {
SERVICE <http://bibleontology.com/sparql/> { bibleontology:Ezra owl:sameAs ?art . }
SERVICE <http://dbpedia.org/sparql> { ?art dbo:abstract ?abstract . } }
Run Code Online (Sandbox Code Playgroud)


Man*_*res 6

该查询对dbpedia或bibleontology都不起作用,因为信息存储在两个不同的数据库中,当您运行SPARQL查询时,您基本上只会遇到其中一个.这意味着您必须从两个数据库下载数据以将它们放在本地三元组存储中,以便能够像您显示的那样运行SPARQL查询.另一个选择是使用一个为您执行此操作的库.

语义Web客户端库将遵循SPARQL查询中的所有URI,并从每个资源下载RDF数据,以便它可以加入查询中出现的所有三元模式并给出答案.

您可以通过一些小的更改来运行查询:

PREFIX bibleontology: <http://bibleontology.com/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX dbpedia: <http://dbpedia.org/ontology/> 

SELECT * WHERE { 
bibleontology:Ezra owl:sameAs ?art .
?art dbpedia:abstract ?abstract .
FILTER langMatches( lang(?abstract), "EN" )
} 
Run Code Online (Sandbox Code Playgroud)

变更说明:

  1. 包含owldbpedia命名空间
  2. ?art dbpedia:abstract ?abstract .你需要匹配dbpedia:abstract谓词来获取抽象而不是bibleontology:abstract为了从中获取抽象dbpedia
  3. 我还包括一个filter只能用英语检索摘要,这当然是可选的.

下载"语义Web库"并将查询放入文件(即:query.sparql)后,可以运行以下命令来测试查询:

./semwebquery -sparqlfile query.sparql -retrieveduris -maxsteps 5
Run Code Online (Sandbox Code Playgroud)

所有命令参数都在语义Web客户端库文档中进行了解释.

您将获得以下输出:

| ?art                               | ?abstract
| <http://dbpedia.org/resource/Ezra> | "Ezra is a major .... "@en |

Successfully dereferenced URIs: 

http://www.w3.org/2002/07/owl
http://bibleontology.com/data/Ezra
http://dbpedia.org/data/Ezra.xml
http://dbpedia.org/data3/abstract.n3
Run Code Online (Sandbox Code Playgroud)

为简单起见,我省略了dbpedia的长摘要."成功解除引用的URI"列表是库检索的文档,用于回答您的查询.在库的文档中,您将看到如何以Java编程方式运行查询.


Rob*_*obV 6

所有其他答案都是正确的,因为您不能按原样进行查询,因为数据未在单个SPARQL端点中组合.如果其中一个端点支持SPARQL 1.1联合查询,那么您可以使用如下SERVICE关键字:

PREFIX bibleontology: <http://bibleontology.com/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

SELECT ?art ?abstract
WHERE 
{ 
  bibleontology:Ezra owl:sameAs ?art .
  SERVICE <http://dbpedia.org/sparql?default-graph-uri=http://dbpedia.org> { ?art dbo:abstract ?abstract . }
}
Run Code Online (Sandbox Code Playgroud)

您将上述查询提交给bibleontology SPARQL端点,并提供它支持SERVICE将您的部分查询发送到DBPedia SPARQL端点的关键字.

即使您的SPARQL端点支持SERVICE关键字,您仍然依赖于两个数据集中的相关数据,即圣经本体需要owl:sameAs指向DBPedia资源,以便该SERVICE子句实际找到任何内容.

另外

如果您的两个端点都不支持该SERVICE关键字,那么您可以设置本地端点或使用支持该SERVICE关键字的命令行工具(如果您有兴趣,我会挖掘一些链接),然后发出以下命令:

PREFIX bibleontology: <http://bibleontology.com/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

SELECT ?art ?abstract
WHERE 
{ 
  SERVICE <http://bibleontology.com/sparql> { bibleontology:Ezra owl:sameAs ?art . }
  SERVICE <http://dbpedia.org/sparql?default-graph-uri=http://dbpedia.org> { ?art dbo:abstract ?abstract . }
}
Run Code Online (Sandbox Code Playgroud)

如果您的本地工具/端点支持,SERVICE那么它将能够将查询的相关部分发送到相关端点并在本地进行加入,并希望回馈您之后的结果