-
Notifications
You must be signed in to change notification settings - Fork 274
Code Examples
Attention: this Wiki hosts an outdated version of the TinkerPop framework and Gremlin language documentation.
Please visit the Apache TinkerPop website and latest documentation.
This section will provide a collection of basic code examples that work with the Blueprints graph API. The in-memory TinkerGraph database will be used throughout the examples. Please feel free to alter the graph constructor to work with different graph databases.
Create a graph. Add two vertices. Set the name
property of each vertex. Create an knows
edge between the two vertices. Print the components of the graph.
import com.tinkerpop.blueprints.impls.tg.TinkerGraph;
import com.tinkerpop.blueprints.Graph;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.Edge;
import com.tinkerpop.blueprints.Direction;
Graph graph = new TinkerGraph();
Vertex a = graph.addVertex(null);
Vertex b = graph.addVertex(null);
a.setProperty("name", "marko");
b.setProperty("name", "peter");
Edge e = graph.addEdge(null, a, b, "knows");
System.out.println(e.getVertex(Direction.OUT).getProperty("name") + "--" + e.getLabel() + "-->" + e.getVertex(Direction.IN).getProperty("name"));
The System.out
after the code executes is:
marko--knows-->peter
The Blueprints GraphFactory
provides a common way to instantiate different Graph
implementations, thereby abstracting away the specifics of Graph
instance construction. The benefit of this approach is that the construction of a Graph
instance can become a configuration as opposed to explicitly specifying a Graph
implementation in the code itself.
To demonstrate this concept, consider the explicit approach to instantiating a TinkerGraph
:
Graph g = new TinkerGraph()
Compare the above to the approach using GraphFactory
:
Graph g = GraphFactory.open("graph.properties")
where the graph.properties
file contains:
blueprints.graph=com.tinkerpop.blueprints.impls.tg.TinkerGraph
Both approaches create an in-memory TinkerGraph
, but the GraphFactory
approach is a bit more resilient to change, as converting from TinkerGraph
to a different Graph
instance, such as Neo4jGraph
, is accomplished by simply changing the configuration file:
blueprints.graph=com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph
blueprints.neo4j.directory=/tmp/neo4j
blueprints.neo4j.conf.neostore.nodestore.db.mapped_memory=285M
blueprints.neo4j.conf.neostore.relationshipstore.db.mapped_memory=285M
The structure of the properties file is dependent on the implementation itself with the only common and required key of blueprints.graph
, which must be the full class name of the Graph
implementation.
It is also possible to construct a Graph
from GraphFactory
with a Map
or dynamically constructed Configuration
object as follows:
Map<String,Object> conf = new HashMap<String,Object>();
conf.put("blueprints.graph", "com.tinkerpop.blueprints.impls.tg.TinkerGraph");
Graph g = GraphFactory.open(conf);
Configuration c = new BaseConfiguration();
c.setProperty("blueprints.graph", "com.tinkerpop.blueprints.impls.tg.TinkerGraph");
Graph g = GraphFactory.open(c);
Not all Graph
implementations will support GraphFactory
. Those interested in learning which ones support it or those implementing the Graph
API can read more about this requirement here.
Load the TinkerPop play graph diagrammed in Property Graph Model. Iterate through all the vertices and print them to System.out
. Iterate through all the edges and print them to System.out
.
public void testIteratingGraph() {
Graph graph = TinkerGraphFactory.createTinkerGraph();
System.out.println("Vertices of " + graph);
for (Vertex vertex : graph.getVertices()) {
System.out.println(vertex);
}
System.out.println("Edges of " + graph);
for (Edge edge : graph.getEdges()) {
System.out.println(edge);
}
}
The System.out
after the code executes is:
Vertices of tinkergraph[vertices:6 edges:6]
v[3]
v[2]
v[1]
v[6]
v[5]
v[4]
Edges of tinkergraph[vertices:6 edges:6]
e[10][4-created->5]
e[7][1-knows->2]
e[9][1-created->3]
e[8][1-knows->4]
e[11][4-created->3]
e[12][6-created->3]
Load the TinkerPop play graph diagrammed in Property Graph Model. Get vertex 1
from the graph by its id
. Print some information about the vertex. Iterate through the outgoing edges of the vertex and print the edges.
Graph graph = TinkerGraphFactory.createTinkerGraph();
Vertex a = graph.getVertex("1");
System.out.println("vertex " + a.getId() + " has name " + a.getProperty("name"));
for(Edge e : a.getEdges(OUT)) {
System.out.println(e);
}
The System.out
after the code executes is:
vertex 1 has name marko
e[7][1-knows->2]
e[9][1-created->3]
e[8][1-knows->4]