You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SPARQL查询Turtle文件:如何保留无同义词的类三元组

解决SPARQL查询过滤无同义词类的问题

你的查询只返回有同义词的类,核心原因是?cid oboInOwl:hasExactSynonym ?synonyms是必选匹配模式——只有存在该属性的三元组,对应记录才会被纳入结果。要包含无同义词的类,需将该三元组改为可选匹配,同时处理多同义词的合并显示,以下是修改后的查询:

prefix oboInOwl: <http://www.geneontology.org/formats/oboInOwl#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?cid (STRAFTER(STR(?cid), "/") AS ?cid_short) ?label (STRAFTER(STR(?class), "/") AS ?class_short) (GROUP_CONCAT(?synonym; SEPARATOR = " , ") AS ?synonyms)
WHERE {
    ?cid rdfs:label ?label .
    ?cid rdfs:subClassOf ?class .
    # 将同义词三元组设为可选,无同义词的类仍会被保留
    OPTIONAL { ?cid oboInOwl:hasExactSynonym ?synonym . }
}
# 按类、标签、父类分组,确保每个类只显示一行
GROUP BY ?cid ?label ?class

关键修改说明:

  1. OPTIONAL关键字:包裹同义词的三元组后,即使类没有hasExactSynonym属性,也会被查询返回,此时?synonym的值为空。
  2. GROUP_CONCAT函数:将同一个类的多个同义词合并为逗号分隔的字符串,避免每个同义词生成单独一行。
  3. STRAFTER函数:从完整IRI中提取短ID(如https://ontology/1001提取为1001),匹配你预期输出的格式。

运行结果:

cid_shortlabelclass_shortsynonyms
1001Nervous system injury748Injury, neuronal , Neurotrauma
10021C3 glomerulopathy2034

内容的提问来源于stack exchange,提问作者rshar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:40:38