首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从构造中创建图上的聚合

如何从构造中创建图上的聚合
EN

Stack Overflow用户
提问于 2016-02-08 15:50:52
回答 1查看 352关注 0票数 2

这是我的疑问:

代码语言:javascript
复制
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rs: <http://www.welovethesemanticweb.com/rs#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    construct {
  ?subject0 rs:similarityValue ?similairty0.
    ?subject1 rs:similarityValue ?similairty1
}
WHERE {

  {
  ?subject0 ?predicate0 ?object0.
  rs:Impromptu_No._1 ?predicate0 ?object0.
    ?predicate0 rs:hasSimilarityValue ?similairty0Helper.
    BIND(?similairty0Helper * (4/9) AS ?similairty0)
    FILTER (?subject0 != rs:Impromptu_No)  
  }
  union {
    ?subject1 ?predicate ?object.
    ?object ?predicate1 ?object1.
    ?predicate1 rs:hasSimilarityValue ?similairty1Helper.
    rs:Impromptu_No._1 ?predicateHelper ?objectHelper.
    ?objectHelper ?predicate1 ?object1
      BIND(?similairty1Helper * (1/9) AS ?similairty1)
    FILTER (?subject1 != rs:Impromptu_No._1)
  }
}

结果是:

代码语言:javascript
复制
rs:5th_Symphony
      rs:similarityValue
            0.011111111111111112e0 .

rs:Polonaise_heroique
      rs:similarityValue
            0.011111111111111112e0 , 0.17777777777777778e0 , 0.26666666666666666e0 .

rs:Preludes
      rs:similarityValue
            0.011111111111111112e0 , 0.26666666666666666e0 , 0.17777777777777778e0 .

rs:Requiem_Sequentia
      rs:similarityValue
            0.011111111111111112e0 .

rs:Le_nozze_di_Figaro
      rs:similarityValue
            0.011111111111111112e0 .

rs:Symphony_No._29_in_A_major
      rs:similarityValue
            0.011111111111111112e0 .

rs:Piano_Concerto_No._24
      rs:similarityValue
            0.011111111111111112e0 .

rs:Impromptu_No._1
      rs:similarityValue
            0.26666666666666666e0 , 0.17777777777777778e0 .

rs:Sonata_Pathetique
      rs:similarityValue
            0.011111111111111112e0 .

rs:Dies_Irae
      rs:similarityValue
            0.011111111111111112e0 .

rs:Piano_Sonata_No._31
      rs:similarityValue
            0.011111111111111112e0 , 0.26666666666666666e0 .

rs:Violin_Concerto_No._5_in_A_major
      rs:similarityValue
            0.011111111111111112e0 .

正如您所看到的,对于每个实例,有许多值,我希望聚合它们并为每个实例创建它们的SUM。我会在SELECT中做到这一点,但是对于CONSTRUCT,我不知道如何应用聚合。

在阅读完之后,我发现我们不能直接使用来自CONSTRUCT的聚合,但是我需要同时使用SELECTCONSTRUCT,似乎我必须使用某种名为“命名图”的东西,但是我甚至尝试都不知道如何做到这一点。

你的帮助是非常感谢的。

非常感谢,最诚挚的问候,

更新1

我尝试过的方法之一是:

代码语言:javascript
复制
construct {
  ?subject0 rs:similarityValue ?similairty0.
    ?subject1 rs:similarityValue ?similairty1
}
WHERE {
  GRAPH ?g  {?subject0 rs:similarityValue ?similairty0}.
  {
  ?subject0 ?predicate0 ?object0.
....

但我得到了空洞的结果

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-08 18:37:30

首先,最好确保您能够选择要检索的所有信息。看起来你的目标是这样的:

代码语言:javascript
复制
prefix rs: <http://www.welovethesemanticweb.com/rs#>

select distinct ?s ?weight ?factor where {
  #-- ?x is the special value of interest.  This
  #-- is pulled out into a VALUES block just for
  #-- convenience; there's just one place to change
  #-- rs:Impromptu_No._1, now.
  values ?x { rs:Impromptu_No._1 }

  #-- find ?s which are "one step" away from
  #-- a common property/value with ?x, and
  #-- take 4/9 as ?weight.
  {
    ?s ?p ?o .
    ?x ?p ?o .
    bind(4/9 as ?weight)
  }
  union
  #-- find ?s which are are "two steps" away from
  #-- a common property/value with ?x, and take
  #-- 1/9 as ?weight
  {
    ?s ?a ?b . ?b ?p ?o .
    ?x ?c ?d . ?d ?p ?o .
    bind(1/9 as ?weight)
  }

  #-- get the similarity factor of the property
  #-- and make sure that ?s is different from ?x.
  ?p rs:hasSimilarityValue ?factor .
  filter(?s != ?x)
}
代码语言:javascript
复制
-----------------------------------------------------------------------------------------------------------------------
| s                                   | weight                     | factor                                           |
=======================================================================================================================
| rs:5th_Symphony                     | 0.111111111111111111111111 | "0.1"^^<http://www.w3.org/2001/XMLSchema#double> |
| rs:Dies_Irae                        | 0.111111111111111111111111 | "0.1"^^<http://www.w3.org/2001/XMLSchema#double> |
| rs:Le_nozze_di_Figaro               | 0.111111111111111111111111 | "0.1"^^<http://www.w3.org/2001/XMLSchema#double> |
| rs:Piano_Concerto_No._24            | 0.111111111111111111111111 | "0.1"^^<http://www.w3.org/2001/XMLSchema#double> |
| rs:Piano_Sonata_No._31              | 0.111111111111111111111111 | "0.1"^^<http://www.w3.org/2001/XMLSchema#double> |
| rs:Piano_Sonata_No._31              | 0.444444444444444444444444 | "0.6"^^<http://www.w3.org/2001/XMLSchema#double> |
| rs:Polonaise_heroique               | 0.111111111111111111111111 | "0.1"^^<http://www.w3.org/2001/XMLSchema#double> |
| rs:Polonaise_heroique               | 0.444444444444444444444444 | "0.4"^^<http://www.w3.org/2001/XMLSchema#double> |
| rs:Polonaise_heroique               | 0.444444444444444444444444 | "0.6"^^<http://www.w3.org/2001/XMLSchema#double> |
| rs:Preludes                         | 0.111111111111111111111111 | "0.1"^^<http://www.w3.org/2001/XMLSchema#double> |
| rs:Preludes                         | 0.444444444444444444444444 | "0.4"^^<http://www.w3.org/2001/XMLSchema#double> |
| rs:Preludes                         | 0.444444444444444444444444 | "0.6"^^<http://www.w3.org/2001/XMLSchema#double> |
| rs:Requiem_Sequentia                | 0.111111111111111111111111 | "0.1"^^<http://www.w3.org/2001/XMLSchema#double> |
| rs:Sonata_Pathetique                | 0.111111111111111111111111 | "0.1"^^<http://www.w3.org/2001/XMLSchema#double> |
| rs:Symphony_No._29_in_A_major       | 0.111111111111111111111111 | "0.1"^^<http://www.w3.org/2001/XMLSchema#double> |
| rs:Violin_Concerto_No._5_in_A_major | 0.111111111111111111111111 | "0.1"^^<http://www.w3.org/2001/XMLSchema#double> |
-----------------------------------------------------------------------------------------------------------------------

现在,似乎在此之后,您希望通过按?s的值进行分组,并将加权相似性之和:

代码语言:javascript
复制
select distinct ?s (sum(?weight * ?factor) as ?similarity) where {
  values ?x { rs:Impromptu_No._1 }
  {
    ?s ?p ?o .
    ?x ?p ?o .
    bind(4/9 as ?weight)
  }
  union
  {
    ?s ?a ?b . ?b ?p ?o .
    ?x ?c ?d . ?d ?p ?o .
    bind(1/9 as ?weight)
  }

  ?p rs:hasSimilarityValue ?factor .
  filter(?s != ?x)
}
group by ?s
代码语言:javascript
复制
----------------------------------------------------------------
| s                                   | similarity             |
================================================================
| rs:5th_Symphony                     | 0.044444444444444446e0 |
| rs:Piano_Concerto_No._24            | 0.044444444444444446e0 |
| rs:Requiem_Sequentia                | 0.044444444444444446e0 |
| rs:Dies_Irae                        | 0.044444444444444446e0 |
| rs:Piano_Sonata_No._31              | 0.31111111111111117e0  |
| rs:Symphony_No._29_in_A_major       | 0.044444444444444446e0 |
| rs:Le_nozze_di_Figaro               | 0.044444444444444446e0 |
| rs:Violin_Concerto_No._5_in_A_major | 0.044444444444444446e0 |
| rs:Sonata_Pathetique                | 0.044444444444444446e0 |
| rs:Preludes                         | 0.48888888888888893e0  |
| rs:Polonaise_heroique               | 0.48888888888888893e0  |
----------------------------------------------------------------

最后,既然您已经得到了要寻找的值,那么现在您可以构造,这是您想要的三元组:

代码语言:javascript
复制
construct {
  ?s rs:similarityValue ?similarity
}
where {{
  select distinct ?s (sum(?weight * ?factor) as ?similarity) where {
    values ?x { rs:Impromptu_No._1 }
    {
      ?s ?p ?o .
      ?x ?p ?o .
      bind(4/9 as ?weight)
    }
    union
    {
      ?s ?a ?b . ?b ?p ?o .
      ?x ?c ?d . ?d ?p ?o .
      bind(1/9 as ?weight)
    }
    ?p rs:hasSimilarityValue ?factor .
    filter(?s != ?x)
  }
  group by ?s
}}
代码语言:javascript
复制
@prefix :      <http://www.semanticweb.org/rs#> .
@prefix rs:    <http://www.welovethesemanticweb.com/rs#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .

rs:5th_Symphony  rs:similarityValue  0.044444444444444446e0 .

rs:Polonaise_heroique
        rs:similarityValue  0.48888888888888893e0 .

rs:Preludes  rs:similarityValue  0.48888888888888893e0 .

rs:Requiem_Sequentia  rs:similarityValue
                0.044444444444444446e0 .

rs:Le_nozze_di_Figaro
        rs:similarityValue  0.044444444444444446e0 .

rs:Symphony_No._29_in_A_major
        rs:similarityValue  0.044444444444444446e0 .

rs:Piano_Concerto_No._24
        rs:similarityValue  0.044444444444444446e0 .

rs:Sonata_Pathetique  rs:similarityValue
                0.044444444444444446e0 .

rs:Dies_Irae  rs:similarityValue  0.044444444444444446e0 .

rs:Piano_Sonata_No._31
        rs:similarityValue  0.31111111111111117e0 .

rs:Violin_Concerto_No._5_in_A_major
        rs:similarityValue  0.044444444444444446e0 .
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35273681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档