限制范围内SPARQL查询的结果数

时间:2014-09-25 18:04:52

标签: sparql

假设我们有以下三元组:

: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

我很感激帮助。 谢谢!

1 个答案:

答案 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    |
--------------------------