【发布时间】:2015-07-19 00:53:08
【问题描述】:
我一直在使用这篇文章来获取单个 RDF 节点的父节点或血统:SPARQL query to get all parent of a node
这在我的 virtuoso 服务器上运行良好。抱歉,找不到包含具有类似结构的数据的公共端点。
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix bto: <http://purl.obolibrary.org/obo/>
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 关键字或组子句是瓶颈,因为这只需要一两秒钟:
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix bto: <http://purl.obolibrary.org/obo/>
select ?s ?midlab
where
{
?s rdfs:subClassOf* ?mid .
?mid rdfs:subClassOf* ?class .
?mid rdfs:label ?midlab .
?s <http://www.geneontology.org/formats/oboInOwl#hasOBONamespace> "BrendaTissueOBO"^^<http://www.w3.org/2001/XMLSchema#string> .
}
【问题讨论】: