Sparql 如果出现条件,RDF将删除项
在前一个问题中 我问,如果我有一个实例,它有一个特定谓词的值,那么sparql查询的所有输出都必须有相同谓词的相同值 我得到了一个很好的答案 现在我正在尝试扩展它,因为我发现了一个新的场景 新的情况是: 如果一个实例对一个特定谓词有一个值,那么所有输出项对于同一谓词必须具有相同的值,或者如果它们具有另一个值,则这两个值必须来自同一类 我将sparql查询扩展到以下内容:Sparql 如果出现条件,RDF将删除项,sparql,rdf,semantic-web,owl,Sparql,Rdf,Semantic Web,Owl,在前一个问题中 我问,如果我有一个实例,它有一个特定谓词的值,那么sparql查询的所有输出都必须有相同谓词的相同值 我得到了一个很好的答案 现在我正在尝试扩展它,因为我发现了一个新的场景 新的情况是: 如果一个实例对一个特定谓词有一个值,那么所有输出项对于同一谓词必须具有相同的值,或者如果它们具有另一个值,则这两个值必须来自同一类 我将sparql查询扩展到以下内容: 前缀: 前缀rdfs: 选择?项目?谓词?相似性,其中 { 值?x{:instance1} ?x?谓词?值。 项目谓词值。
前缀:
前缀rdfs:
选择?项目?谓词?相似性,其中
{
值?x{:instance1}
?x?谓词?值。
项目谓词值。
谓词:hasSimilarityValue?相似性。
过滤器(?x!=?项)
筛选器不存在{
?x?p?v1。
v1a级。
?p rdfs:subpertyof:isCriticalPredicate。
筛选器不存在{
?项目?p?v2。
?p rdfs:subpertyof:isCriticalPredicate。
?v2 a?级。
?RDF类:子类:重要类
}
}
}
这是我的数据:
@prefix : <http://example.org/rs#>
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
:instance1 :p1 :value1.
:instance2 :p1 :value2.
:p1 :hasSimilarityValue 0.5.
:value1 a :class1.
:value2 a :class1.
:class1 rdfs:subClassOf :ImportantClass.
:p1 rdfs:subPropertyOf :isCriticalPredicate.
@前缀:
@前缀rdfs:
:instance1:p1:value1。
:实例2:p1:value2。
:p1:hasSimilarityValue 0.5。
:值1 a:class1。
:值2 a:class1。
:class1 rdfs:子类:ImportantClass。
:p1 rdfs:subpertyof:isCriticalPredicate。
但结果总是空的,我不知道为什么
注1
通过特定谓词,我指的是rdfs:Subassof:isCriticalPredicate的谓词
所谓特定类,我指的是rdfs:subassof:ImportantClass的类,直接的问题是:没有匹配的数据!
如前所述,这是一个非常简单的问题:实际上没有与您编写的查询匹配的数据。因此,我不认为数据和查询真的再现了您所描述的问题。您的查询以
values ?x {:instance1}
?x ?predicate ?value.
?item ?predicate ?value.
filter (?x != ?item)
您的数据包括:
:instance1 :p1 :value1.
:instance2 :p1 :value2.
例如,没有可能的值。唯一的候选者是:instance2,但它与:instance1没有任何相同的值,因此?value没有候选者
您想要的查询
现在,即使书面问题没有你所描述的问题,我想我明白你在问什么了。当您试图为调试过程创建最少的数据时,应尝试包含所有相关案例。在本例中,您希望至少有一个实例具有相同的临界谓词值,以及一个实例具有不同的临界谓词值,但这两个值都很重要。以下是一些数据:
@prefix : <urn:ex:>
:instance1 :p :v1 .
:instance1 :q :v2 .
:instance2 :p :v1 .
:instance2 :q :v2 . #-- same value for :q
:instance3 :p :v1 .
:instance3 :q :v3 . #-- different, but important, value for :q
:instance4 :p :v1 .
:instance4 :q :v4 . #-- different, non-important, value for :q
:q a :CriticalPredicate .
:v2 a :ImportantValue .
:v3 a :ImportantValue .
眼前的问题是:没有匹配的数据!
如前所述,这是一个非常简单的问题:实际上没有与您编写的查询匹配的数据。因此,我不认为数据和查询真的再现了您所描述的问题。您的查询以
values ?x {:instance1}
?x ?predicate ?value.
?item ?predicate ?value.
filter (?x != ?item)
您的数据包括:
:instance1 :p1 :value1.
:instance2 :p1 :value2.
例如,没有可能的值。唯一的候选者是:instance2,但它与:instance1没有任何相同的值,因此?value没有候选者
您想要的查询
现在,即使书面问题没有你所描述的问题,我想我明白你在问什么了。当您试图为调试过程创建最少的数据时,应尝试包含所有相关案例。在本例中,您希望至少有一个实例具有相同的临界谓词值,以及一个实例具有不同的临界谓词值,但这两个值都很重要。以下是一些数据:
@prefix : <urn:ex:>
:instance1 :p :v1 .
:instance1 :q :v2 .
:instance2 :p :v1 .
:instance2 :q :v2 . #-- same value for :q
:instance3 :p :v1 .
:instance3 :q :v3 . #-- different, but important, value for :q
:instance4 :p :v1 .
:instance4 :q :v4 . #-- different, non-important, value for :q
:q a :CriticalPredicate .
:v2 a :ImportantValue .
:v3 a :ImportantValue .
注意
:isCriticalPredicate.
结尾的
可能很重要,因为像:foo.bar
这样的东西是合法的。确保在:isCriticalPredicate
和
之间有空格“通过特定类,我指的是属于rdfs:subassof:ImportantClass的类”您之前没有提到“特定类”;你说“如果它们有另一个值,这两个值必须来自同一个类”,你到底想要哪个?它们必须是来自同一类的值,或者它们都必须是来自ImportantClass的值?您的查询以:?x?谓词?值开始代码>?项谓词?值。`。在相同的数据中,instance1和instance2没有任何相同的值,因此查询的这部分永远不匹配。没有任何结果可获得。请小心:isCriticalPredicate。
结尾的
可能很重要,因为像:foo.bar
这样的东西是合法的。确保在:isCriticalPredicate
和
之间有空格“通过特定类,我指的是属于rdfs:subassof:ImportantClass的类”您之前没有提到“特定类”;你说“如果它们有另一个值,这两个值必须来自同一个类”,你到底想要哪个?它们必须是来自同一类的值,或者它们都必须是来自ImportantClass的值?您的查询以:?x?谓词?值开始代码>?项谓词?值。`。在相同的数据中,instance1和instance2没有任何相同的值,因此查询的这部分永远不匹配。没有任何结果。您好,谢谢您的完整回答,我注意到我在提供数据时犯了错误,我忘了在问题上更正。对不起。我正在试图理解这个查询,请问您所说的^a
是什么意思,这是我第一次看到它,它只是一个向后的属性路径。在sparql和turtle中,可以使用“a”代替rdf:type。“X^p Y,Z.”只是“Y rdf:type X.Z rdf:type X”的简写。省去了一点输入。您好,谢谢您的完整答案,我注意到我在提供数据时出错了,我忘了在问题上更正它。对不起。我正在努力