2016-08-15 4 views
-1

Ich habe eine Art interessantes Problem mit SPARQL-Abfrage. Ich frage nach einem Triple und ich habe mehrere Match - vielleicht 2. Aber ich brauche den Code, um nur einen zu wählen. Es ist absolut egal, welches. Zum Beispiel: Ich suche nach einem Buch für 5 Jahre alt und es findet 2 Bücher in der Datenbank, aber ich muss nur eine in Variable gespeichert haben (egal welche). Ist das in SPARQL überhaupt möglich? Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Vielen Dank im Voraus für Ihre Zeit! Die Änderung in der Eingabedatenbank ist das letzte, was ich tun möchte.SPARQL: Wählen Sie eine Dreiergruppe aus mehreren Übereinstimmungen?

Beispiel:

<Book rdf:ID = 0001> 
<Book.Title>Title1</Book.Title> 
<Book.For>5 years old</Book.For> 
<Book.Date>2000</Book.Date> 
</Book> 

<Book rdf:ID = 0002> 
<Book.Title>Title2</Book.Title> 
<Book.For>5 years old</Book.For> 
<Book.Date>2005</Book.Date> 
</Book> 
Construct {?NewDatabase Example_of_book_for_5_years_old ?Title .} 
Where {?Example Book.For "5 years old" . 
     ?Example Book.Title ?Title . 
     }; 

Beide Bücher entsprechen den Where-Klausel, aber ich brauche nur eine in der neuen Datenbank ausgegeben werden. Es spielt keine Rolle, welcher.

+2

Ohne Daten (minimales Fragment) UND SPARQL Abfrage zu sehen, niemand wird Ihnen helfen! Bitte fügen Sie diese Informationen zu Ihrer Frage hinzu. – AKSW

+0

Und was ist "10 rdfs"? – AKSW

+0

Wenn Sie nur das erste Ergebnis einer Abfrage wünschen, können Sie LIMIT 1 zu Ihrer Abfrage hinzufügen. – kba

Antwort

0

Ohne Berücksichtigung der scheinbaren Fehler in Ihrer Beispielabfrage ist die Lösung SELECT anstelle von CONSTRUCT zu verwenden. Mit der ersten Option können Sie die Anzahl der Ergebnisse begrenzen.

Wenn Sie völlig ein Triple als Ergebnis benötigen, können Sie begrenzte SELECT als Unterabfrage

Um nur ein triple aus einer CONSTRUCT Abfrage verwenden Sie die LIMIT Klausel mit verwenden können, wie SELECT

Construct { ?Example <urn:Book:Title> ?Title } 
Where { 
    ?Example <urn:Book:For> "5 years old" . 
    ?Example <urn:Book:Title> ?Title . 
} 
limit 1 

Dies wird das erste Ergebnis auswählen (Reihenfolge unbestimmt).


Und nein, die Beurteilung durch die SPARQL Grammar, ist es nicht möglich, die LIMIT Klausel mit SPARQL Updates zu verwenden.

+0

@ThomaszPluskiewicz Ihre Antwort ist richtig, wenn wir die bisherigen Informationen verwenden. Als Nebenbemerkung: Ich würde den Ausdruck "die Lösung ist SELECT statt CONSTRUCT" neu formulieren. Es ist mehr die Aufgabe, SELECT innerhalb des Abfrage-Musters der CONSTRUCT-Abfrage zu verwenden. – AKSW

+0

Hallo, vielen Dank für Ihre Antwort. Ist es möglich, diese Unterabfrage mit select * auch für ** DELETE/INSERT/WHERE ** query zu verwenden? In der Tat muss ich altes Beispiel löschen und stattdessen ein neues setzen. –

+0

@AKSW Eigentlich habe ich mich geirrt. 'LIMIT' ist in der Tat erlaubt mit' CONSTRUCT'. Antwort aktualisieren –

Verwandte Themen