2012-04-09 14 views
7

Meine Frage an ähnlich ist, was auf diesen Thread Is it possible to combine those 2 SPARQL INSERT into one?Multiple SPARQL „INSERT WHERE“ Abfragen in einer einzigen Anfrage

Ich möchte mehrere INSERT haben gefragt wurde, wo Anweisungen in einer Abfrage, sondern auch für verschiedene Themen. Ich möchte einen bestimmten Wert ("testValueN") testen und wenn vorhanden ein neues Triple für dieses Thema einfügen.

Ein Beispiel dafür wäre,

PREFIX Sensor: <http://example.com/Equipment.owl#> 
{ 
    INSERT { 
     ?subject1 Sensor:test2 'newValue1' . 
      } 
    WHERE { 
     ?subject1 Sensor:test1 'testValue1' . 
      } 
}; 
{ 
    INSERT { 
     ?subject2 Sensor:test2 'newValue2' . 
      } 
    WHERE { 
     ?subject2 Sensor:test1 'testValue2' . 
      } 
}; 

Ich weiß, dass die obige Abfrage falsch ist. Ich würde gerne wissen, ob in SPARQL etwas Ähnliches möglich ist.

Antwort

8

Ja, das ist möglich. In der Tat ist Ihr Beispiel fast völlig in Ordnung, verliert nur die Klammern um jeden Einsatz:

PREFIX Sensor: <http://example.com/Equipment.owl#> 
INSERT { 
    ?subject1 Sensor:test2 'newValue1' . 
} 
WHERE { 
    ?subject1 Sensor:test1 'testValue1' . 
}; 
INSERT { 
    ?subject2 Sensor:test2 'newValue2' . 
} 
WHERE { 
    ?subject2 Sensor:test1 'testValue2' . 
} 

eine gültige SPARQL-Update-Sequenz ist.

+0

Es hat funktioniert! Danke Jeen Ich lief ein Massenupdate von 100, dann 1000 Tripel mit der obigen Abfrage. Die Updates werden sehr langsam, da ich die Anzahl der Tripel ständig erhöhen werde. Für 100 INSERT WHERE Updates dauert es 4,2 Sekunden und 1000 INSERT WHERE Updates dauert 40,7 Sekunden Ist dies die richtige und effizienteste Art, Bulk INSERT WHERE Updates zu tun? – Nikhil

+0

Ich denke nicht, ich denke, es ist viel effizienter, dies in einem einzigen Update zu tun, als eine Sequenz mit einem Update für jeden einzelnen Wert. Aber das ist eine separate Frage und erfordert ein bisschen mehr Details darüber, wie Ihre Daten aussehen und was genau, Sie versuchen zu erreichen :) –

+0

Ich versuche, Sensor Lesungen in einem RDF-Speicher, der SPARQL 1.1-konform ist, in großen Mengen einzufügen. Ich bekomme einen Strom von Lesungen und die entsprechende Sensor ID. Ich muss nach der Sensor-ID suchen, um den URI für diesen Sensor zu erhalten, und falls vorhanden, die Sensormesswerte eingeben. Also muss ich zuerst einen Lookup und dann einen Insert machen. Vorab-Abruf-Sensor-URIs sind möglicherweise nicht gut, da die Aktualisierungen von verschiedenen Maschinen stammen und die Anzahl der Sensoren auf eine Million und mehr skaliert werden soll. Bitte lassen Sie mich wissen, ob ich auf dem richtigen Weg bin. – Nikhil

0

Ich möchte mehrere INSERT WHERE -Anweisungen in einer Abfrage haben, aber für verschiedene Themen. Ich würde gerne einen bestimmten Wert testen ("testValueN") und würde gerne ein neues Triple für dieses Thema einfügen.

Sie können diese Werten tun die oldValue/newValue Paare zu spezifizieren, die Sie wollen, und es erfordert nur einen einzigen Einsatz. Es skaliert auch besser zu neuen Paaren, da Sie der Abfrage nur eine Zeile hinzufügen müssen.

PREFIX Sensor: <http://example.com/Equipment.owl#> 
INSERT { 
    ?subject Sensor:test2 ?newValue 
} 
WHERE { 
    values (?oldValue ?newValue) { 
     ('testValue1' 'newValue1') 
     ('testValue2' 'newValue2') 
    } 
    ?subject Sensor:test1 ?oldValue 
} 
Verwandte Themen