СЛУЖБА против Virtuoso DBPedia выдает ошибку Virtuoso S0022 SQ200: нет столбца

Я запускаю запрос SPARQL в локальном хранилище троек GraphDB, который содержит предложение SERVICE, которое переходит в DBPedia Virtuoso. Запрос в основном извлекает метки некоторых URI DBPedia непосредственно из DBPedia (обратите внимание на подзапрос, выполняемый первым для получения локальных результатов, перед передачей этих результатов в предложение 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)

На мой взгляд, SPARQL-запрос, отправленный Virtuoso, действителен.

Конечно, я не знаю, как GraphDB генерирует запрос, но есть ли способ переписать исходный запрос, чтобы обойти это?

Спасибо


person ThomasFrancart    schedule 11.05.2020    source источник
comment
Хорошо, только что отправили отчет об ошибке на github.com/openlink/virtuoso-opensource/issues/ 921   -  person UninformedUser    schedule 11.05.2020


Ответы (2)


Хорошо, я исправлюсь здесь, поскольку СТАТЬЯ VALUES, следующая за WHERE CLAUSE, действительно является допустимым 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)
}

nofollow / а>.

Следующее возвращает пустой набор результатов, указывающий на неправильное решение, то есть на ошибку:

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> ) 
      } 

Следующие работы показывают структурную проблему с исходным примером.

person Kingsley Uyi Idehen    schedule 22.06.2020

Страница результатов оперативного запроса от DBpedia.

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> ) } 

}

похоже на ошибку в Virtuoso с запросом, сгенерированным GraphDB, который вы можете увидеть в сообщении об ошибке. Если GraphDB поместит предложение VALUES внутрь запроса, он будет работать:

person Kingsley Uyi Idehen    schedule 16.06.2020