SPARQL-Parser für Java-Code

8

Gibt es eine einfache Möglichkeit, die Sparql-Abfrage in Variablen für Java zu parsen, wie Fyzz in Python? Wie können Jena oder Sesam APIs verwendet werden?

    
Eleftherios K. 24.01.2013, 11:44
quelle

2 Antworten

8

Sie können SPARQL in Java mit Apache Jenas ARQ ganz einfach syntaktisch analysieren und manipulieren, entweder mit der Syntax oder Algebra-Ebene. QueryFactory.create(queryString) wird eine Java-Repräsentation der Abfrage bereitstellen. Dann stochern Sie herum:

%Vor%

(siehe die Java-Query-Dokumentation )

Beginnen Sie mit dem Lernprogramm "SPARQL mit ARQ manipulieren" . Dadurch erhalten Sie ein Gefühl dafür, wie Abfragen dargestellt werden und wie Sie sie herausziehen können ( visitors sind besonders nützlich). Obwohl die Syntaxebene am vertrautesten ist, funktioniert die Algebra für viele Aufgaben besser, da sie a Abfrage tut es tatsächlich.

    
user205512 24.01.2013 12:01
quelle
4

So können Sie eine SPARQL-Abfrage mit Sesame analysieren und bearbeiten:

Um zu analysieren:

%Vor%

Die Ausgabe davon ist eine ParsedQuery , die eine algebraische Objektdarstellung der Abfrage ist. Wenn Sie den Syntaxbaum selbst erhalten möchten, ist das auch möglich:

%Vor%

Sie können diesen abstrakten Syntaxbaum dann direkt bearbeiten, indem Sie ein benutzerdefiniertes SyntaxTreeBuilderVisitor (Tipp: Erweitern Sie ASTVisitorBase , so dass Sie nur die Methoden überschreiben müssen, an denen Sie tatsächlich etwas tun möchten).

Wenn wir zurück zum algebraischen Modell gehen, können Sie ParsedQuery in einem Sesame Sail Repository ausführen:

%Vor%

Um das ParsedQuery zu manipulieren, bevor Sie es ausführen, verwenden Sie ein QueryModelVisitor Implementierung, z Ihr eigener benutzerdefinierter Abfrage-Manipulator:

%Vor%

Mit einem solchen benutzerdefinierten Abfragemodellbesucher haben Sie die vollständige Kontrolle über die Abfrage, um sie zu optimieren oder sogar in eine andere Syntax umzuschreiben.

Ob diese Manipulation auf der Ebene des abstrakten Syntaxbaums (AST) oder auf der Ebene des Abfragemodells durchgeführt wird, ist Geschmackssache: Das Abfragemodell gibt Ihnen mehr Flexibilität bei der Abfrageplanung / -optimierung und teilweisen Umschreibungen (Für die spätere Ausführung in einem Sesame-Store), während, wenn es Ihr Ziel ist, die Abfrage für einen anderen Zweck vollständig neu zu schreiben (z. B. Ausführen in einem nicht-Sesame-Speicher), könnte die Syntax direkt manipulieren.

Abgesehen davon ist der obige Weg, eine Abfrage zu parsen und auszuführen, ein umständlicher Weg, Dinge zu tun. Wenn Sie die analysierte Abfrage vor der Ausführung nicht bearbeiten müssen, können Sie eine Abfrage für ein Repository einfach so vorbereiten und ausführen:

%Vor%     
Jeen Broekstra 24.01.2013 22:33
quelle

Tags und Links