我一直在使用这篇文章来获取单个 RDF 节点的父级或谱系:SPARQL 查询以获取节点的所有父节点
这在我的 virtuoso 服务器上很好用。抱歉,找不到包含具有类似结构的数据的公共端点。
prefix rdfs:
prefix bto:
select (group_concat(distinct ?midlab ; separator = "|") AS ?lineage)
where
{
bto:BTO_0000207 rdfs:subClassOf* ?mid .
?mid rdfs:subClassOf* ?class .
?mid rdfs:label ?midlab .
}
group by ?lineage
order by (count(?mid) as ?ordercount)
给
+---------------------------------------------------------+
| lineage |
+---------------------------------------------------------+
| bone|cartilage|connective tissue|tibia|tibial cartilage |
+---------------------------------------------------------+
然后我想知道我是否可以通过将选择更改为来获取所有节点的血统
select ?s (group_concat(distinct ?midlab ; separator = "|") AS ?lineage)
和 where 语句中的第一行
?s rdfs:subClassOf* ?mid .
那些拥有更多 SPARQL 经验的人可能不会对查询超时感到惊讶。
这是一种合理的方法吗?我在语法上做错了吗?
我怀疑 distinct 关键字或 group 子句是瓶颈,因为这只需要一两秒钟:
prefix rdfs:
prefix bto:
select ?s ?midlab
where
{
?s rdfs:subClassOf* ?mid .
?mid rdfs:subClassOf* ?class .
?mid rdfs:label ?midlab .
?s "BrendaTissueOBO"^^ .
}