2017-06-10 4 views
2

Ich habe die folgenden Daten:Gruppierung durch leeren Knoten

@prefix f: <http://example.org#> . 

_:a f:trait "Rude"@en . 
_:a f:name "John" . 
_:a f:surname "Roy" . 
_:b f:trait "Crude"@en . 
_:b f:name "Mary" . 
_:b f:surname "Lestern" . 

Allerdings, wenn ich die folgende Abfrage in Blazegraph ausführen:

PREFIX f: <http://example.org#> 

SELECT ?s ?o 
WHERE 
{ 
    ?s f:trait ?o . 
} 

ich sechs Ergebnisse:

s o 
t32 Crude 
t37 Crude 
t39 Crude 
t31 Rude 
t36 Rude 
t38 Rude 

Wenn die leeren Knoten _:a und _:b sind nct-Knoten, wie sollte ich eine SPARQL-Abfrage schreiben, um nur zwei eindeutige Ergebnisse zurückzugeben? Ich habe versucht SELECT DISTINCT, aber es gibt immer noch sechs Ergebnisse. Ich habe versucht, Gruppierung von ?o, aber Blazegraph gibt einen Fehler zurück und sagt, es ist ein schlechtes Aggregat. Warum passiert diese Art der Ausgabe von sich wiederholenden Tupeln? Und wie vermeide ich das?

+1

Was bedeutet _exactly_ mit "Ich habe die folgenden Daten"? Ich nehme an, Ihr Problem ist ähnlich zu [this] (https://sourceforge.net/p/bigdata/discussion/676946/thread/e6d077d0/#d6e3). –

+1

@StanislavKralin Ich meine, das sind die Daten, die ich in Blazegraph geladen habe, indem ich die Registerkarte "Update" in der Anwendung verwende. Es ist nur ein kleiner Übungsdatensatz, weil ich SPARQL lerne. Das könnte ein Fehler sein, wenn ich deinen Link richtig verstanden habe. – Liliane

+1

Wenn Sie wirklich 6 Ergebnisse für diese Abfrage auf Ihren Beispieldaten in einem einzelnen Diagramm erhalten, dann stimmt etwas in Blazegraph nicht. – AKSW

Antwort

2

Das Problem besteht darin, dass Sie Daten, die leere Knoten enthalten, mehrmals eingefügt haben. Diese Operation ist nicht idempotent.

Nützliche Zitate

Von RDF 1.1 Concepts and Abstract Syntax:

Blank Knotenkennungen sind lokale Kennungen, die in einigen konkreten RDF-Syntax oder RDF Speicher-Implementierungen verwendet werden. Sie sind immer lokal auf den Datei- oder RDF-Speicher beschränkt und keine persistenten oder portablen Kennungen für leere Knoten.

Von RDF 1.1 Semantics:

RDF Graphen können in der Logik erster Ordnung als Konjunktionen von einfachen atomaren Sätze betrachtet werden, wobei leere Knoten freie Variablen sind, die existentielle sein werden verstanden. Die Vereinigung von zwei Graphen ist dann analog zur syntaktischen Konjunktion in dieser Syntax. Die RDF-Syntax hat keine expliziten Variablenbindungsquantifizierer, so dass die Wahrheitsbedingungen für jeden RDF-Graph die freien Variablen in diesem Graph als existenziell quantifiziert in diesem Graph behandeln. Durch die Vereinigung von Graphen, die sich einen leeren Knoten teilen, werden die impliziten Quantifizierungsbereiche geändert.

Von SPARQL 1.1 Query Language:

Blank Knoten Etiketten scoped sind mit einer Ergebnismenge.

Es muss keine Beziehung zwischen einem Label _:a in der Ergebnismenge und einem leeren Knoten im Datendiagramm mit demselben Label bestehen.

Ein Anwendungs-Writer sollte nicht erwarten, dass leere Knotenbeschriftungen in einer Abfrage auf einen bestimmten leeren Knoten in den Daten verweisen.

Von SPARQL 1.1 Update:

Blank Knoten ... angenommen werden von dem leeren Knoten im Graph-Shop disjunkt sein, das heißt, wird mit "frischem" leeren Knoten eingefügt werden.

Einige Diskussion

Verschiedene triplestores bietet Lösungen für die "Probleme" beschrieben. Z. B. Jena allows, Pseudo-URIs wie <_:b1> usw. zu verwenden.

Verwandte Themen