作为我最后一个问题的后续行动,我想要一些建议。
那里提出的解决方案需要一个 1.1 端点,这不是我可以使用的。另外,除了值分组之外,我根本不确定我对计数聚合的处理是否是最佳的。
对于列表的每个 ID,我要检索的信息是:
- 通过 altLabel 谓词的同义词
- 它的孩子通过更窄的传递谓词,除了如果 id 有超过 40 个孩子,在这种情况下,我不认为它是一个信息性概念,只想返回计数
如下所示,我的解决方案在联合的每个部分都使用了联合和过滤器。为了处理孩子和孩子的数量,我有两个单独的子请求。所有这一切对我来说似乎都很不对劲,我想知道这是否真的是如何进行的。
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 三次,因为它似乎在子请求中被优化了,而不是在全局级别。