Я использую этот пост, чтобы родители или потомство одного узла 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)
и первая строка в заявлении, куда
?s rdfs:subClassOf* ?mid .
Те, у кого больше опыта SPARQL, чем я, вероятно, не удивятся, что тайм-аут запроса.
Это разумный подход? Я что-то неправильно делаю синтаксически?
Я подозреваю, что отчетливая ключевое слово или положение группы являются узкие места, потому что это только занимает второе или два:
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) как« midcount ») и получил разумный результат. –
@MarkMiller 'порядок (... как ...)' ** не является законным **. Virtuoso может принять его (он принимает несколько нестандартных синтаксисов), но это не законный SPARQL. Если вам когда-либо понадобится запустить ваш запрос с другой конечной точкой, очень вероятно, что он ** не будет работать **. Вы можете 'select (count (mid) как? Midcount) {...} order by? Midcount', и вы можете' select ... {...} упорядочить по счету (? Mid) ', но вы можете 't 'select ... {...} упорядочить по (count (? mid) как? midcount)'. Форма связывания переменных '(... as ...)' не является законной по порядку ... .... (Однако * * законно в 'group by.) –
Я очень ценю ваши отзывы и извиняюсь за то, что вы не учились более внимательно. Я также использую Jena ad для оценки MarkLogic, поэтому лучшие практики важны для меня. «порядок по счету (?mid) «поднял» Virtuoso 37000 Ошибка SP030: компилятор SPARQL, строка 12: синтаксическая ошибка в '(' before '? mid' "Просто вставляя ее в круглые скобки без AS, она работает и передает validatior. –