Domanda

Nelle piattaforme GraphDB (Neo4j, OrientDB, FlockDB, HyperGraphDB ...) è possibile definire le relazioni tra i nodi.

Devo definire le relazioni direzionali, in modo tale che la relazione abbia nomi diversi a seconda della sua direzione.

Per esempio:

Parent(A,B) := Sibling(B,A).

Quindi, voglio attraversare o interrogare un grafico usando sia termini che direzioni.

Certo, non voglio definire due relazioni, ma solo una.

A volte voglio persino usare un nome non direttivo, ad esempio:

Call(A,B) := Answer(B,A);
TalkWith(A,B) := Call(A,B) || Call(B,A)

E usa un traversa / query direzionali o indirezionali

Ad esempio, potrei voler chiedere:

Get any X that TalkWith(A,X))

o

Get any X that Call(A,X))

o

Get any X that Answer(A,X))

Quali piattaforme GraphDB esistenti lo supportano?

È stato utile?

Soluzione

In Gremlin (http://gremlin.tinkerpop.com), è possibile creare relazioni astratte/implicite/inferite da ciò che è esplicito nei dati. Pertanto, puoi definire le inferenze in questo modo.

https://github.com/tinkerpop/gremlin/wiki/user-defined-peps

Gremlin lavora su magazzini Tinkergraph, Neo4j, OrientDB, Dex e RDF.

Spero che questo aiuti, Marko.

Altri suggerimenti

Sembra un problema di livello USE, non a livello di database. Stai tentando di mappare le relazioni dirette a un nome amichevole per l'uomo.

Per Neo4j, potresti inserire queste informazioni nella tua relazione personalizzata:

public enum MyRelationshipType implements RelationshipType
{
    CHILD("Parent Of", "Child Of");

    public MyRelationshipType(final String forwardString, final String backwardString)
    {
        this.forwardString = forwardString;
        this.backwardString = backwardString;
    }

    private final String backwardString;

    private final String forwardString;

    public String getDisplayString(final boolean forward)
    {
        if (forward)
        {
            return this.forwardString;
        }
        else
        {
            return this.backwardString;
        }
    }
}

In Infogriglia, abbiamo il concetto di relazioni non indirizzate. Ad esempio, "Hasmet": se la persona A ha incontrato la persona B, necessariamente B ha incontrato anche A e A e B svolgono gli stessi ruoli nella relazione.

Si noti che unidirezionalità va oltre la denominazione, è un concetto semantico fondamentale che può o meno essere compreso da un database o da un linguaggio di modellazione.

Inoltre, in Infogrid potresti definirti alcune specifiche di traversa e alias per quello che vuoi, compresi i traversari di base (vai ai vicini legati da un particolare tipo di relazione) o traversa multi-step (ad esempio vai a zii dalla parte di tua madre) .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top