从 sparql 查询中的子类获取值

Get values from a subClass in a sparql query

我在尝试使用子类执行 sparql 查询时遇到问题。

我有以下 ontology:

其中 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"行,但是我找不到方法。任何人都可以帮忙吗?谢谢!

这个其实和subclasses没有关系,只是instance和aclass的区别而已。由于 rec:Quesos 是所有奶酪的 class,并且每种特定类型的奶酪都被建模为 rec:Quesos 实例 ,您可以通过以下方式查询在您的查询中添加图形模式,而不是匹配 特定的 成分(例如 rec:Salrec:Tomate),而是匹配 any rec:Quesos 类型的成分:

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

或更短的时间(因为您实际上不需要 ?i 的值来做其他事情):

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