【发布时间】:2016-03-14 17:59:30
【问题描述】:
我有一个选择一些项目的查询。如果这些项目属于特定类(:UserSuitability),那么我需要检查用户是否也来自同一类。有四种可能的情况:
- 该项目来自 rdfs:subClassOf :UserSuitability 的类,并且用户也来自同一类。然后检查项目是否包含 hasSuitabilityValue 的值并将其分配给变量 ?suitabilityValue。
- 项目来自 rdfs:subClassOf :UserSuitability 的类,但用户不是,然后检查项目是否包含 hasSuitabilityNotValue 的值并将其分配给变量 ?suitabilityValue。
- 该项目不是来自 rdfs:subClassOf:UserSuitability 的类,然后将 1 分配给变量 ?suitabilityValue。
- 项目不是来自 rdfs:subClassOf:UserSuitability 的类,用户也不是。在这种情况下,什么也不做。
到目前为止,我的查询以及用于测试它的数据如下所示。请注意,数据中的 :item1 应匹配并集的左侧,而 :item2 应匹配右侧。似乎右手边永远不会匹配。
数据
@prefix : <http://www.semanticrecommender.com/rs#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:user1 a :class1 .
:user1 :likes :item1 .
:user1 :likes :item2 .
:class1 rdfs:subClassOf :UserSuitability .
:item1 a :class1 .
:item1 :hasSuitabilityWeight 1.5 .
:item1 :hasNotSuitabilityWeight 0.5 .
:item2 a :class2 .
:class2 rdfs:subClassOf :UserSuitability .
查询
prefix : <http://www.semanticrecommender.com/rs#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?item ?suitabilityValue where
{
values ?user {:user1}
?user :likes ?item
optional{
#-- check if the item is from a class that is
#-- rdfs:subClassOf :UserSuitability
?item a ?suitabilityClass.
?suitabilityClass rdfs:subClassOf :UserSuitability.
{
#-- if the user is also from the same class
?user a ?suitabilityClass
optional{
#-- check if the item has a value for :hasSuitabilityWeight
?item :hasSuitabilityWeight ?suitabilityValueOptional.
}
#-- if it does, assign it to the variable
#-- ?suitabilityValue, otherwise, assign 1
#-- to the variable suitabilityValue
bind(if(bound(?suitabilityValueOptional), ?suitabilityValueOptional, 1) as ?suitabilityValue)
}
union
{
#-- if the user is not from the same class
filter not exists {?user a ?suitabilityClass}
optional{
#-- if the item has a value to hasNotSuitabilityWeight
?item :hasNotSuitabilityWeight ?suitabilityNotValueOptional.
}
#-- assign it to suitabilityValue, otherwise, assign 0
bind(if(bound(?suitabilityNotValueOptional), ?suitabilityNotValueOptional, 0) as ?suitabilityValue)
}
}
}
【问题讨论】:
-
抱歉关门了。现已重新开放。
-
哇哦..这很有趣,你会喜欢的
-
@JoshuaTaylor 感谢您的回答,然后重新打开,:) 我在购物,我会在家里再次检查一次
-
嗯,我也投了最后的结束票,所以这真的只是在弥补我的错误。不过,您会在我的回答中看到,您可以使用更简单的测试用例重现该问题;您提供的查询(以及其中的一些格式)确实使您很容易对绑定表单的位置感到困惑。也就是说,这是一个非常奇怪的问题,我也花了一段时间才知道它是什么。
-
只是说明确保您的示例不仅完整(且可验证)而且最小 的重要性:) 无论如何,发现了 Joshua。跨度>
标签: sparql rdf semantic-web owl ontology