2017-07-12 6 views
1

いくつかのプロパティに基づいてクエリ、次のフクロウの制限の一種では使用して私のクエリSPARQL - 私はチーズのトッピングが、結果ショー(_:B0)を有する全てのピザ名を取得したい

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 
    ] 
} 

です作品を照会本当に複雑であり、いくつかのピザは、複雑なOWL構文を使用しているため、不完全かもしれませんスタンフォード

+1

。データを見て、ピザを選んでデータを照合してみてください。例えば ​​'CheesyPizza'のように、データを見てください。推論を有効にしないと一致しません。さらに、クエリは、「CheeseTopping」のサブクラスとして定義されたトッピングで結果を返しません – AKSW

答えて

1

これは(有効推論なしで)働きます

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 

複数のCheeseToppingを含む可能性があるため、いくつかは複数回リストされています。重複を削除するには:あなたが推論を有効にした場合

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 

これは動作します:

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

参考:ここからピザのオントロジーを使用し :http://protege.stanford.edu/ontologies/pizza/pizza.owl間違ったクエリをだ

1

からピザオントロジー:

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

    { 
    ?pizza rdfs:subClassOf* pizza:Pizza . 
    ?pizza owl:equivalentClass|rdfs:subClassOf [ 
     rdf:type owl:Restriction ; 
     owl:onProperty pizza:hasTopping ; 
       owl:someValuesFrom/rdfs:subClassOf* pizza:CheeseTopping 
     ] 

    } UNION { 
    ?pizza owl:equivalentClass _:b0 . 
    _:b0 rdf:type    owl:Class ; 
      owl:intersectionOf _:b1 . 
    _:b1 (rdf:rest)*/rdf:first ?otherClass. 
    ?otherClass rdf:type owl:Restriction ; 
       owl:onProperty pizza:hasTopping ; 
       owl:someValuesFrom/rdfs:subClassOf* pizza:CheeseTopping 


    } 
}