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 reduced ?r
WHERE {
?x rdf:type rec:Receta .
?x rdfs:label ?r.
?x rec:Ingrediente rec:Tomato.
?x rec:Ingrediente ?i.
FILTER (?i=rec:Tomato)
}
但问题在于它显示了包含该成分的所有配方以及更多。我怎么能限制这个?有人能帮助我吗?
答案 0 :(得分:0)
查看FILTER NOT EXISTS
。
所以类似(取决于您的数据的确切性质,但未显示):
WHERE {
?x rdf:type rec:Receta .
?x rdfs:label ?r.
FILTER NOT EXISTS {?x rec:Ingrediente rec:Tomato }
}
全部是?x,?r其中?x没有属性/值&#34; rec:Ingrediente rec:Tomato&#34;。
答案 1 :(得分:0)
您的第一个查询
SELECT reduced ?r WHERE {
?x rdf:type rec:Receta .
?x rdfs:label ?r.
?x rec:Ingrediente rec:Tomato.
?x rec:Ingrediente ?i.
FILTER (?i=rec:Tomato)
}
匹配任何以番茄为成分的配方。使用具有常量值的过滤器与写入相同:
SELECT reduced ?r WHERE {
?x rdf:type rec:Receta .
?x rdfs:label ?r.
?x rec:Ingrediente rec:Tomato.
}
相反,您需要选择配方并删除那些具有除某些设置之外的成分的配方。 AndyS's answer提到过滤器不存在,这是一个开始。具体来说,如果您想确保所有成分都是例如番茄,罗勒和奶酪,那么您可以编写如下查询:
SELECT reduced ?r WHERE {
?x rdf:type rec:Receta .
?x rdfs:label ?r.
filter not exists {
?x rec:Ingrediente ?i
filter( ?i not in (rec:Tomato, rec:Basil rec:Cheese) )
}
找到所有食谱,然后去除任何含有不其中一种成分的成分。