Nun, der offensichtliche erste Start ist in den Klassen und Eigenschaften, die in den Daten zu suchen.
Hier ist, wie zu sehen, welche Klassen verwendet werden.
SELECT DISTINCT ?class
WHERE {
?s a ?class .
}
LIMIT 25
OFFSET 0
(LIMIT
und OFFSET
gibt es für das Paging Es lohnt sich, diese Gewöhnung vor allem, wenn Sie Ihre Anfrage über das Internet senden ich. ‚ll sie in den anderen Beispielen weglassen)
a
ist eine besondere SPARQL (und Notation3/Turtle) Syntax, um das rdf:type
Prädikat darstellen -. dies verbindet einzelne Instanzen zu owl:Class
/rdfs:Class
Typ s (entspricht ungefähr den Tabellen in SQL RDBMSes).
Zweitens möchten Sie die Eigenschaften betrachten. Sie können dies tun, indem Sie entweder die Klassen verwenden, nach denen Sie gesucht haben, oder einfach nach Eigenschaften suchen. Lassen Sie uns einfach alle Eigenschaften aus dem Laden:
SELECT DISTINCT ?property
WHERE {
?s ?property ?o .
}
Diese alle Eigenschaften erhalten, die Sie wahrscheinlich nicht interessiert sind diese zu einer Liste aller Zeile Spalten in SQL entspricht, aber ohne. irgendeine Gruppierung durch die Tabelle.
Nützlicher sind, um zu sehen, welche Eigenschaften von Instanzen verwendet werden, die eine bestimmte Klasse deklariert:
SELECT DISTINCT ?property
WHERE {
?s a <http://xmlns.com/foaf/0.1/Person>;
?property ?o .
}
Dadurch werden Sie wieder die Eigenschaften auf allen Instanzen gewöhnen, dass die ersten Triple erfüllen - nämlich die haben die rdf:type
von http://xmlns.com/foaf/0.1/Person
.
Denken Sie daran, weil eine rdf: Resource mehrere rdf: type-Eigenschaften haben kann - Klassen, wenn Sie so wollen - und weil das RDF-Datenmodell additiv ist, haben Sie kein Diamantproblem. Der Typ ist nur eine andere Eigenschaft - es ist nur eine nützliche soziale Vereinbarung zu sagen, dass einige Dinge Menschen oder Hunde oder Gene oder Fußballmannschaften sind. Es bedeutet nicht, dass der Datenspeicher Eigenschaften enthalten wird, die normalerweise diesem Typ zugeordnet sind. Der Typ garantiert nichts in Bezug auf die Eigenschaften einer Ressource.
Sie müssen sich mit dem Datenmodell und der Verwendung von SPARQLs UNION- und OPTIONAL-Syntax vertraut machen. Die grobe Zuordnung von rdf: type zu SQL-Tabellen ist genau das - grob.
Sie möchten vielleicht wissen, auf welche Art von Entity die Eigenschaft verweist. Zunächst möchten Sie wahrscheinlich die Eigenschaften von Datentypen kennenlernen - das entspricht Literalen oder Primitiven. Sie wissen, Strings, Integer usw. RDF definiert diese Literale als alle von String erben.Wir können nur jene Eigenschaften herauszufiltern, die Literale mit der SPARQL-Filter-Methode sind isLiteral
:
SELECT DISTINCT ?property
WHERE {
?s a <http://xmlns.com/foaf/0.1/Person>;
?property ?o .
FILTER isLiteral(?o)
}
Wir sind hier nur Objekte in Gang bringen, die zum Gegenstand haben eine wörtliche - eine Zeichenkette, Datum-Zeit, boolean oder einer der anderen XSD-Datentypen.
Aber was ist mit den nicht-literalen Objekten? Betrachten Sie diese sehr einfache Pseudo-Java-Klassendefinition als Analogie:
public class Person {
int age;
Person marriedTo;
}
die obige Abfrage verwenden, würden wir die wörtliche zurückbekommen, das Alter, wenn die Alte Eigenschaft gebunden ist darstellen würde. Aber marriedTo ist kein Primitiv (d. H. Ein Literal in RDF-Termen) - es ist eine Referenz auf ein anderes Objekt - in der RDF/OWL-Terminologie ist das eine Objekteigenschaft. Aber wir wissen nicht, auf welche Art von Objekten sich diese Eigenschaften beziehen (Prädikate). Diese Abfrage wird Ihnen Eigenschaften mit den zugehörigen Typen zurückgeben.
SELECT DISTINCT ?property, ?class
WHERE {
?s a <http://xmlns.com/foaf/0.1/Person>;
?property ?o .
? a ?class .
FILTER(!isLiteral(?o))
}
Das sollte reichen, um sich in einem bestimmten Datensatz zu orientieren. Natürlich würde ich auch empfehlen, dass Sie nur einzelne Ressourcen herausziehen und diese überprüfen. Sie können tun, dass die Abfrage DESCRIBE mit:
DESCRIBE <http://example.org/resource>
Es gibt einige SPARQL Werkzeuge - SNORQL, zum Beispiel -, die Sie tun dies in einem Browser lassen. Die SNORQL-Instanz, mit der ich verlinkt bin, hat eine Beispielabfrage, um die möglichen benannten Graphen zu untersuchen, die ich hier nicht behandelt habe.
Wenn Sie mit SPARQL nicht vertraut sind, ist die beste Ressource, wenn Sie stecken bleiben, die Spezifikation. Es ist eine W3C-Spezifikation, aber eine ziemlich gute (sie haben eine anständige Testsuite erstellt, so dass Sie sehen können, ob Implementierungen es richtig gemacht haben oder nicht) und wenn Sie die komplizierte Sprache überwinden können, ist das ziemlich hilfreich.
flach aus ehrfürchtiger Antwort - dank sehr viel Tom! – significance
Ich weiß, ich sollte nicht einfach posten "Danke!"Nachrichten über SO, aber Sie haben gerade ein SPARQL-Noob ernsthaft ausgeholfen, also:" Danke! ". –