【问题标题】:SERVICE against Virtuoso DBPedia Gives "Virtuoso S0022 Error SQ200 : No Column"针对 Virtuoso DBPedia 的服务给出“Virtuoso S0022 错误 SQ200:无列”
【发布时间】:2020-05-11 08:02:49
【问题描述】:

我在本地 GraphDB 三元存储中运行 SPARQL 查询,该查询包含转到 DBPedia Virtuoso 的 SERVICE 子句。 该查询基本上直接从 DBPedia 获取一些 DBPedia URI 的标签(请注意,首先执行子查询以获取本地结果,然后将这些结果传递给 SERVICE 子句):

SELECT DISTINCT ?uri (STR(?theLabel) AS ?label)
WHERE {
 {
  SELECT DISTINCT ?uri 
  WHERE {
    ?domain a <http://xmlns.com/foaf/0.1/Person> .
    ?domain <http://virtual-assembly.org/pair#hasKeyword> ?uri .
  }
  }

  SERVICE <http://dbpedia.org/sparql> {
    ?uri <http://www.w3.org/2000/01/rdf-schema#label> ?theLabel .
    FILTER(lang(?theLabel) = 'fr')
  }

}
ORDER BY ?label

在评估服务条款时,我从 Virtuoso 收到以下错误 Virtuoso S0022 Error SQ200

Query evaluation error: org.eclipse.rdf4j.query.QueryEvaluationException: Virtuoso S0022 Error SQ200: No column uri.

SPARQL query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX sesame: <http://www.openrdf.org/schema/sesame#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#> 

SELECT  ?theLabel ?__rowIdx WHERE {
 ?uri <http://www.w3.org/2000/01/rdf-schema#label> ?theLabel .
 FILTER(lang(?theLabel) = 'fr')
} 
VALUES (?__rowIdx ?uri) {  ("0" <http://dbpedia.org/resource/Semantic_Web> ) ("1" <http://dbpedia.org/resource/Peer-to-peer> ) ("2" <http://dbpedia.org/resource/Collaboration> ) ("3" <http://dbpedia.org/resource/Free_software> ) ("4" <http://dbpedia.org/resource/Social_transformation> ) ("5" <http://dbpedia.org/resource/Social_network> ) ("6" <http://dbpedia.org/resource/Ecology> ) ("7" <http://dbpedia.org/resource/Activism> ) ("8" <http://dbpedia.org/resource/Supernatural> ) ("9" <http://dbpedia.org/resource/Sociology> ) ("10" <http://dbpedia.org/resource/Natural_science> ) ("11" <http://dbpedia.org/resource/Popular_science> ) ("12" <http://dbpedia.org/resource/Cooperation> ) ("13" <http://dbpedia.org/resource/Wikimedia_Commons> ) ("14" <http://dbpedia.org/resource/Musician> ) } 

(HTTP status 500)

发送给 Virtuoso 的 SPARQL 查询在我看来是有效的。

当然,我不知道 GraphDB 如何生成查询,但是有什么方法可以重写原始查询来解决这个问题?

谢谢

【问题讨论】:

  • 看起来像 Virtuoso 中的一个错误,其中 GraphDB 生成的查询您可以在错误消息中看到。如果 GraphDB 将 VALUES 子句放在查询中,它可以工作:
  • SELECT ?theLabel ?__rowIdx WHERE { VALUES (?__rowIdx ?uri) { ("0" &lt;http://dbpedia.org/resource/Semantic_Web&gt; ) ("1" &lt;http://dbpedia.org/resource/Peer-to-peer&gt; ) ("2" &lt;http://dbpedia.org/resource/Collaboration&gt; ) ("3" &lt;http://dbpedia.org/resource/Free_software&gt; ) ("4" &lt;http://dbpedia.org/resource/Social_transformation&gt; ) ("5" &lt;http://dbpedia.org/resource/Social_network&gt; ) ("6" &lt;http://dbpedia.org/resource/Ecology&gt; ) } ?uri &lt;http://www.w3.org/2000/01/rdf-schema#label&gt; ?theLabel . FILTER(lang(?theLabel) = 'fr') }

标签: sparql dbpedia virtuoso graphdb federated-queries


【解决方案1】:

好的,我在这里得到纠正,因为 WHERE 子句后面的 VALUES 子句确实是有效的 SPARQL。例如:

PREFIX dc:   <http://purl.org/dc/elements/1.1/> 
PREFIX :     <http://example.org/book/> 
PREFIX ns:   <http://example.org/ns#> 

SELECT ?book ?title ?price
{
   ?book dc:title ?title ;
         ns:price ?price .
}
VALUES (?book ?title)
{ (UNDEF "SPARQL Tutorial")
  (:book2 UNDEF)
}

Live Query Results Example.

以下返回一个空结果集,表示解决方案不正确,即错误:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX sesame: <http://www.openrdf.org/schema/sesame#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#> 

SELECT  ?theLabel ?rowIdx 
WHERE {
        ?uri <http://www.w3.org/2000/01/rdf-schema#label> ?theLabel .
        FILTER (?uri = <http://dbpedia.org/resource/Semantic_Web>) 
        FILTER (lang(?theLabel) = "en")
      }
VALUES (?rowIdx ?uri) 
      {  ("0" <http://dbpedia.org/resource/Semantic_Web> ) 
         ("1" <http://dbpedia.org/resource/Peer-to-peer> ) 
         ("2" <http://dbpedia.org/resource/Collaboration> ) 
         ("3" <http://dbpedia.org/resource/Free_software> ) 
         ("4" <http://dbpedia.org/resource/Social_transformation> ) 
         ("5" <http://dbpedia.org/resource/Social_network> ) 
         ("6" <http://dbpedia.org/resource/Ecology> ) 
         ("7" <http://dbpedia.org/resource/Activism> ) 
         ("8" <http://dbpedia.org/resource/Supernatural> ) 
         ("9" <http://dbpedia.org/resource/Sociology> ) 
         ("10" <http://dbpedia.org/resource/Natural_science> ) 
         ("11" <http://dbpedia.org/resource/Popular_science> ) 
         ("12" <http://dbpedia.org/resource/Cooperation> ) 
         ("13" <http://dbpedia.org/resource/Wikimedia_Commons> ) 
         ("14" <http://dbpedia.org/resource/Musician> ) 
      } 

Live Query Results Link.

【讨论】:

【解决方案2】:

以下作品揭示了初始示例的结构问题。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX sesame: <http://www.openrdf.org/schema/sesame#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#> 

SELECT  ?theLabel ?__rowIdx
WHERE {
       ?uri <http://www.w3.org/2000/01/rdf-schema#label> ?theLabel .
       FILTER(lang(?theLabel) = 'fr')

       VALUES (?__rowIdx ?uri) {  ("0" <http://dbpedia.org/resource/Semantic_Web> ) ("1" <http://dbpedia.org/resource/Peer-to-peer> ) ("2" <http://dbpedia.org/resource/Collaboration> ) ("3" <http://dbpedia.org/resource/Free_software> ) ("4" <http://dbpedia.org/resource/Social_transformation> ) ("5" <http://dbpedia.org/resource/Social_network> ) ("6" <http://dbpedia.org/resource/Ecology> ) ("7" <http://dbpedia.org/resource/Activism> ) ("8" <http://dbpedia.org/resource/Supernatural> ) ("9" <http://dbpedia.org/resource/Sociology> ) ("10" <http://dbpedia.org/resource/Natural_science> ) ("11" <http://dbpedia.org/resource/Popular_science> ) ("12" <http://dbpedia.org/resource/Cooperation> ) ("13" <http://dbpedia.org/resource/Wikimedia_Commons> ) ("14" <http://dbpedia.org/resource/Musician> ) } 

}

Live Query Results page from DBpedia

【讨论】:

  • 错误推断:不是因为这个查询有效,所以最初的例子有结构问题。初始示例是一个有效的 SPARQL 查询,请参阅 w3.org/TR/sparql11-query/#sparqlGrammar 的 SPARQL 语法,规则 2:Query ::= Prologue ( SelectQuery | ConstructQuery | DescribeQuery | AskQuery ) ValuesClause
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多