Gewichtete Graphdatenbank mit RDF-Unterstützung

Ich brauche eine 4-Spalten-Diagrammdatenbank (Subjekt-Prädikat-Objekt-Prädikat-Gewicht), in die ich .ttl-Dateien importieren kann.

Ich habe bisher Virtuoso verwendet, aber es unterstützt keine beschrifteten/gewichteten Kanten.

Eine andere Wahl ist Neo4j, aber es unterstützt keine RDF-Tripel aus der Box (die Tripel müssen vor dem Hochladen in das CSV-Format konvertiert werden).

Es ist eine einfache Anforderung, aber ich konnte nichts außer R2DF finden, aber das AFAIK ist nicht verfügbar oder ist immer noch nur ein Konzept.

Anforderungen:

  • Plattform: Linux CentOS
  • Kostenlos, zumindest für Bildungszwecke
  • RDF-Triple-Unterstützung (.ttl).
  • Graphbasiert
  • Umgang mit großen Datensätzen (ca. 5 Millionen Zeilen oder so)

Beispiel:

Eine Beispielzeile aus der .ttl:

<http://dbpedia.org/resource/Category:Futurama> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2004/02/skos/core#Concept> 8.0 .
Wie werden Etiketten/Gewichte in Ihrem RDF beschrieben? Verdinglichung? Bitte posten Sie ein Beispiel der .ttl-Datei, danke!
Ich werde die Gewichte in späteren Phasen hinzufügen.
Hast du Allegro probiert? franz.com/agraph/allegrograph
@retrography Ich konnte in Allegro kein Konzept für gewichtete/beschriftete Kanten finden. Ich denke, Sie meinten, wie Bereichsabfragen darin verarbeitet werden? Ich denke, das könnte reichen.

Antworten (1)

Ihr Turtle-Beispiel ist eigentlich nicht syntaktisch gültig, da Turtle ein "Nur-Triples" -Format ist - Sie werden also kein Tool finden, das das analysieren/verarbeiten kann. Der Begriff der gewichteten Kanten führt Sie aus dem Bereich der RDF-Standards heraus, weshalb Sie nicht viele RDF-Tools finden werden, die dies ausdrücklich unterstützen.

Sie können jedoch mit den meisten Standard-RDF-Tools erreichen, was Sie wollen, wenn Sie bereit sind, Ihre Daten leicht zu ändern. Ich werde in diesem Beispiel RDF4J verwenden.

Um Kantengewichte zu modellieren, können Sie den Begriff "benannter Graphen" verwenden - der in RDF4J durch die Verwendung von Quads anstelle von Tripeln unterstützt wird. Wenn Sie zum Beispiel N-Quads als Format verwenden (sehr ähnlich wie Turtle/N-Triples, aber die zusätzlich benötigten benannten Diagramminformationen zulässt), könnte Ihr Beispiel so aussehen:

<http://dbpedia.org/resource/Category:Futurama> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2004/02/skos/core#Concept> <http://example.org/weight-8-0> .
<http://example.org/weight-8-0> rdfs:label 8.0 .

Wie Sie sehen können, besteht die Idee darin, einen neuen benannten Graphen zu definieren ( http://example.org/weight-8-0in diesem Beispiel gekennzeichnet durch) und diesen als Graphidentifizierer für die Anweisung zu verwenden, der Sie eine Gewichtung zuweisen möchten. Die zweite Anweisung dient lediglich dazu, einen tatsächlichen Gewichtswert mit der Kennung zu verknüpfen.

Dieser Ansatz bedeutet natürlich, dass Sie für jeden einzelnen möglichen Gewichtswert eine neue RDF-Anweisung einführen, sodass er nur dann wirklich praktikabel ist, wenn es eine überschaubare Anzahl möglicher Werte gibt. Andererseits sprechen Sie von 5 Millionen Aussagen in Ihrem Datensatz, also würden Sie diese im schlimmsten Fall auf 10 Millionen Aussagen verdoppeln, was von den meisten RDF-Datenbanken immer noch leicht zu handhaben ist.

Mit diesem Ansatz ist Eclipse RDF4J (früher bekannt als OpenRDF Sesame) ein gut zu verwendendes Framework. Es ist Open Source (Eclipse Distribution License), plattformunabhängig (Java), unterstützt Turtle sowie N-Quads und TriG-Syntax (und die meisten anderen RDF-Syntaxformate) und bietet volle SPARQL 1.1-Unterstützung sowie eine umfassende Java-API . Seine eigenen Datenbanken können bis zu einer Größenordnung von 100 Millionen Anweisungen verarbeiten, und wenn Sie darüber hinaus skalieren möchten, gibt es viele skalierbare RDF-Datenbankanbieter, die vollständig RDF4J-kompatibel sind (so dass Sie die Datenbankimplementierung wechseln können, ohne Ihren Code ändern zu müssen). .

Danke für Ihre Antwort. Ich habe dieses Projekt vorerst auf Eis gelegt (wegen vieler Probleme und Schwierigkeiten). Ich werde mich wieder melden, um Ihre Antwort zu testen, wenn ich die Arbeit an meinem Projekt wieder aufnehme. Ziemlich bald.