假设我们有以下三元组:
:Influenza :hasSymptom :Fever
:Influenza :hasSymptom :Headache
:Influenza :hasSymptom :SoreThroat
:Influenza :minQuantityOfSymptoms 1
:Influenza :maxQuantityOfSymptoms 3
我想开发一个SPARQL查询,在 minQuantityOfSymptoms 和 maxQuantityOfSymptoms 中返回许多解决方案。
我通过使用LIMIT修饰符实现了类似的结果,但是我必须明确声明上限,这样就没有随机性了。以下查询使用LIMIT修饰符并始终返回两个症状:
SELECT ?symptom WHERE {
:Influenza :hasSymptom ?symptom .
} LIMIT 2
我很感激帮助。 谢谢!
答案 0 :(得分:0)
如果我理解正确,您想要选择疾病的某些症状,并且您希望至少选择 minQuantity 且小于 maxQuantity 。这可以解释在你的情况下,min为1且max为3,你已经选择了2(= 3 - 1)个症状。你可以在SPARQL中做到这一点,虽然它并不是非常漂亮。首先,让我们获取一些可加载的数据:
@prefix : <urn:ex:>
:Influenza :hasSymptom :Fever .
:Influenza :hasSymptom :Headache .
:Influenza :hasSymptom :SoreThroat .
:Influenza :minQuantityOfSymptoms 1 .
:Influenza :maxQuantityOfSymptoms 3 .
现在,诀窍是对每种疾病的症状施加排序,以便您可以将索引与每种疾病相关联。然后你可以只采用索引小于max-min的症状:
prefix : <urn:ex:>
select ?disease ?symptom where {
?disease :minQuantityOfSymptoms ?min ;
:maxQuantityOfSymptoms ?max ;
:hasSymptom ?symptom, ?symptom_ .
filter ( str(?symptom_) <= str(?symptom) )
}
group by ?disease ?symptom ?max ?min
having (count(?symptom_) <= (?max-?min))
--------------------------
| disease | symptom |
==========================
| :Influenza | :Headache |
| :Influenza | :Fever |
--------------------------