Это действительно легко выполнить в neo4j. Альтернативой для выполнения вашей задачи в SPARQL может быть извлечение всего подграфа в «Category: American_musicians» путем итерации через код в подкатегориях.
Например. псевдокод в Java будет что-то вроде:
String startCategory = "<http://dbpedia.org/resource/Category:American_musicians>";
iterateTraversalFunction(startCategory);
тогда функция обхода будет:
public void iterateTraversalFunction(String startCategory){
ArrayList<String> artistsURI = // SPARQL query ?person skos:subject startCategory . ?person rdf:type MusicalArtist
ArrayList<String> subCategoriesURI = // SPARQL query ?subCat skos startCategory
// Repeat recursively
for(String subCatURI: subCategoriesURI){
iterateTraversalFunction(subCatURI);
}
}
Надеюсь, это поможет,
- Дан