Bewährte Methoden in Neptune für die Verwendung von SPARQL - Amazon Neptune

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Bewährte Methoden in Neptune für die Verwendung von SPARQL

Befolgen Sie diese bewährten Methoden bei der Verwendung der SPARQL-Abfragesprache mit Neptune. Informationen zur Verwendung von SPARQL in Neptune finden Sie unter Zugriff auf den Neptun-Graphen mit SPARQL.

Standardmäßige Abfrage aller benannten Graphen

Amazon Neptune ordnet jedem Triple einen benannten Graphen zu. Der Standard-Graph ist definiert als die Vereinigung aller benannten Graphen definiert.

Wenn Sie eine SPARQL-Anfrage absenden, ohne ausdrücklich einen Graphen über das GRAPH-Schlüsselwort oder Konstrukte wie FROM NAMED anzugeben, berücksichtigt Neptune stets alle Triples in Ihrer DB-Instance. Die folgende Abfrage gibt beispielsweise alle Triples von einem Neptune-SPARQL-Endpunkt zurück:

SELECT * WHERE { ?s ?p ?o }

Triples, die in mehr als einem Graphen vorhanden sind, werden nur einmal zurückgegeben.

Weitere Informationen über die Standard-Graph-Spezifikation finden Sie im RDF-Dataset-Abschnitt der Query Language SPARQL 1.1-Spezifikation.

Angeben eines benannten Graphen für Load

Amazon Neptune ordnet jedem Triple einen benannten Graphen zu. Wenn Sie beim Laden, Einfügen oder Aktualisieren von Triples keinen benannten Graphen angeben, verwendet Neptune den benannten Fallback-Graphen, http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph, der durch die URI definiert ist.

Wenn Sie den Neptune-Bulk-Loader verwenden, können Sie den benannten Graphen für alle Triples (oder Quads mit leerer vierter Position) angeben. Dazu verwenden Sie den parserConfiguration: namedGraphUri-Parameter. Weitere Informationen zur Load-Befehlssyntax des Neptune-Bulk-Loaders finden Sie unter Neptune-Loader-Befehl.

Auswählen zwischen FILTER, FILTER... IN und VALUES in Ihren Abfragen

Es gibt drei grundlegende Möglichkeiten zum Einfügen von Werten in SPARQL-Abfragen:   FILTER,   FILTER...IN   und   VALUES.

Angenommen, Sie möchten die Freunde mehrerer Personen in einer Abfrage nachschlagen. Bei Wahl von FILTER könnten Sie Ihre Abfrage wie folgt strukturieren:

PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. FILTER (?s = ex:person1 || ?s = ex:person2)}

Dadurch werden alle Triples in dem Graphen zurückgegeben, bei denen ?s an ex:person1 oder ex:person2 gebunden ist oder bei denen ein ausgehendes Edge mit der Bezeichnung foaf:knows vorhanden ist.

Sie können auch eine Abfrage mit FILTER...IN erstellen, bei der gleichwertige Ergebnisse zurückgegeben werden:

PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. FILTER (?s IN (ex:person1, ex:person2))}

Sie können auch eine Abfrage mit VALUES erstellen, die in diesem Fall auch gleichwertige Ergebnisse zurückgibt:

PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. VALUES ?s {ex:person1 ex:person2}}

Obwohl diese Abfragen in vielen Fällen semantisch gleichwertig sind, gibt es einige Fälle, in denen sich die beiden FILTER-Varianten von der VALUES-Variante unterscheiden:

  • Der erste Fall tritt ein, wenn Sie doppelte Werte einfügen, wie z. B., wenn Sie dieselbe Person zweimal einfügen. In diesem Fall schließt die Abfrage VALUES die Duplikate in Ihr Ergebnis ein. Sie können solche Duplikate explizit eliminieren, indem Sie einen DISTINCT-Parameter zur SELECT-Klausel hinzufügen. Unter bestimmten Umständen kann es jedoch sinnvoll sein, wenn Abfrageergebnisse beim Einschluss redundanter Werte Duplikate enthalten.

    Die FILTER...IN- und FILTER-Versionen extrahieren den Wert jedoch nur einmal, wenn derselbe Wert mehrmals vorkommt.

  • Der zweite Fall bezieht sich auf die Tatsache, dass VALUES immer eine genaue Übereinstimmung vornimmt, während FILTER in einigen Fällen eine Typenhochstufung anwenden oder eine Fuzzyübereinstimmung vornehmen kann.

    Wenn Sie beispielsweise ein Literal wie z. B. "2.0"^^xsd:float in Ihre Werte-Klausel einschließen, entspricht eine VALUES-Abfrage genau diesem Literal, einschließlich Literalwert und Datentyp.

    Im Gegensatz dazu produziert FILTER für diese numerischen Literale eine Fuzzyübereinstimmung. Die Übereinstimmungen könnten Literale mit dem gleichen Wert, aber mit unterschiedlichen numerischen Datentypen, wie z. B. xsd:double, enthalten.

    Anmerkung

    Das Verhalten von FILTER und VALUES unterscheidet sich bei nicht der Auflistung von Zeichenfolgenliteralen oder von URIs.

Die Unterschiede zwischen FILTER und VALUES können sich auf die Optimierung und die resultierende Abfrageauswertungsstrategie auswirken. Außer wenn Ihr Anwendungsfall eine Fuzzyübereinstimmung erfordert, raten wir zur Verwendung von VALUES, da damit eine Suche nach besonderen Fällen im Zusammenhang mit der Umwandlung von Datentypen vermieden wird. Dies hat zur Folge, dass VALUES häufig eine effizientere Abfrage produziert, die schneller und kostengünstiger ausgeführt wird.