嵌套 select 上的 Sparql 语法错误

Sparql syntax error on nested select

我正在尝试 select 人口最多的城市。我的查询如下所示:

PREFIX dct: <http://purl.org/dc/terms/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX db: <http://dbpedia.org/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX dbc: <http://dbpedia.org/resource/Category:>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?population ?capital
WHERE {

    ?x dct:subject dbc:Countries_in_Europe .
    ?x   dbo:capital ?capital .
    ?capital dbo:populationTotal ?population .

     FILTER (?population =
        (
          SELECT MAX(?popul) AS ?pop
          WHERE{
              ?capital dbo:populationTotal ?popul .
          }
        )
  )

}
LIMIT 200

我已关注 This PDF 第 5 页。 我正在使用 apache-jena-fuseki-2.4.0 并收到语法错误 Encountered " "select" "SELECT "" at line 18, column 1. 知道问题出在哪里吗?

我不知道您在哪里看到可以将 SELECT 查询的结果绑定到 FILTER 中的变量,但这是完全错误的。这可能适用于 SQL 但不适用于 SPARQL。

PREFIX  dbo:  <http://dbpedia.org/ontology/>
PREFIX  dbp:  <http://dbpedia.org/property/>
PREFIX  dct:  <http://purl.org/dc/terms/>
PREFIX  dbc:  <http://dbpedia.org/resource/Category:>
PREFIX  dbpedia: <http://dbpedia.org/resource/>
PREFIX  db:   <http://dbpedia.org/>

SELECT  ?population ?capital
WHERE
  { ?x        dct:subject          dbc:Countries_in_Europe ;
              dbo:capital          ?capital .
    ?capital  dbo:populationTotal  ?population
    FILTER ( ?population = ?pop )

    # sub-SELECTs are evaluated first and encapsulated by { }
    # in addition (as to TomP's comment), you have to restrict to European captials here
    { SELECT  (MAX(?popul) AS ?pop)
      WHERE
        { ?x        dct:subject          dbc:Countries_in_Europe ;
                    dbo:capital          ?capital .
          ?capital  dbo:populationTotal  ?popul }
    }
  }
LIMIT   200

但是,如果您真的想要 "capital in Europe with the highest population",为什么不使用更简单、更明显的方式来反映您的任务,即 ORDER BY + LIMIT 1:

PREFIX  dbo:  <http://dbpedia.org/ontology/>
PREFIX  dbp:  <http://dbpedia.org/property/>
PREFIX  dct:  <http://purl.org/dc/terms/>
PREFIX  dbc:  <http://dbpedia.org/resource/Category:>
PREFIX  dbpedia: <http://dbpedia.org/resource/>
PREFIX  db:   <http://dbpedia.org/>

SELECT  ?population ?capital
WHERE
  { ?x        dct:subject          dbc:Countries_in_Europe ;
              dbo:capital          ?capital .
    ?capital  dbo:populationTotal  ?population    
  }
ORDER BY DESC(?population)
LIMIT   1