2016-04-25 19 views
1

Ist es möglich, das Auftreten von Tripel in mehreren benannten Graphen zu zählen und die Ergebnisse als Zeilen in einer Tabelle zurückzugeben? Wie zum Beispiel:Abfragen mehrerer Graphen mit Aggregatzählung und Grafik in Ergebnissen

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

Hier ist die Abfrage, die ich versuchte.

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 } 
     } } 
    } 
} 

Aber die Ergebnisse waren:

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

Ich versuche zu schreiben, zu vermeiden, dass:

select ?count_graph1 ?sequence_count_graph1 ?count_graph2 ... 

wie könnte es Hunderte von Graphen sein abzufragen.

Antwort

1

Erstens ist die Abfrage sehr nahe. Verschieben Sie einfach die SELECT innerhalb der Graph-Anweisung - im Grunde "für jeden Graph, finden Sie diese Aggregat-Werte". Zweitens, wenn eine der ?identifier Übereinstimmungen mehrere Werte hat, wird die Zählung für ?identifier Duplikate haben, so dass DISTINCT Ergebnisse notwendig sind. Versuchen Sie Folgendes:

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

so dass gibt mir eine Anzahl von? Identifikatoren in allen Grafiken kombiniert. Nach was ich suche, ist eine Zählung von? Bezeichnern in jedem einzelnen Diagramm. so würde graph1 eine Zählung (? Identifikatoren) haben, graph2 würde eine Zählung (? Identifikatoren) haben. – rodney757

+0

In diesem Fall denke ich, dass Ihre ursprüngliche Abfrage sehr nahe war. Siehe die geänderte Antwort. – scotthenninger