作为last question的后续内容,我想提供一些建议。
那里提出的解决方案需要1.1端点,这不是我所拥有的。另外,除了值分组之外,我完全不确定我对计数聚合的处理是否是最佳的。
我想要检索的信息是,对于列表的每个ID:
如下所示,我的解决方案在联合的每个部分使用了联合和过滤器。为了处理孩子和孩子的数量,我有两个单独的子请求。所有这些对我来说都是非常不利的,我想知道它是否真的如何进行。
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX umls: <http://linkedlifedata.com/resource/umls/id/>
SELECT ?id ?childrenCount ?synonym ?child
WHERE
{
{
?id skos:altLabel ?synonym .
FILTER ( langMatches( lang ( ?synonym ) , "EN" ) )
FILTER ( ?id IN (
umls:C0013227,
umls:C0013227,
...
) )
}
UNION
{
SELECT ?id ( COUNT ( ?childID ) AS ?childrenCount )
WHERE
{
?id skos:narrowerTransitive ?childID .
FILTER ( ?id IN (
umls:C3244316,
umls:C0344315,
...
) )
}
GROUP BY ?id
}
UNION
{
SELECT ?id ?child
WHERE
{
?id skos:narrowerTransitive ?childID .
?childID skos:prefLabel ?child .
FILTER ( langMatches ( lang ( ?child ) , "EN" ) )
FILTER ( ?id IN (
umls:C3244316,
umls:C0344315,
...
) )
}
LIMIT 40
}
}
ORDER BY DESC ( ?id ) DESC ( ?childrenCount ) DESC ( ?synonym )
顺便说一句,我已经重复了三次FILTER,因为它似乎在子请求中被优化了,但在全局级别没有。