2016-11-28 1 views
0

J'ai un groupe graphique <group> de m graphiques <group_1> ... <group_m> avec n triplets au total. Quand je fais un compte avec un graphique <graph> avec k triplets au total en dehors du groupe graphique, je ne reçois que le nombre de triplets n dans le groupe graphique:En utilisant SPARQL « de » à la fois un graphique et un groupe graphique Virtuoso 7.20.3217

select count(*) 
from <group> 
from <graph> 
{?s ?p ?o} 

Résultat: n

Lorsque je liste les graphiques dans le groupe graphique explicitement, cependant, j'obtenir le résultat correct:

select count(*) 
from <group_1> 
from <group_2> 
... 
from <group_m> 
from <graph> 
{?s ?p ?o} 

Résultat: n + k

Comment puis-je obtenir le résultat correct avec le groupe graphique et quelle est la raison de ce comportement?

Répondre

1

Vous devez utiliser soit deux sous-requêtes comme celui-ci par exemple:

select ?n ?k (?n + ?k as ?totalCount) where { 
    { select (count(*) as ?n) where { 
     graph group: { ?s ?p ?o } } 
    { select (count(*) as ?k) where { 
     graph graph: { ?s ?p ?o } } 
} 

Ou utiliser un syndicat:

select (count(?s1) as ?n) 
     (count(?s2) as ?k) 
     (?n + ?k as ?totalCount) 
where { 
    { graph group: { ?s1 ?p1 ?o1 } } 
    union 
    { graph graph: { ?s2 ?p2 ?o2 } } 
} 
+0

Il y a des erreurs de syntaxe quand j'exécutons votre première requête et retourne 0 triplets pour la groupe de graphes lorsque je les corrige (parenthèses dans la somme, suppression du ":", ajout d'accolades manquantes). –