Получить синонимы таксона без повторов - PullRequest
0 голосов
/ 08 ноября 2018

Я запрашиваю эту конечную точку для извлечения таксонов с их синонимами. Я хочу, чтобы конечным результатом был файл JSON, содержащий URI таксонов и их имена вместе с синонимами:

{ 
    TAXON_URI: [TAXON_NAME, TAXON_SYN1, .....], 
    ...
}

Я использовал запрос:

PREFIX ns0: <http://aims.fao.org/aos/agrontology#>
PREFIX skosxl: <http://www.w3.org/2008/05/skos-xl#>

SELECT ?taxon_name_uri ?taxon_name ?taxon_synonym
WHERE{
  # select only 'Taxonomic terms for plants' !!
  ?taxon_name_uri ns0:hasTermType "Taxonomic terms for plants".
  ?taxon_name_uri ns0:hasSynonym ?taxon_synonym_uri.
  ?taxon_name_uri skosxl:literalForm ?taxon_name.
  ?taxon_synonym_uri skosxl:literalForm ?taxon_synonym.
  FILTER (lang(?taxon_synonym) = 'en' || lang(?taxon_synonym) = 'fr')
}
ORDER BY ?taxon_name_uri
LIMIT 100

Результат кажется логичным, но это не совсем то, что я хотел, вот пример, иллюстрирующий мою проблему:

taxon_name_uri                  taxon_name              taxon_synonym
------------------------------------------------------------------------
agrovoc:/xl_en_1299492690497    "Plantago ovata"        "Plantago minima"
agrovoc:/xl_en_1299492690497    "Plantago ovata"        "Plantago gooddingii"
agrovoc:/xl_en_1299492690497    "Plantago ovata"        "Plantago brunnea"
agrovoc:/xl_en_1299492690497    "Plantago ovata"        "Plantago fastigiata"
agrovoc:/xl_en_1299492690497    "Plantago ovata"        "Plantago insularis"
agrovoc:/xl_en_1299492691630    "Plantago brunnea"      "Plantago ovata"
agrovoc:/xl_en_1299492691706    "Plantago fastigiata"   "Plantago ovata"
agrovoc:/xl_en_1299492691791    "Plantago gooddingii"   "Plantago ovata"
agrovoc:/xl_en_1299492691878    "Plantago insularis"    "Plantago ovata"
agrovoc:/xl_en_1299492691969    "Plantago minima"       "Plantago ovata"

Это JSON, который я получил на основании приведенного выше результата:

{
    "http://aims.fao.org/aos/agrovoc/xl_en_1299492690497": [
        "Plantago ovata",
        "Plantago minima",
        "Plantago gooddingii",
        "Plantago brunnea",
        "Plantago fastigiata",
        "Plantago insularis"
    ],
    "http://aims.fao.org/aos/agrovoc/xl_en_1299492691630": [
        "Plantago brunnea",
        "Plantago ovata"
    ],
    "http://aims.fao.org/aos/agrovoc/xl_en_1299492691706": [
        "Plantago fastigiata",
        "Plantago ovata"
    ],
    "http://aims.fao.org/aos/agrovoc/xl_en_1299492691791": [
        "Plantago gooddingii",
        "Plantago ovata"
    ],
    "http://aims.fao.org/aos/agrovoc/xl_en_1299492691878": [
        "Plantago insularis",
        "Plantago ovata"
    ],
    "http://aims.fao.org/aos/agrovoc/xl_en_1299492691969": [
        "Plantago minima",
        "Plantago ovata"
    ]
}

У меня здесь много дубликатов, и меня интересуют только первые 5 строк результата запроса SPARQL, где taxon_name равно Plantago ovata. Исходя из этой идеи, JSON будет выглядеть следующим образом:

{
    "http://aims.fao.org/aos/agrovoc/xl_en_1299492690497": [
        "Plantago ovata",
        "Plantago minima",
        "Plantago gooddingii",
        "Plantago brunnea",
        "Plantago fastigiata",
        "Plantago insularis"
    ]
}

Есть ли способ сделать это?

...