On 05/07/12 18:30, Milorad Tosic wrote:
Would there by any differences in performance or eventually in result set if we 
would substitute
FILTER NOT EXISTS { ?root rdfs:subClassOf ?super }
with

MINUS { ?root rdfs:subClassOf ?super }
in the previous query?

Milorad

Depends - also the required temporary memory needed is different.  The
MINUS implement is quite performant now (previously it would have been the case the FILTER version was faster).

The FILTER version streams - constant memory overhead.

The MINUS version uses temporary RAM - in proportion to the size of the data matched.

If there are a lot of rdfs:subClassOf, e.g. have expanded the inferences previous, it could be the MINUS version is slower.

You'll have to try to be definitive.  If you try, do let us know.

        Andy




________________________________
From: Federico López <[email protected]>
To: [email protected]
Sent: Thursday, July 5, 2012 5:28 PM
Subject: Re: I need to get the root element of a ontology

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á





Reply via email to