On 10/04/12 16:09, Andrés Zules wrote:
2012/4/10 Dave Reynolds<[email protected]>

Are you sure that was the query you ran?
Or alternatively are you sure that was the ontology you ran it over?


The only inverse of pizza:isToppingOf is pizza:hasTopping so you are
effectively asking the query:

     ?pizza pizza:hasTopping pizza:MushroomTopping .

Which should return empty for that ontology.


Yes, I am sure. But it's strange I run without reasoner:

SELECT ?NombrePizza
WHERE {
  ?NombrePizza pizza:isToppingOf pizza:MushroomTopping .
}

And the result is empty, but with (without reasoner):

SELECT ?NombrePizza
WHERE {
  ?NombrePizza ?Relacion pizza:MushroomTopping .
  ?Relacion owl:inverseOf pizza:isToppingOf .
}

The result is

  DefaultOWLNamedClass(
http://www.co-ode.org/ontologies/pizza/pizza.owl#FourSeasons)
DefaultOWLNamedClass(
http://www.co-ode.org/ontologies/pizza/pizza.owl#Mushroom)
DefaultOWLNamedClass(
http://www.co-ode.org/ontologies/pizza/pizza.owl#Giardiniera)
DefaultOWLNamedClass(
http://www.co-ode.org/ontologies/pizza/pizza.owl#LaReine)

That sounds like a bug somewhere. As far as I can see the only inverseOf pizza:isToppingOf is pizza:hasTopping and the only mentions of hasTopping are as class restrictions.

I can't see how the query should return anything *with* inference, let along without inference!

The Ontology models both pizzas and toppings as classes and there is no
pizza:hasTopping relationship between the classes. Each of the Pizza
classes like FourSeasons are defined via:

    <owl:Class rdf:about="#FourSeasons">
        <rdfs:label xml:lang="pt">QuatroQueijos</**rdfs:label>
        <rdfs:subClassOf>
            <owl:Restriction>
                <owl:onProperty rdf:resource="#hasTopping"/>
                <owl:someValuesFrom rdf:resource="#**MushroomTopping"/>
            </owl:Restriction>
        </rdfs:subClassOf>
    ...

So an instance of FourSeasons would have an instance of a MushroomTopping
on, which is the not the same as your query and the ontology has no such
instances anyway.

In any case to do anything useful with that ontology you really need a
full DL reasoner such as Pellet.

Dave


Thanks Dave. I dont know why my query's result is 4 classes, i am beginner
with the SPARQL and execute that statement testing many others, do you have
a alternative query? I only want pizzas with Mushrooms.

Well that ontology is a bit painful to work with at the SPARQL level but you could query for (untested example):

SELECT * WHERE
{
    ?pizza rdfs:subClassof [
        owl:onProperty pizza:hasTopping;
        owl:someValuesFrom pizza:MushroomTopping ] .
}

Dave

Reply via email to