2012/7/5 Andy Seaborne <[email protected]> > On 05/07/12 06:49, Federico López wrote: > >> I looking for a good quey that allows me to get the roots elements of a >> Ontology. Also, I need to know wich one of these roots have children... >> >> >> > Version of Jena used? > I'm using fuseki 0.2.2... > > I have each ontology in a NAMED GRAPH.... >> > > And you are querying the union graph?
I'm Querying each GRAPH at time... > > > >> This is what I using for it but the query is taking too much. >> > > How big is the data (in triples)? > Well... I'm querying Biomedical Ontologies like FMA(1'859.969 triples), RadLex(234.442), ICD10(165.310)... > > Are you using inference? I don't.... > > > >> SELECT DISTINCT ?root ?label (COUNT(?child) AS ?nChild) >> FROM <http://ontologyURI> >> WHERE >> { >> ?root a ?class . >> ?class rdfs:subClassOf owl:Class . >> ?root rdfs:label ?label . >> OPTIONAL { >> ?root rdfs:subClassOf ?super . >> } >> OPTIONAL { >> ?child rdfs:subClassOf ?root . >> } >> FILTER (!bound(?super)) >> } >> GROUP BY ?root ?label >> >> Any idea? >> >> Thanks... >> >> >> > without inference, this maybe what you want: I'm guessing from your > description: > > SELECT ?root > { > # A root is something that is of type class > # which has no super class mentioned. > ?root rdf:type owl:Class . > FILTER NOT EXISTS { ?root rdfs:subClassOf ?super } > > ?root rdfs:label ?label . > } > > Adding in the COUNT of ?child and GROUP BY is unlikely to be cheap. > > SELECT ?root (COUNT(DISTINCT ?child) AS ?nChild) > { > # A root is something that is of type class > # which has no super class mentioned. > ?root rdf:type owl:Class . > FILTER NOT EXISTS { ?root rdfs:subClassOf ?super } > > ?root rdfs:label ?label . > # Children, any depth, by property paths > OPTIONAL { ?child rdfs:subClassOf+ ?root } > } > GROUP BY ?root > Andy > And thanks, I going to try your query, but I think that is just that I need :D -- *FEDERICO LÓPEZ GÓMEZ* Estudiante Ingeniería de Sistemas Universidad del Valle - Sede Tuluá
