在另一个查询中使用有序查询结果而无需单独处理

时间:2017-02-28 14:41:18

标签: sparql rdf wikidata

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

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

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

现在我想做以下查询:
使用此结果列表的第n个谓词+对象返回所有主题。

我的实际用例是将这些结果的多行与' AND'或者'或者'返回给出前5个谓词+此结果对象的所有主题。

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

1 个答案:

答案 0 :(得分:3)

  

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

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

EditableModule
java.lang.RuntimeException: Unable to create application android.search786.apkia.com.MyApplication: io.realm.exceptions.RealmMigrationNeededException: The 'AL_QURAN_TBL' class is missing from the schema for this Realm.
@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 .