2016-04-19 10 views
1

Ich erstelle derzeit eine Ontologie für ein Projekt, das sich mit Sensordaten beschäftigt. Ich habe erfolgreich ein RDF-Diagramm mit RDFLib in Python erstellt. Und dann speicherte das Diagramm mit Jena TDB-Datenbank. Jetzt möchte ich die Datenbank mit SPARQL abfragen, aber ich weiß ehrlich nicht, wo ich anfangen soll.RDF-Grafik Abfrage mit Präfixnamen mit SPARQL

Zum Beispiel, wenn ich mit bin schon ein wissendes Vokabular lässt Freund eines Freundes sagen (FOAF) dann werde ich einfach eine Abfrage so etwas wie dies ausführen und ich bekommen, was ich brauche:

SELECT ?name 
WHERE { 
    ?person foaf:name ?name . 
} 

Aber da ich schaffe meine RDF mit unterschiedlichen Ontologien (ein Sensor Ontologien) mein Ziel ist es, diese Abfrage auszuführen und alle Daten im Zusammenhang erhalten:

SELECT * {?dev ?lon ?lat} 

wo dev der Gerätename ist, lon ist die Länge wo sich das Gerät befindet und lat ist der Breitengrad. Alle diese Daten werden innerhalb des Graphen bereitgestellt, sind jedoch noch nicht definiert, um abgefragt zu werden.

Um es zusammenzufassen, ich versuche, ein vorangestelltes Namen für Klassen, um herauszufinden, und so weiter, zum Beispiel kann die Klasse Gerät durch (dev, Gerät ...)

Kann die Zuordnung Etiketten in RDFLib vertreten sein die Lösung oder muss ich ein Vokabular für die Abfrage entwickeln?

+2

Im Allgemeinen müssen Sie den Datensatz verstehen, den Sie abfragen. Es entspricht einer Ontologie, verwenden Sie einfach Prädikate und Klassen aus dieser Ontologie in Ihre Abfragen. Angenommen, es gibt ein Prädikat, um den Helligkeitswert mit dem URI 'http: // something.org/sensor/hasLightnessValue' zu ​​erhalten, können Sie den Helligkeitswert für Ihr Gerät mit einem URI' http: // something abrufen. org/device/myDevice' as ' Die Präfixe" value "dienen nur dazu, die Abfrage für Menschen lesbarer zu machen. –

+1

Sie brauchen wirklich nichts über die Ontologie zu wissen, um den Datensatz zu erforschen und zu verstehen. Verwenden Sie SPARQL, wenn Sie nur '' s? P? O' Abfragen mit einem 'LIMIT' durchführen, um herauszufinden, welche Daten existieren und wie die Eigenschaften, Klassen usw. definiert und verwendet werden. – scotthenninger

Antwort

1

RDF-Tripel sollen Daten mit einer Subjekt-, Objekt- und Prädikatstruktur darstellen. Zum Beispiel kann die folgende ist ein RDF triple:

<http://example.org/FalaG> foaf:name "FalaG"^^xsd:string 

... wo foaf:name ist ein vorangestelltes qname, die <http://xmlns.com/foaf/0.1/name> erweitert.

SPARQL ist im Grunde genommen dasselbe wie das obige Tripel (dies ist Turtle Text Serialisierung), außer dass Sie Variablen mit dem Präfix ? einführen können. SPARQL findet dann Übereinstimmungen in den Daten und bindet die Variablen für jede Übereinstimmung.

Der Name der Variablen hat keine andere Bedeutung als der Name einer Variablen. So folgt das würde die oben dreifach, unter anderem finden, die passen:

SELECT ?p 
WHERE { 
    ?p foaf:name ?o 
} 

Hinweis ich gezielt in Unsinn Variablennamen gesetzt haben zu umreißen, dass es keine inhärente Bedeutung der Variablennamen ist.

Um die URIs zu finden, können Sie mit SPARQL herausfinden, welche Werte im Repository gefunden werden. Aufbauend auf der vorherige Abfrage, können Sie, was andere Informationen im Repository für FalaG mit dem folgenden:

SELECT ?person ?p ?o 
WHERE { 
    ?person foaf:name "FalaG"^^xsd:string . 
    ?person ?p ?o 
} 

zu entdecken URIs für andere Eigenschaften, etc., verwenden Sie die folgenden Schritte aus:

SELECT ?s ?p ?o 
WHERE { 
    ?s ?p ?o 
} LIMIT 

Der LIMIT ist hier wichtig, weil jede dreifache Muster mit drei Variablen alle Tripel anfordert, die wahrscheinlich Timeout oder Absturz des Servers. Aber indem Sie das Limit festlegen, können Sie herausfinden, wie die Daten modelliert werden, und dann Werte in ?s, '? P and? O` usw. eingeben, um bestimmte Teile der Daten genauer zu betrachten.

Und ja, es gibt viele Quellen, um mehr über RDF und SPARQL zu erfahren.

+0

Vielen Dank für Ihre Antwort – raeX