从sparql查询中的子类获取值

时间:2015-07-06 15:34:52

标签: subclass rdf sparql owl rdfs

尝试使用subClasses进行sparql查询时遇到问题。

我有以下本体论:

enter image description here

其中Quesos是SubClassOf Ingrediente,您可以在下一张图片中看到,而Quesos也有其他成员。

enter image description here

我想从一些食材中找回一些食谱。例如:

我想要的所有配方都含有番茄,盐和奶酪(奶酪可以是任何奶酪),我想要的所有配方都要包含这些配方。

问题出在这里:如果我把原料(如盐或番茄)放入,那么查询工作正常,但如果我把“Quesos”放进去,那么我就没有答案了。我不知道如何在sparql查询中使用子类。

到目前为止,我有以下查询:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rec:<http://www.receta.org#>
SELECT ?r ?cal ?tiempo ?dif (COUNT (?i) as ?cantIng)(GROUP_CONCAT(DISTINCT ?listaIngredientes) as ?listaIng)(GROUP_CONCAT(DISTINCT ?modoPreparacion) as ?Preparacion) 
                WHERE { 
                ?x rdf:type rec:Receta .
                ?x rdfs:label ?r.
                ?x rec:Ingrediente rec:Sal.
                ?x rec:Ingrediente rec:Tomate.
                ?x rec:Calorias ?cal.
                ?x rec:tiempoPreparacion ?tiempo.
                ?x rec:dificultad ?dif.
                ?x rec:listaIngredientes ?listaIngredientes.
                ?x rec:modoPreparacion ?modoPreparacion.
                } 
                 GROUP BY ?r ?cal ?tiempo ?dif
                ORDER BY ?cantIng 

我需要添加“subclassOf”行,但我找不到方法。有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:2)

这实际上与子类无关,而只是与实例和类之间的区别。由于rec:Quesos是所有奶酪的类,并且每种特定类型的奶酪都被建模为rec:Quesos实例,您可以通过向查询添加图形模式来查询而不是匹配特定的成分(例如rec:Salrec:Tomate),匹配类型rec:Quesos的任何成分:

?x rec:Ingrediente ?i . 
?i a rec:Quesos.

或者更快(因为您实际上不需要?i的值用于其他任何事情):

?x rec:Ingrediente [ a rec:Quesos ].