在dbpedia上使用SPARQL计算wikiPageLength的方差

在dbpedia上使用SPARQL计算wikiPageLength的方差,sparql,semantic-web,dbpedia,Sparql,Semantic Web,Dbpedia,我想用dbpedia()计算维基百科页面长度历史的方差(或标准差),对于轻小说类书籍(轻小说) SPARQL在这里: PREFIX dbpedia0: <http://dbpedia.org/ontology/> PREFIX term: <http://purl.org/dc/terms/> SELECT DISTINCT ?item ((SUM((?n - ?mean)*(?n - ?mean)))/(COUNT(?n) - 1) AS ?variance) W

我想用dbpedia()计算维基百科页面长度历史的方差(或标准差),对于轻小说类书籍(轻小说)

SPARQL在这里:

PREFIX dbpedia0: <http://dbpedia.org/ontology/> 
PREFIX term: <http://purl.org/dc/terms/>

SELECT DISTINCT ?item ((SUM((?n - ?mean)*(?n - ?mean)))/(COUNT(?n) - 1) AS ?variance) 
WHERE
{
    
?item term:subject dbc:Light_novels . 

  ?item dbpedia0:wikiPageLength ?n
  {
      SELECT ?item (AVG(?n) AS ?mean) WHERE {
        ?item dbpedia0:wikiPageLength ?n . 
      } 
  }

}        
前缀dbpedia0:
前缀词:
选择不同的项目((总和((?n-平均值)*(?n-平均值))/(计数(?n)-1)作为方差)
哪里
{
?项目术语:主题dbc:轻小说。
?项目dbpedia0:wikiPageLength?n
{
选择项目(平均值(?n)作为平均值),其中{
?项目dbpedia0:wikiPageLength?n。
} 
}
}        
这会产生一个错误
Virtuoso 37000错误SP031:SPARQL编译器:名称?n用于多个子句中,没有任何逻辑连接
我无数次尝试盲目地修改代码,但最终不知道如何才能做到这一点


我真的很感谢你的有益评论。谢谢。

正常情况下,这应该会起作用

PREFIX dbpedia0: <http://dbpedia.org/ontology/> 
PREFIX term: <http://purl.org/dc/terms/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>


SELECT ?item IF(?count=1,0,(SUM(?x)/(?count-1))) as ?var
{
SELECT ?item ?n xsd:integer(?n) as ?ni ?mean xsd:integer(?ni-?mean) as ?nmean ((?nmean)*(?nmean)) as ?x ?count
{
  ?item dbpedia0:wikiPageLength ?n 
  {
     SELECT ?item AVG(?n2) as ?mean (COUNT(?item)) as $count
     {
       ?item term:subject dbc:Light_novels . 
       ?item dbpedia0:wikiPageLength ?n2
     }
     GROUP BY ?item
  }
}
} GROUP BY ?item ?count
前缀dbpedia0:
前缀词:
前缀xsd:
如果(?计数=1,0,(总和(?x)/(计数-1)),则选择项目作为变量
{
选择项目n xsd:integer(?n)作为?ni?平均值xsd:integer(?ni-?平均值)作为?nmean((?nmean)*(?nmean))作为?x?计数
{
?项目dbpedia0:wikiPageLength?n
{
选择项目平均值(?n2)作为平均值(计数(?项目))作为$COUNT
{
?项目术语:主题dbc:轻小说。
?项目dbpedia0:wikiPageLength?n2
}
按项目分组
}
}
}按项目计数分组
但它抛出了这个错误

内部优化编译器错误:sqlo\u place\u exp中的dfe不正确。c:2491

所以我把它改成了这个:

PREFIX dbpedia0: <http://dbpedia.org/ontology/> 
PREFIX term: <http://purl.org/dc/terms/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT ?item IF(?count=1,-1,(?sx/(?count-1))) as ?var
{
SELECT ?item SUM(?x) as ?sx ?count
{
SELECT ?item ?n xsd:integer(?n) as ?ni ?mean xsd:integer(?ni-?mean) as ?nmean ((?nmean)*(?nmean)) as ?x ?count
{
  ?item dbpedia0:wikiPageLength ?n 
  {
     SELECT ?item AVG(?n2) as ?mean (COUNT(?item)) as $count
     {
       ?item term:subject dbc:Light_novels . 
       ?item dbpedia0:wikiPageLength ?n2
     }
     GROUP BY ?item
  }
}
} GROUP BY ?item ?count
}
前缀dbpedia0:
前缀词:
前缀xsd:
如果(?count=1,-1,(?sx/(?count-1)),则选择?项作为?变量
{
选择项目总和(?x)作为?sx?计数
{
选择项目n xsd:integer(?n)作为?ni?平均值xsd:integer(?ni-?平均值)作为?nmean((?nmean)*(?nmean))作为?x?计数
{
?项目dbpedia0:wikiPageLength?n
{
选择项目平均值(?n2)作为平均值(计数(?项目))作为$COUNT
{
?项目术语:主题dbc:轻小说。
?项目dbpedia0:wikiPageLength?n2
}
按项目分组
}
}
}按项目计数分组
}
  • 我们需要一个。用于计算平均值和b。根据平均值计算每个
    n
    的差值之和

  • 我需要将类型转换为整数变量
    xsd:integer(?ni-?mean)
    ,否则它不会显示乘法的结果

  • 通过运行第二个内部子查询,您可以看到变量是如何修改的


在上对我有效您可以禁用上的标志“严格检查无效变量”和“严格检查多个子句中使用的变量名,但在逻辑上彼此没有连接”-我的意思是,这就是您的错误所说的。出于效率原因,我还将
?项术语:subject dbc:Light_news.
放入子查询中。因此,您最终将拥有
?项目术语:主题dbc:Light\u小说。
在内部和外部查询tanks@UninformedUser中,错误问题由此解决。但我仍然没有得到查询结果。你有什么想法吗?你现在用哪个端点?在
dbo的数据中:wikiPageLength
不存在。在它里面,我发誓!帮了大忙,谢谢。我现在正在计算wikiPageModified日期数据的方差,如果您对此也有想法,我将不胜感激。再次感谢。