在不单独处理的情况下在另一个查询中使用有序查询结果?

Use ordered query results in another query without separate processing?

如何通过行号访问新查询的排序结果列表中的谓词 + 对象对?

来自维基数据的示例查询:

SELECT ?p ?o (COUNT (?o) as ?oCount) WHERE{
  ?s ?p ?o.                 #return every predicate + object...
  ?s wdt:P31 wd:Q5.         #...for humans
  ?s wdt:P19 wd:Q37100.     #...born in Auckland (NZL)
  ?s wdt:P21 wd:Q6581097.   #...which are male
}
GROUP BY ?p ?o ?oCount
ORDER BY DESC(?oCount)      #order by most common predicate/object combination

Link to this query.

这些是最初的一些结果(为更清晰起见进行了编辑):

p                           o                                 oCount
--------------------------------------------------------------------
wdt:P19 (place of birth)    wd:Q37100 (Auckland)              1083
wdt:P21 (gender)            wd:Q6581097 (male)                1083
wdt:P31 (instance of)       wd:Q5 (human)                     1083
wdt:P27 (country)           wd:Q664 (New Zealand)             844
(...)
wdt:P106 (occupation)       wd:Q14373094 (rugby player)       202
(...)
wdt:P69 (educated at)       wd:Q492467 (Univ. of Auckland)    62

现在我想做以下查询:
Return 本结果列表第 n 个谓词 + 宾语的所有主语。

我的实际用例是将这些结果的多行与 'AND' 或 'OR' 组合在一起,例如return 给出此结果的前 5 个谓词+宾语的所有主题。

了解如何从结果中访问某些行将是一个好的开始。如果可能,我不想通过读取结果(使用脚本)并使用它们作为第二个查询的输入来使用单独的查询。

Knowing how to access certain rows from the results would be a good start. I don't want to use a separate query by reading the results (with a script) and using them as input for a second query, if possible.

这真的不可能。您可以在子查询中使用 order by,但结果在外部查询中无法作为有序结果列表使用;它们只是提供给外部查询。但是,如果您真的只想要 nth 结果,您还可以使用 limitoffset,这可能就足够了。例如,您将执行类似以下操作(为了示例而故意简化,并包括示例数据以确保完整性):

@prefix : <urn:ex:>

:p :hasRank 1 .
:q :hasRank 2 .
:r :hasRank 3 .
:s :hasRank 4 .
:t :hasRank 5 .
:u :hasRank 6 .
:v :hasRank 7 .
:x :hasRank 8 .

:a :s :s0, :s1, :s2 ;
   :t :t0, :t1 ;
   :u :u0, :u1, :u2, :u3 .
prefix : <urn:ex:>

select ?s ?p ?o {
  #-- find the fifth ?p by rank
  { select ?p {
      ?p :hasRank ?rank
    }
    order by ?rank
    limit 1
    offset 4
  }

  #-- get triples using ?p
  ?s ?p ?o .
}
-----------------
| s  | p  | o   |
=================
| :a | :t | :t1 |
| :a | :t | :t0 |
-----------------