我一直用這個帖子得到一個RDF節點的父母或譜系,所有節點的所有家長:SPARQL query to get all parent of a nodeSPARQL
這很好地工作我演奏家服務器上。對不起,找不到包含具有類似結構的數據的公共端點。
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經驗的人可能不會對查詢超時感到驚訝。
這是一個合理的方法嗎?我在語法上做錯了什麼?
我懷疑是不同的關鍵詞或group子句是瓶頸,因爲這樣只需要一兩秒鐘:
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> .
}
這看起來很有希望。我添加了from子句,並將順序改爲「(count(?mid)as?midcount)」,並得到了合理的結果。 –
@MarkMiller'order by(... as ...)'**不合法**。 Virtuoso可能會接受它(它接受一些非標準的語法),但它不是合法的SPARQL。如果您需要針對另一個端點運行您的查詢,那很可能**不起作用**。你可以選擇(count(?mid)爲?midcount){...} order by?midcount',你可以通過count(?mid)選擇... {...} order,但是你可以't'select ... {...} order by(count(?mid)as?midcount)''。變量綁定形式'(... as ...)'在......按順序不合法。 (然而,它*在* group by中是合法的。) –
我真的很感激你的反饋,並且對於不仔細研究而感到抱歉。我也使用耶拿和MarkLogic評估,所以最佳實踐對我很重要。 「按數量排序(?中間)「raise」Virtuoso 37000錯誤SP030:SPARQL編譯器,第12行:語法錯誤'('before'?mid'「只要將它括在沒有AS的圓括號中就行,並通過驗證程序 –