在ISQL中使用时,某些SPARQL命令不起作用

时间:2014-09-03 22:39:08

标签: sparql virtuoso

我已经安装了本地的virtuoso服务器并将dbpedia数据导入其中。我发现了一系列在isql中不起作用的SPARQL命令。例如,我在我的isql shell中运行了这个查询。

SPARQL SELECT ?s  GROUP_CONCAT (?obj, ' ') as ?artist_list WHERE { ?s a dbpedia-owl:Single ;(dbpedia-owl:artist|dbpedia-owl:producer)  ?obj    } limit 10

首先抱怨|在(dbpedia-owl:artist | dbpedia-owl:producer)中,然后是GROUP_CONCAT。 我做了一些关于Virtuoso文档的研究并做了以下的

EDIT1 我试图检查不同的情况,

1- group_concat

SPARQL select ?s (group_concat(?obj; separator='|') as ?artist_list) FROM <http://ja.dbpedia.org>  where {   ?s a dbpedia-owl:Single ;      (dbpedia-owl:artist) ?obj } group by ?s limit 10;

SQL>  syntax error at 'group_concat' before '('

2-使用值

SPARQL select ?s  FROM <http://ja.dbpedia.org>  where {  values ?sType {dbpedia-owl:Song dbpedia-owl:Single }. ?s a ?sType} limit 10;


*** Error 37000: [Virtuoso Driver][Virtuoso Server]SQ074: Line 1: SP030: SPARQL compiler, line 1: syntax error at 'values' before '?sType'

3-使用|

   SPARQL select *  FROM <http://ja.dbpedia.org>  where { ?s (dbpedia-owl:artist|dbpedia-owl:producer) ?o } limit 10
    *** Error 37000: [Virtuoso Driver][Virtuoso Server]SQ074: Line 1: SP030: SPARQL compiler, line 0: Invalid character in SPARQL expression at '|'

我做错了什么?以上所有SPARQL查询均可在Standard SPARQL endpoints

中使用

1 个答案:

答案 0 :(得分:6)

我不认为Virtuoso支持所有SPARQL 1.1,但您的查询也不合法SPARQL。 (Virtuoso 接受一些不太SPARQL的东西,但你的查询属于SPARQL范围。)我建议你看一下sparql.org's query validator。您至少会发现以下问题:

  • 您没有定义dbpedia-owl:前缀。 (你可能在端点中有这个,所以它可能不是问题。)
  • 需要(group_concat(…) as …)括号。 (虽然这个案例并不重要,所以GROUP_CONCAT很好。我认为Virtuoso会接受它而不用parens,但这并不能使它成为合法的SPARQL。)
  • group_concat中,您需要使用分号并写分隔符。
  • 如果您正在使用group_concat之类的聚合,那么您可以按某些变量进行分组,而无法选择您未进行分组的变量。这意味着您需要group by ?s

一旦你解决了这些问题,你最终会得到类似的东西:

prefix dbpedia-owl: <http://dbpedia.org/ontology/>

select ?s (group_concat(?obj; separator=' ') as ?artist_list)
where {
  ?s a dbpedia-owl:Single ;
     (dbpedia-owl:artist|dbpedia-owl:producer) ?obj
}
group by ?s
limit 10

这是合法的SPARQL 1.1。如果Virtuoso仍然抱怨这一点,你可以使用values块而不是属性路径,因此具有以下内容,这是等效的:

prefix dbpedia-owl: <http://dbpedia.org/ontology/>

select ?s (group_concat(?obj; separator=' ') as ?artist_list)
where {
  values ?p { dbpedia-owl:artist dbpedia-owl:producer }
  ?s a dbpedia-owl:Single ;
     ?p ?obj
}
group by ?s
limit 10

如果您仍然收到关于values的投诉(但DBpedia的终端支持values,以及它的Virtuoso;您安装的版本多大了?),您可以使用union

prefix dbpedia-owl: <http://dbpedia.org/ontology/>

select ?s (group_concat(?obj; separator=' ') as ?artist_list)
where {
  ?s a dbpedia-owl:Single .
  { ?s dbpedia-owl:artist   ?obj } UNION
  { ?s dbpedia-owl:producer ?obj }
}
group by ?s
limit 10

如果您需要某些SPARQL 1.1支持,则至少需要使用Virtuoso 7.0.0。发行说明包括:

  

2013-08-05 -- Virtuoso Open-Source Edition 7.0.0 Released

     
      
  • 添加了对SPARQL 1.1 BIND和VALUES子句的支持
  •   
  • 添加了对SPARQL 1.1函数和聚合的支持
  •   
  • 在SPARQL 1.1图形协议
  • 中添加了对?graph参数的支持   
  • 修复了传递性,推理和SPARQL 1.1属性路径的问题
  •