0

作为我最后一个问题的后续行动,我想要一些建议。

那里提出的解决方案需要一个 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 三次,因为它似乎在子请求中被优化了,而不是在全局级别。

4

0 回答 0