尝试使用subClasses进行sparql查询时遇到问题。
我有以下本体论:
其中Quesos是SubClassOf Ingrediente,您可以在下一张图片中看到,而Quesos也有其他成员。
我想从一些食材中找回一些食谱。例如:
我想要的所有配方都含有番茄,盐和奶酪(奶酪可以是任何奶酪),我想要的所有配方都要包含这些配方。
问题出在这里:如果我把原料(如盐或番茄)放入,那么查询工作正常,但如果我把“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”行,但我找不到方法。有人可以帮忙吗?谢谢!
答案 0 :(得分:2)
这实际上与子类无关,而只是与实例和类之间的区别。由于rec:Quesos
是所有奶酪的类,并且每种特定类型的奶酪都被建模为rec:Quesos
的实例,您可以通过向查询添加图形模式来查询而不是匹配特定的成分(例如rec:Sal
或rec:Tomate
),匹配类型rec:Quesos
的任何成分:
?x rec:Ingrediente ?i .
?i a rec:Quesos.
或者更快(因为您实际上不需要?i
的值用于其他任何事情):
?x rec:Ingrediente [ a rec:Quesos ].