在SPARQL查询中加入语义端点

时间:2011-01-30 07:45:43

标签: 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 .
}

此类请求既不适用于Bibleontology SPARQL端点,也不适用于dbpedia SPARQL端点。请求的各个部分在每个SPARQL端点上都能正常工作。

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

3 个答案:

答案 0 :(得分:10)

我是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 . } }

答案 1 :(得分:6)

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

The Semantic Web Client Library将跟踪您在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" )
} 

更改说明:

  1. 包含owldbpedia名称空间
  2. ?art dbpedia:abstract ?abstract .您需要匹配dbpedia:abstract谓词才能获得摘要而不是bibleontology:abstract才能从dbpedia获取摘要
  3. 我还包含filter只能检索英文摘要,这当然是可选的。
  4. 下载“语义Web库”并将查询放入文件(即:query.sparql)后,可以运行以下命令来测试查询:

    ./semwebquery -sparqlfile query.sparql -retrieveduris -maxsteps 5
    

    所有命令参数都在语义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
    

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

答案 2 :(得分: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 . }
}

您将上述查询提交给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 . }
}

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