2016-04-25 1 views
1

Est-il possible de compter les occurrences de triplets dans plusieurs graphiques nommés et de renvoyer les résultats sous forme de lignes dans un tableau? Tels que:Interrogation de plusieurs graphiques avec agrégat Nombre et graphique dans les résultats

?g ?count ?sequence_count 
-------- ------- --------------- 
graph1 54   54 
graph2 120   80 

Voici la requête que j'ai essayé.

SELECT ?g ?count ?sequence_count  
    FROM NAMED <graph1> 
    FROM NAMED <graph2> 
WHERE { 
    { 
     select (COUNT(?identifier) as ?count) (COUNT(?sequence) as ?sequence_count) 
     WHERE { GRAPH ?g { 
      ?identifier a <http://www.w3.org/2000/01/rdf-schema#Resource> . 
      OPTIONAL { ?identifier <urn:sequence> ?sequence } 
     } } 
    } 
} 

Mais les résultats étaient les suivants:

?g ?count ?sequence_count 
-------- ------- --------------- 
      174   134 

J'essaie d'éviter d'avoir à écrire:

select ?count_graph1 ?sequence_count_graph1 ?count_graph2 ... 

comme il pourrait y avoir des centaines de graphiques à interroger.

Répondre

1

Tout d'abord, la requête est vraiment proche. Il suffit de déplacer le SELECT à l'intérieur de l'énoncé du graphique - en indiquant fondamentalement «pour chaque graphique, trouver ces valeurs agrégées». Deuxièmement, si l'un des correspondances ?identifier a plusieurs valeurs, le nombre de ?identifier aura des doublons, donc DISTINCT résultats sont nécessaires. Essayez ce qui suit:

SELECT * 
    FROM NAMED <graph1> 
    FROM NAMED <graph2> 
WHERE { 
    GRAPH ?g { 
     SELECT (COUNT(DISTINCT ?identifier) as ?count) (COUNT(?sequence) as ?sequence_count) 
     WHERE { 
     ?identifier a <http://www.w3.org/2000/01/rdf-schema#Resource> . 
     OPTIONAL { ?identifier <urn:sequence> ?sequence } 
     } 
    } 
} 
+0

ce qui me donne un nombre d'identificateurs? Dans tous les graphiques combinés. Ce que je cherche, c'est un dénombrement des identificateurs dans chaque graphique individuel. ainsi graph1 aurait un compte (? identifiers), graph2 aurait un compte (? identifiants). – rodney757

+0

Dans ce cas, je pense que votre requête originale était vraiment proche. Voir la réponse modifiée. – scotthenninger