2016-05-10 22 views
1

Ich habe eine Liste von Knoten und ich möchte die Tripel mit allen Beziehungen zwischen diesen Knoten abrufen.SPARQL Abfrage mit einer großen Anzahl von Werten innerhalb 'Werte' Block

Das ist, was ich bisher getan habe:

PREFIX myPrefix: <http://example.org/myPrefix/> 
SELECT ?a ?relation ?b 
WHERE{ 
values ?a { myPrefix:id_00083184 myPrefix:id_00083187 
      myPrefix:id_00083189 myPrefix:id_00083182 
      myPrefix:id_09463313 myPrefix:id_00000790 
      myPrefix:id_00073965 myPrefix:id_00073966 
      myPrefix:id_00016990 myPrefix:id_08380001 
      myPrefix:id_00019131 myPrefix:id_03739215 
      myPrefix:id_00019129 myPrefix:id_00034482 
      myPrefix:id_00098617      

      } 

values ?b { myPrefix:id_00083184 myPrefix:id_00083187 
      myPrefix:id_00083189 myPrefix:id_00083182 
      myPrefix:id_09463313 myPrefix:id_00000790 
      myPrefix:id_00073965 myPrefix:id_00073966 
      myPrefix:id_00016990 myPrefix:id_08380001 
      myPrefix:id_00019131 myPrefix:id_03739215 
      myPrefix:id_00019129 myPrefix:id_00034482 
      myPrefix:id_00098617      
      } 
    ?a ?relation ?b . 
} 

Damit bekomme ich, was ich will, das heißt, alle Beziehungen zwischen den Knoten auf meiner (extern) Liste; unter Verwendung von values und Wiederholen der Knoten für ?a und ?b. Aber das Problem ist, meine Knotenliste kann sehr groß sein; manchmal kann es bis zu 1000 Knoten haben und das ist nur ein kleiner Fall; und diese Abfrage dauert zu lange, um ausgeführt zu werden.

Gibt es einen besseren Weg, um das zu tun, was ich brauche? Dies ist der einzige Ansatz, den ich gefunden habe, aber ich spreche nicht so gut mit SPARQL, wie kann ich das richtig machen?

PS: Ich bekomme die Knotenliste extern von einer Abfrage aus einer anderen Datenbank und mit Java konstruiere ich die Abfrage an jeden Knoten in der Liste anhängen.

Das klingt alles sehr nach Höhlenmenschen, aber wie gesagt, ich fange an, SPARQL zu benutzen.

Vielen Dank.

+0

Ich dachte, dass Sie die Leistung der Abfrage verbessern können, da es eher eine sehr einfache Abfrage ist. Wenn du 'n' Knoten hast, ist die Komplexität einer naiven Lösung offensichtlich' O (n²) ' – AKSW

+0

Wie denkst du kann ich die Leistung meiner Abfrage verbessern? Ich meine, das ist meine Frage @AKSW – antorqs

+0

Ehm Entschuldigung, ich meinte "ich glaube nicht". Natürlich, wenn die Beziehung symmetrisch ist, könnten Sie versuchen, sowohl "a r b" als auch "b r a" zu vermeiden, aber das wäre Ihre Aufgabe während der Erstellung der Anfrage. – AKSW

Antwort

0

Was Sie jetzt tun, ist wahrscheinlich der allgemeinste Weg, dies zu tun. B. Jena, können andere Möglichkeiten unterstützen, einen Satz von Anfangsbindungen anzugeben, die funktionell einem Werteblock entsprechen, aber die tatsächliche Abfrage viel kürzer machen könnte. Siehe zum Beispiel my answer bis Saving and reusing the result of a SPARQL query. Die Antwort auf Add text search where clause to SPARQL query hat auch ein Beispiel für anfängliche Bindungen in Jena.