Search code examples
sparqljenaowlprotege

SPARQL - Query based on some property


I want to get all the pizza names which has cheese toppings but the result shows (_:b0) which is kind of an owl restriction following is my query

PREFIX pizza: <http://www.co-ode.org/ontologies/pizza/pizza.owl#>
SELECT ?X WHERE {
    ?X rdfs:subClassOf* [
        owl:onProperty pizza:hasTopping ;
        owl:someValuesFrom pizza:CheeseTopping
    ]
}

using Pizza ontology from stanford


Solution

  • This works (Without reasoning enabled)

     PREFIX pizza: <http://www.co-ode.org/ontologies/pizza/pizza.owl#>
     SELECT ?X ?topping WHERE {
         ?X rdfs:subClassOf ?Y .  
         ?Y owl:someValuesFrom ?topping .
         ?topping rdfs:subClassOf* pizza:CheeseTopping
     } 
     ORDER BY ?X
    

    Some are listed more than once as they could contain more than one CheeseTopping. To remove duplicates:

     PREFIX pizza: <http://www.co-ode.org/ontologies/pizza/pizza.owl#>
     SELECT DISTINCT ?X WHERE {
            ?X rdfs:subClassOf ?Y .  
            ?Y owl:someValuesFrom ?topping .
            ?topping rdfs:subClassOf* pizza:CheeseTopping
     }
     ORDER BY ?X
    

    This works if you enable a reasoner:

    PREFIX pizza: <http://www.co-ode.org/ontologies/pizza/pizza.owl#>
    SELECT DISTINCT ?X WHERE {
        ?X rdfs:subClassOf pizza:CheeseyPizza
    }
    

    Ref: Used the pizza ontology from here: http://protege.stanford.edu/ontologies/pizza/pizza.owl