This is my query:
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)
}
}
and the result is:
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 .
As you see, for each instance, there are many values, I want to aggregate them and make the SUM
of them for each instance. I would do that with SELECT
, but with CONSTRUCT
, I didn't know how to apply the aggregation.
After reading, i found that we can't use the aggregation directly from CONSTRUCT
, but i'd need to use SELECT
and CONSTRUCT
together, it seems i have to use something named "named graph" but i didn't know how to do that even i tried.
your help is highly appreciated.
Many thanks, best regards,
Update 1
One of the ways I've tried is:
construct {
?subject0 rs:similarityValue ?similairty0.
?subject1 rs:similarityValue ?similairty1
}
WHERE {
GRAPH ?g {?subject0 rs:similarityValue ?similairty0}.
{
?subject0 ?predicate0 ?object0.
....
but i got empty results
First, it's probably better to make sure that you can select all the information that you're trying to retrieve. It looks like you're aiming for something like this:
Now, it seems like after this, you want to group by by the value of ?s and sum the weighted similarities:
Finally, since you've got the values that you're looking for, you can now construct the triples that you want: