是否可以在WHERE子句中使用过滤器(COUNT(DISTINCT?obj)>;x)执行SPARQL DELETE{}WHERE{}?

是否可以在WHERE子句中使用过滤器(COUNT(DISTINCT?obj)>;x)执行SPARQL DELETE{}WHERE{}?,sparql,virtuoso,Sparql,Virtuoso,我想实现一个delete,它删除每个主题少于x个不同对象的所有三元组 根据我的感觉,预期的查询应该是这样的: DELETE { ?sub ?pred ?obj . } WHERE { {SELECT ?sub ?pred ?obj (count(?obj) as ?count) WHERE { ?sub ?pred ?obj . } GROUP BY ?sub } FILTER(?count < 14) } DELETE{?sub?pred?

我想实现一个delete,它删除每个主题少于x个不同对象的所有三元组

根据我的感觉,预期的查询应该是这样的:

DELETE { ?sub ?pred ?obj . } 
WHERE {  
    {SELECT ?sub ?pred ?obj (count(?obj) as ?count)
    WHERE { ?sub ?pred ?obj .
        } GROUP BY ?sub
    } FILTER(?count < 14)
}
DELETE{?sub?pred?obj.}
何处{
{选择sub-pred-obj(计数(?obj)作为计数)
哪里{?sub?pred?obj。
}分组方式
}过滤器(?计数<14)
}
上述方法不起作用

另外,要实现每个
部分的
obj
,还需要一个
分组,但我不知道如何做到这一点


有人能告诉我解决这个问题的正确方向吗?

请注意,您的子查询实际上不是合法查询。如果尝试仅验证上的子查询,则会得到以下输出:

语法错误:

SELECT中的非组键变量:?pred

不过,奇怪的是,整个查询确实通过了验证。从您尝试的查询中不清楚您正试图删除的内容以及以下语句:

我想实现一个delete,它删除每个主题少于x个不同对象的所有三元组

也不是很清楚。如果您试图删除一个主语的三元组,该主语在所有与该主语相关的谓词中与少于10个不同的对象相关,您会发现它们如下所示:

选择s?p?o{
?s?p?o
{select?s{s?pp?oo}
分组
有(计数(不同的?oo)<10)}
}
然后,将其扩展到执行删除操作很容易:

删除{s?p?o}
在哪里{
?s?p?o
{select?s{s?pp?oo}
分组
有(计数(不同的?oo)<10)}
}

请注意,您的子查询实际上不是合法查询。如果尝试仅验证上的子查询,则会得到以下输出:

语法错误:

SELECT中的非组键变量:?pred

不过,奇怪的是,整个查询确实通过了验证。从您尝试的查询中不清楚您正试图删除的内容以及以下语句:

我想实现一个delete,它删除每个主题少于x个不同对象的所有三元组

也不是很清楚。如果您试图删除一个主语的三元组,该主语在所有与该主语相关的谓词中与少于10个不同的对象相关,您会发现它们如下所示:

选择s?p?o{
?s?p?o
{select?s{s?pp?oo}
分组
有(计数(不同的?oo)<10)}
}
然后,将其扩展到执行删除操作很容易:

删除{s?p?o}
在哪里{
?s?p?o
{select?s{s?pp?oo}
分组
有(计数(不同的?oo)<10)}
}

您所说的“不起作用”是什么意思?如果有错误信息,请将其包含在问题中。首先,我认为您需要正确选择
选项,但它似乎不正确。如果您认为您的挑战可能非常具体,请添加版本信息,并向、或提出您的问题。(ObDisclaimer:I work for,maker of。)您只想删除
{sub?pred?obj.}
三元组还是想删除
?sub
?如果需要后者,则需要删除对
?sub
的引用。您所说的“不工作”是什么意思?如果有错误信息,请将其包含在问题中。首先,我认为您需要正确选择
选项,但它似乎不正确。如果您认为您的挑战可能非常具体,请添加版本信息,并向、或提出您的问题。(ObDisclaimer:I work for,maker of。)您只想删除
{sub?pred?obj.}
三元组还是想删除
?sub
?如果您想要后者,您将需要删除对
?sub
的引用。您应该将此作为错误报告给Jena开发人员。这正是我想要实现的,抱歉我的工资解释。(我对我的问题感到困惑,我想这无助于澄清这一点)我实际上遇到了这个问题。我尝试了验证器,当它没有抱怨时,我很高兴,所以我无法看到实际发生了什么!非常感谢。你应该向Jena开发者报告这个bug。这正是我想要实现的,抱歉我的工资解释。(我对我的问题感到困惑,我想这无助于澄清这一点)我实际上遇到了这个问题。我尝试了验证器,当它没有抱怨时,我很高兴,所以我无法看到实际发生了什么!非常感谢。