Ein Wissensgraph kann abgefragt werden, um nach einer Teilmenge der darin enthaltenen Entitäten und Beziehungen zu suchen und um zu ermitteln, wie die verschiedenen Entitäten miteinander verbunden sind. Beispiele:
- Mithilfe eines Wissensgraphen, der die Ausbreitung einer Infektionskrankheit darstellt, können Sie mit Menschen und Tieren arbeiten, die durch eine beliebige Beziehung mit einer bestimmten Einrichtung verknüpft sind.
- Mithilfe eines Wissensgraphen, der eine Lieferkette in der Fertigung darstellt, können Sie mit allen Inhalten arbeiten, die mit einem bestimmten Teil, einschließlich Lieferanten, Liefermethoden, Lagern usw., verknüpft sind.
- Mithilfe eines Wissensgraphen, der eine Organisation darstellt, können Sie mit Geräten eines bestimmten Typs arbeiten und deren Eigenschaften, einschließlich der Namen der zuständigen Mitarbeiter, auflisten.
Indem Sie eine Abfrage bei einem Wissensgraphen durchführen, können Sie die Teilmenge der Entitäten und Beziehungen oder deren Eigenschaften identifizieren. Verwenden Sie die Abfragesprache openCypher zum Schreiben von openCypher-Abfragen, um zugehörige Entitäten und ihre Eigenschaften zu ermitteln, und arbeiten Sie mit diesem eingeschränkten Informationssatz im Wissensgraphen, in einer Karte oder einem Verbindungsdiagramm.
Schreiben einer openCypher-Abfrage
openCypher-Abfragen sind für Graph-Datenbanken das, was SQL-Abfragen für relationale Datenbanken sind. Die Grundstruktur der Abfrage ist so angelegt, dass damit Entitäten gesucht oder abgeglichen und zurückgegeben werden, wobei die zu suchenden Entitäten in Klammern angegeben werden. Mit der Abfrage MATCH (e) RETURN e werden beispielsweise Entitäten eines beliebigen Typs zurückgegeben. Die Anzahl der zurückgegebenen Entitäten wird nur durch die Konfiguration des Wissensgraphen begrenzt. Verwenden Sie zum Einschränken der Anzahl der zurückgegebenen Graph-Elemente einen LIMIT-Ausdruck. Mit der Abfrage MATCH (e) RETURN e LIMIT 5 werden beispielsweise fünf Entitäten eines beliebigen Typs zurückgegeben.
Im Rahmen der Abfrage können anhand von Symbolen, die einen Pfeil bilden, miteinander verbundene Entitäten ermittelt werden. Mit der Abfrage MATCH (e1)-->(e2) RETURN e1,e2 werden beispielsweise Entitätenpaare (e1 und e2) zurückgegeben, wobei zwischen den beiden Entitäten eine beliebige Art von Beziehung besteht und Entität e1 über eine beliebige Verbindung mit Entität e2 verbunden ist. Wenn die Abfrage so geschrieben wird, dass der Pfeil in die andere Richtung zeigt, wird davon ausgegangen, dass die Verbindungen bei der Ursprungsentität e2 beginnen und bei der Zielentität e1 enden: MATCH (e1)<--(e2) RETURN e1,e2. Die Art der Beziehungen zwischen Entitäten wird als Muster bezeichnet.
Im Rahmen der Abfrage können in eckigen Klammern bestimmte zu berücksichtigende Beziehungen ermittelt werden. Mit der Abfrage MATCH (e1)-[]->(e2) RETURN e1,e2 werden beispielsweise Entitätenpaare (e1 und e2) zurückgegeben, wobei die beiden Entitäten über eine beliebige Art von Einzelbeziehung miteinander verbunden sind. Diese Abfrage zeigt eine andere Möglichkeit, die gleichen oben abgebildeten Abfragen darzustellen, und veranschaulicht die bevorzugte Abfragesyntax. Die Abfrage kann so geändert werden, dass das gesamte Tupel zurückgegeben wird, mit dem die Beziehung beschrieben wird, indem die Ursprungsentität e1, die Beziehung r und die Zielentität e2 wie folgt zurückgegeben werden: MATCH (e1)-[r]->(e2) RETURN e1,r,e2. Mit ähnlichen Abfragen (MATCH (e1)-[ ]->( )-[ ]->(e2) RETURN e1,e2 oder MATCH (e1)-[*2]->(e2) RETURN e1,e2) werden Entitätenpaare zurückgegeben, bei denen die Entitäten über zwei Beziehungen in der gleichen Richtung miteinander verbunden sind. Mit Abfragen können auch Muster identifiziert werden, in denen Beziehungen unterschiedliche Richtungen haben, beispielsweise MATCH (e1)-[ ]->(e2)<-[ ]-(e3) RETURN e1,e2,e3.
Die oben angegebenen Beispielabfragen können bei jedem Wissensgraph verwendet werden.
Eine Abfrage kann an einen bestimmten Wissensgraph angepasst werden, indem die Entitätstypen, die Beziehungstypen und die im entsprechenden Datenmodell definierten Eigenschaften referenziert werden. Durch Einbinden des Namens eines bestimmten Entitätstyps in eine Abfrage lassen sich die Graph-Elemente eingrenzen, die berücksichtigt werden. Mit der Abfrage MATCH (e1:Person)-[r]->(e2) RETURN e1,r,e2 werden beispielsweise alle "Person"-Entitäten e1 zurückgegeben, die über eine Beziehung r mit einer anderen Entität e2 verbunden sind, die einen beliebigen Entitätstyp aufweisen kann. Im Vergleich zum vorherigen Beispiel sind Beziehungen, deren Ursprung eine "Pet"-, "Vehicle"- oder "Dokument"-Entität ist, in den Ergebnissen nicht enthalten.
Durch Hinzufügen von Beziehungs- und Entitätstypen zu den anderen Eigenschaften einer Abfrage kann diese so eingeschränkt werden, dass bestimmte Beziehungstypen und bestimmte verbundene Entitäten berücksichtigt werden. Mit der Abfrage MATCH (p:Person)-[v:HasVehicle]->(e) RETURN p,v,e werden beispielsweise alle "Person"-Entitäten p zurückgegeben, die über eine "HasVehicle"-Beziehung v mit einer anderen Entität e beliebigen Typs verbunden sind. Die Variablen p und v werden den "Person-"Entitäten bzw. "HasVehicle"-Beziehungen zugewiesen, sodass mit der Abfrage zugehörige Informationen zurückgegeben werden können. Im Vergleich zum vorherigen Beispiel sind Beziehungen, deren Ziel eine "Pet"- oder "Document"-Entität ist, in den Ergebnissen nicht enthalten. Je nach Datenmodell des Wissensgraphen kann es sich bei der Zielentität e um eine generische "Vehicle"-Entität oder um eine Entität aus einer Reihe spezifischer Entitätstypen wie "Automobile", "Motorcycle", "Boat", "Airplane", "Commercial Vehicle" usw. handeln.
In den Abfrageergebnisse können bestimmte Eigenschaften von Entitäten und Beziehungen enthalten sein. Mit MATCH (p:Person)-[:HasVehicle]->(e) RETURN p,e.make,e.model,e.year wird beispielsweise die weiter oben definierte Abfrage ausgeführt. Anstelle der Zielentität werden als Ergebnisse jedoch die in den verschiedenen Fahrzeugeigenschaften Marke ("make"), Modell ("model") und Baujahr ("year") gespeicherten Werte angezeigt. In diesem Beispiel wurde der in der Abfrage berücksichtigten Beziehung keine Variable zugewiesen, da die Daten der Beziehung in den Abfrageergebnissen nicht enthalten sind oder an anderer Stelle in der Abfrage ausgewertet werden.
Entsprechend können die Entitäten und Beziehungen, die ausgewertet werden, durch Festlegen von Eigenschaften eingeschränkt werden, mit denen die relevanten Entitäten und Beziehungen definiert werden. Die zu berücksichtigenden Eigenschaften werden durch Hinzufügen einer WHERE-Klausel zur Abfrage definiert. Wie bei den oben gezeigten Beispielen müssen Variablen zugewiesen werden, um in der WHERE-Klausel bestimmte Informationen zu Entitäten und Beziehungen zu referenzieren. Im Rahmen der folgenden Abfrage werden beispielsweise nur "Person"-Entitäten mit einem bestimmten "lastName"-Eigenschaftswert ausgewertet. "HasVehicle"-Beziehungen werden nur berücksichtigt, wenn deren "endDate"-Eigenschaft einen NULL-Wert enthält. Und verbundene "Vehicle"-Entitäten werden nur berücksichtigt, wenn die "year"-Eigenschaft einen Wert vor 1980 enthält: MATCH (p:Person)-[hv:HasVehicle]->(v:Vehicle) WHERE p.lastName = 'Doe' and hv.endDate IS NULL and v.year < 1980 RETURN p,p.firstName,v,v.make,v.year.
Anstatt eine Reihe einzelner Entitäten und Beziehungen zurückzugeben, kann Ihre Abfrage die vollständige durch ein Muster dargestellte Verbindung zurückgeben. Weisen Sie dazu das in der MATCH-Anweisung definierte Muster einer Variablen zu, und geben Sie diese Variable zurück. Mit der Abfrage MATCH path = (:Person)-[:HasVehicle]->(:Vehicle) RETURN path beispielsweise wird eine Liste mit Verbindungen für alle Entitäts- und Beziehungskombinationen zurückgegeben, die dem angegebenen Muster entsprechen. Jede Verbindung enthält alle Teile des übereinstimmenden Musters: "Person", "HasVehicle"-Beziehung und "Vehicle". Sie müssen den einzelnen Teilen dieses Musters keine Variablen zuweisen, da diese von der Abfrage nicht zurückgegeben werden.
Verwenden von Datums-/Uhrzeitwerten in einer Abfrage
Wenn Sie einen Wissensgraphen über einen gehosteten Graph Store oder einen NoSQL-Data-Store mit von ArcGIS verwalteten Daten erstellen, müssen die Datums-/Uhrzeitwerte immer in koordinierter Weltzeit (UTC) angegeben werden. Wenn die Datums-/Uhrzeitwerte von einer Abfrage zurückgegeben werden, geschieht dies ebenfalls immer in UTC. Das bedeutet, die in einer Eigenschaft eines Objekts oder einer Beziehung gespeicherten Datums-/Uhrzeitwerte können nicht mit einer bestimmten Zeitzone verknüpft werden. Beim Angeben eines Wertes werden Datums-/Uhrzeitangaben unverändert gespeichert. Entsprechend wird ein in Ortszeit angegebener Wert nicht automatisch vom Wissensgraphen in UTC konvertiert. Sie müssen die Konvertierung selbst vornehmen und den richtigen Wert speichern, um spätere Probleme beim Abfragen des Wissensgraphen zu vermeiden.
Wenn beispielsweise Daten zu einem bestimmten Ereignis erfasst werden, sollte jeder Benutzer, der den Wissensgraphen bearbeitet, mit diesem Ereignis zusammenhängende Uhrzeit-/Datumswerte in der entsprechenden UTC-Zeit angeben. Editoren, die sich in anderen Zeitzonen befinden, sollten nicht den Datums-/Uhrzeitwert in der jeweiligen Ortszeit angeben. Ebenso sollten Abfragen des Wissensgraphen sich auf die dem Ereignis entsprechende UTC-Zeit beziehen und nicht die Ortszeit Ihrer Zeitzone. Auf diese Weise speichern alle Benutzer die richtigen Werte und können unabhängig von ihrem jeweiligen Aufenthaltsort und der Ortszeit auch die richtigen Werte abfragen.
Zum Abfragen eines Wissensgraphen mit den in Datumseigenschaften gespeicherten Werten benötigen Sie das Dienstprogramm datetime(), von dem der angegebene Wert als Datum interpretiert wird. Geben Sie den Wert im Datums-/Uhrzeitformat YYYY-MM-DDThh:mm:ss.sssZ an, um zu zeigen, dass der Datums-/Uhrzeitwert in UTC vorliegt. Verwenden Sie das Datums-/Uhrzeitformat YYYY-MM-DDThh:mm:ss.sss+00:00, um zu zeigen, dass das angegebene Datum eine Ortszeit mit dem entsprechenden Zeitzonenversatz darstellt. Ein vollständiger Datums-/Uhrzeitwert muss im ISO-Format mit einer Zeitzone angegeben werden. Wenn ein Teil des Uhrzeit-/Datumswerts oder die Zeitzone ausgelassen wird, gibt die Abfrage einen Fehler zurück.
Um beispielsweise nach allen nach einem bestimmten Datums-/Uhrzeitwert erworbenen Fahrzeugen zu suchen, geben Sie eine Abfrage wie MATCH path=(:Person)-[hv:HasVehicle]->(:Vehicle) WHERE hv.acquisitionDate > datetime('2014-10-18T12:36-08:00') RETURN path ein. Es werden alle Pfade zurückgegeben, bei denen die HasVehicle-Beziehung über eine acquisitionDate-Eigenschaft mit einem Wert nach 12:36 Uhr Pacific Standard Time am 18. Oktober 2014 verfügt. Pacific Standard Time liegt acht Stunden hinter UTC.
Um nach allen im Jahr 1998 erworbenen Fahrzeugen zu suchen, geben Sie eine Abfrage wie MATCH path=(:Person)-[hv:HasVehicle]->(:Vehicle) WHERE hv.acquisitionDate > datetime('1998-01-01T00:00Z') and hv.acquisitionDate < datetime('1998-12-31T23:59Z') RETURN path ein. Es werden alle Pfade zurückgegeben, bei denen die HasVehicle-Beziehung über eine acquisitionDate-Eigenschaft mit einem Wert zwischen dem 1. Januar und Mitternacht am 31. Dezember UTC im Jahr 1998 verfügt.
Aktuell unterstützt ArcGIS Knowledge keine Abfragen eines Wissensgraphen über ein Zeitintervall oder einen Zeitraum.
Verwenden von räumlichen Operatoren in einer Abfrage
ArcGIS Knowledge unterstützt die Verwendung von räumlichen Operatoren in openCypher-Abfragen mit Punkt-, Multipoint-, Linien- und Polygongeometrie. Dies sind dieselben Geometrietypen, die für die Entitätstypen unterstützt werden, die über einen gehosteten Graph Store oder einen NoSQL-Data-Store mit von ArcGIS verwalteten Daten in einem Wissensgraphen erstellt werden. Wenn der Wissensgraph einen NoSQL-Data-Store mit vom Benutzer verwalteten Daten verwendet, werden möglicherweise andere Geometrietypen unterstützt.
Die folgenden räumlichen Operatoren werden unterstützt:
- ST_Equals: Gibt Entitäten mit gleichen Geometrien zurück. Die Syntax lautet esri.graph.ST_Equals(geometry1, geometry2).
- ST_Intersects: Gibt Entitäten mit sich selbst schneidenden Geometrien zurück. Die Syntax lautet esri.graph.ST_Intersects(geometry1, geometry2).
- ST_Contains: Gibt Entitäten mit in der angegebenen Geometrie enthaltenen Geometrien zurück. Die Syntax lautet esri.graph.ST_Contains(geometry1, geometry2).
Räumliche Operatoren können in die WHERE-Klausel einer Abfrage aufgenommen werden. Die Geometrieparameter können die Geometrie einer Entität referenzieren, oder Sie können eine Geometrie angeben, die eine räumliche Position darstellt. Sie können mit dem Operator esri.graph.ST_WKTToGeometry(string) eine Geometrie aus einer Zeichenfolge erstellen, wobei der Zeichenfolgenparameter ein im WKT-Format (Well-Known Text) angegebenes OGC Simple Feature ist. Beispiel: Um eine Geometrie zu erstellen, die die Koordinaten 117.1964763°W 34.0572046°N darstellt, verwenden Sie den Operator esri.graph.ST_WKTToGeometry("POINT (-117.1964763 34.0572046)"). Eine auf diese Weise erstellte Geometrie kann nur im ersten Geometrie-Argument für die räumlichen Operatoren angegeben werden. Das zweite Geometrie-Argument muss stets die mit einer Entität im Wissensgraphen verknüpfte Geometrie referenzieren.
In den folgenden Beispielen können Entitäten des Typs "Person" über Punkt-Geometrien und Entitäten des Typs "Einrichtung" über Polygon-Geometrien verfügen:
- Von der Abfrage MATCH (p1:Person), (p2:Person) WHERE esri.graph.ST_Equals(p1.shape, p2.shape) RETURN p1, p2 werden die für Personen stehenden Entitäten p1 und p2 mit gleicher Form zurückgegeben. Das bedeutet, beide Personenentitäten verfügen über identische Positionsgeometrien.
- Von der Abfrage MATCH (e:Employee), (f:Facility) WHERE esri.graph.ST_Intersects(e.shape, f.shape) RETURN e, f werden Mitarbeiterentitäten (Employee; e) und Einrichtungsentitäten (Facility; f) zurückgegeben, wobei sich die Geometrien der Mitarbeiter- und Einrichtungsentitäten schneiden.
- Von der Abfrage MATCH (f:Facility) WHERE esri.graph.ST_Contains(esri.graph.ST_WKTToGeometry("POINT (-117.1964763 34.0572046)"), f.shape) RETURN f werden Einrichtungsentitäten (f) zurückgegeben, deren Geometrien den angegebenen Punkt enthalten.
Das räumliche Dienstprogramm ST_GeoDistance mit der Syntax esri.graph.ST_GeoDistance(geometry, geometry) ist ebenso verfügbar. Von diesem Dienstprogramm wird die Entfernung zwischen den beiden Geometrien zurückgegeben. Beispielsweise speichert in der Abfrage MATCH (n), (e) WHERE esri.graph.ST_GeoDistance(n.shape, e.shape) as distance RETURN n, e die Entfernungsvariable in der WHERE-Klausel die geodätische Entfernung, die zwischen den Entitäten n und e berechnet wird.
Weitere Informationen zu openCypher-Abfragen
Weitere Informationen zur openCypher-Abfragesprache finden Sie in einem von openCypher Implementers Group bereitgestellten Dokument. In ArcGIS Knowledge werden nicht alle Aspekte der Abfragesprache openCypher unterstützt. So können Abfragen beispielsweise nicht zum Aktualisieren des Wissensgraphen verwendet werden, sondern nur zum Zurückgeben von Werten.
In ArcGIS Pro erfahren Sie mehr über openCypher, indem Sie sich die Abfragen ansehen, mit denen Daten aus einem Wissensgraphen abgerufen und Histogramme erstellt werden. Klicken Sie im Bereich Durchsuchen und Filtern auf der Registerkarte Histogramm auf die Schaltfläche Einstellungen und dann auf Abfrage an Registerkarte "Abfrage" senden. Die Abfrage, mit der Sie Daten für die aktuellen Histogramme abgerufen haben, wird im Textfeld Abfrage angezeigt.