Skip to content

Commit

Permalink
Blueprints 1.1 Blueberry release commit.
Browse files Browse the repository at this point in the history
  • Loading branch information
okram committed Dec 7, 2011
1 parent 0da0a05 commit 30e1227
Show file tree
Hide file tree
Showing 41 changed files with 2,074 additions and 24 deletions.
6 changes: 4 additions & 2 deletions CHANGELOG.textile
Expand Up @@ -13,13 +13,13 @@ Blueprints: A Property Graph Model Interface

!https://github.com/tinkerpop/blueprints/raw/master/doc/images/blueprints-blueberry.png!

h3. Version 1.1 (Blueberry -- NOT RELEASED YET)
h3. Version 1.1 (Blueberry -- December 7, 2011)

```xml
<dependency>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints-core</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
</dependency>
```

Expand All @@ -34,6 +34,8 @@ h3. Version 1.1 (Blueberry -- NOT RELEASED YET)
* Added @WrappedGraph@ as a template for how to build stackable graph implementations
* Added @SparqlRepositorySailGraph@ to support a @Graph@ representation of any SPARQL endpoint
* Renamed @GraphJSONxxx@ to @GraphSONxxx@ to promote as standardized JSON graph format
* Bumped to support OrientDB 1.0rc7
* Bumped to support Neo4j 1.5

==<hr/>==

Expand Down
4 changes: 2 additions & 2 deletions blueprints-core/pom.xml
Expand Up @@ -6,11 +6,11 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-core</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<packaging>jar</packaging>
<url>http://blueprints.tinkerpop.com</url>
<name>Blueprints-Core</name>
Expand Down
4 changes: 2 additions & 2 deletions blueprints-dex-graph/pom.xml
Expand Up @@ -5,11 +5,11 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-dex-graph</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<packaging>jar</packaging>
<name>Blueprints-DexGraph</name>
<description>Blueprints property graph implementation for the DEX graph database</description>
Expand Down
4 changes: 2 additions & 2 deletions blueprints-graph-jung/pom.xml
Expand Up @@ -5,11 +5,11 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-graph-jung</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<packaging>jar</packaging>
<name>Blueprints-GraphJung</name>
<description>Blueprints property graphs outplementation for the JUNG (Java Universal Network/Graph Framework)
Expand Down
4 changes: 2 additions & 2 deletions blueprints-graph-sail/pom.xml
Expand Up @@ -5,11 +5,11 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-graph-sail</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<packaging>jar</packaging>
<name>Blueprints-GraphSail</name>
<description>Blueprints property graphs outplementation for Sesame RDS Sail</description>
Expand Down
4 changes: 2 additions & 2 deletions blueprints-neo4j-graph/pom.xml
Expand Up @@ -5,11 +5,11 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-neo4j-graph</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<packaging>jar</packaging>
<name>Blueprints-Neo4jGraph</name>
<description>Blueprints property graph implementation for the Neo4j graph database</description>
Expand Down
4 changes: 2 additions & 2 deletions blueprints-neo4jbatch-graph/pom.xml
Expand Up @@ -5,11 +5,11 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-neo4jbatch-graph</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<packaging>jar</packaging>
<name>Blueprints-Neo4jBatchGraph</name>
<description>Blueprints property graph implementation for the Neo4j batch inserter</description>
Expand Down
4 changes: 2 additions & 2 deletions blueprints-orient-graph/pom.xml
Expand Up @@ -5,11 +5,11 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-orient-graph</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<packaging>jar</packaging>
<name>Blueprints-OrientGraph</name>
<description>Blueprints property graph implementation for the OrientDB graph database</description>
Expand Down
4 changes: 2 additions & 2 deletions blueprints-rexster-graph/pom.xml
Expand Up @@ -5,11 +5,11 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-rexster-graph</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<packaging>jar</packaging>
<name>Blueprints-RexsterGraph</name>
<description>Blueprints property graph implementation for Rexster</description>
Expand Down
4 changes: 2 additions & 2 deletions blueprints-sail-graph/pom.xml
Expand Up @@ -5,11 +5,11 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-sail-graph</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<packaging>jar</packaging>
<name>Blueprints-SailGraph</name>
<description>Blueprints property graph implementation for Sesame RDF Sail</description>
Expand Down
4 changes: 2 additions & 2 deletions blueprints-test/pom.xml
Expand Up @@ -5,11 +5,11 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-test</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.1</version>
<packaging>jar</packaging>
<name>Blueprints-Test</name>
<description>Reusable test suites for Blueprints</description>
Expand Down
16 changes: 16 additions & 0 deletions doc/wiki/Acknowledgments.textile
@@ -0,0 +1,16 @@
<img width="100" src="https://github.com/tinkerpop/blueprints/raw/master/doc/images/blueprints-character-2.png"/>

This section provides a list of the people that have contributed in some way to the creation of Blueprints.

# "Marko A. Rodriguez":http://markorodriguez.com -- designed, developed, tested, and documented Blueprints.
# "Luca Garulli":http://orientechnologies.com -- developed the OrientDB implementatio (@OrientGraph@).
# "Joshua Shinavier":http://fortytwo.net -- developed Blueprints Sail (@GraphSail@).
# "Darrick Weibe":http://github.com/pangloss -- tests, bug fixes, and transaction work.
# "Stephen Mallette":http://stephen.genoprime.com -- develops @RexsterGraph@.
# "Sergio Gómez Villamor":http://personals.ac.upc.edu/sgomez -- developed the Dex implementation (@DexGraph@).
# "Pierre De Wilde":http://www.linkedin.com/in/pierredewilde -- designs and tests new features.
# "Ketrina Yim":http://www.ketrinayim.com/ -- designed the Blueprints logo.

Please review Blueprints' "pom.xml":http://github.com/tinkerpop/blueprints/blob/master/pom.xml. Blueprints would not be possible without the work done by others to create these useful packages.

<small>YourKit is kindly supporting open source projects with its full-featured Java Profiler. YourKit, LLC is the creator of innovative and intelligent tools for profiling Java and .NET applications. Take a look at YourKit's leading software products: <a href="http://www.yourkit.com/java/profiler/index.jsp">YourKit Java Profiler</a> and <a href="http://www.yourkit.com/.net/profiler/index.jsp">YourKit .NET Profiler</a>.</small>
93 changes: 93 additions & 0 deletions doc/wiki/Code-Examples.textile
@@ -0,0 +1,93 @@
This section will provide a collection of 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. These code examples can be found in the main Blueprints distribution "at this location":https://github.com/tinkerpop/blueprints/blob/master/blueprints-test/src/test/java/com/tinkerpop/blueprints/pgm/impls/tg/CodeExamples.java.

# "Create a Simple Graph":#create
# "Iterate through the Elements of a Graph":#elements
# "Iterate through the Edges of a Vertex":#edge
# "Use Indices to Get a Vertex by its Property":#index

h2(#create). Create a Simple Graph

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.

```java
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.getOutVertex().getProperty("name") + "--" + e.getLabel() + "-->" + e.getInVertex().getProperty("name"));
```

The @System.out@ after the code executes is:

bc. marko--knows-->peter

h2(#elements). Iterate through the Elements of a Graph

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@.

```java
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:

bc. 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]

h2(#edge). Iterate through the Edges of a Vertex

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.

```java
Graph graph = TinkerGraphFactory.createTinkerGraph();
Vertex a = graph.getVertex("1");
System.out.println("vertex " + a.getId() + " has name " + a.getProperty("name"));
for(Edge e : a.getOutEdges()) {
System.out.println(e);
}
```

The @System.out@ after the code executes is:

bc. vertex 1 has name marko
e[7][1-knows->2]
e[9][1-created->3]
e[8][1-knows->4]

h2(#index). Use Indices to Get a Vertex by its Property

Load the TinkerPop play graph diagrammed in [[Property Graph Model]]. [[TinkerGraph]] implements the @IndexableGraph@ interface. Get the standard vertex index and then get all vertices named @marko@. Given that there is only one, we can simple next the first vertex out of the returned iterable. Print some information about the vertex.

```java
Graph graph = TinkerGraphFactory.createTinkerGraph();
Vertex a = ((IndexableGraph)graph).getIndex(Index.VERTICES, Vertex.class).get("name", "marko").iterator().next();
System.out.println("vertex " + a.getId() + " has age " + a.getProperty("age"));
```

The @System.out@ after the code executes is:

bc. vertex 1 has age 29
18 changes: 18 additions & 0 deletions doc/wiki/Desired-Implementations.textile
@@ -0,0 +1,18 @@
!https://github.com/tinkerpop/blueprints/raw/master/doc/images/blueprints-bob-the-builder.png!

It is a time consuming process to maintain Blueprints implementations as graph database/framework versions and features change. Many developers focusing on a particular implementation is an ideal way of ensuring that Blueprints has wide reach and is always consistent with the latest developments. If there is a graph database/framework that is currently not supported by Blueprints and you are an expert with that system, please contribute an implementation. To get a feel of what is required, see [[Property Graph Model]] and [[Property Graph Model Test Suite]].

Below is a list of desired implementations. This list is not intended to be exhaustive. Please feel free to add to the list.

* "db4o":http://developer.db4o.com
* "Versant Object Database":http://www.versant.com
* "InfiniteGraph":http://www.infinitegraph.com/ (currently in development)
* "InfoGrid":http://infogrid.org/
* "sones":http://www.sones.com/
* "vertexdb":http://www.dekorte.com/projects/opensource/vertexdb/
* "Redis":http://code.google.com/p/redis/ (see "Blueredis":https://github.com/dmitriid/blueredis)
* Sail-based RDF Stores (very easy to do as only a @Sail@ constructor is needed)
** "4Store":http://4store.org/
** "AllegroGraph":http://www.franz.com/agraph/allegrograph/
** "OpenVirtuoso":http://virtuoso.openlinksw.com/
** "OWLim":http://www.ontotext.com/owlim/
67 changes: 67 additions & 0 deletions doc/wiki/Dex-Implementation.textile
@@ -0,0 +1,67 @@
[[http://www.sparsity-technologies.com/images/sparsity_logo_web.png]]

```xml
<dependency>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints-dex-graph</artifactId>
<version>??</version>
</dependency>
```

```java
Graph graph = new DexGraph("/tmp/graph.dex");
```

"DEX":http://www.sparsity-technologies.com/dex is a graph database developed by "Sparsity Technologies":http://www.sparsity-technologies.com/. For a fine summary of the DEX graph database, please review the following "presentations":http://www.sparsity-technologies.com/dex_tutorials. The software can be downloaded from "here":http://www.sparsity-technologies.com/dex_downloads and be used with the default evaluation license (which restricts the amount of information DEX can deal with).

DEX natively supports the property graph data model defined by Blueprints. However, there are a few peculiarities.

# *No user defined element identifiers*: DEX is the gatekeeper and creator of vertex and edge identifiers. Thus, when creating a new vertex or edge instance, the provided object identifier is ignored.
# *Vertices are labeled too*: When adding vertices, the user can set @DEXGraph#LABEL@ to be used as the label of the vertex to be created. Also, the label of a vertex (or even an element) can be retrieved through the @DEXElement#LABEL_PROPERTY@ property.

@DexGraph@ implements @IndexableGraph@. However, the use of indices is limited when working with DEX and is explained as follows:

# There is no support to create indices.
# By default, there is an @AutomaticIndex@ for each existing label which corresponds to the name of the index. Also, each index contains a key for each existing property.

*Memory configuration*

DEX memory is not managed by the JVM heap, so an specific memory configuration must be set for DEX in order to set the maximum amount of memory to be used by a DEX application.

Specifically, users should set @dex.io.cache.maxsize@ as is explained [[here|http://www.sparsity-technologies.com/downloads/javadoc/edu/upc/dama/dex/utils/DEXConfig.html]].

*Managment of @Iterable@ collections*

As before, since DEX resources are not managed by the JVM heap, DEX-based blueprints applications should take into account the management of @Iterable@ collections and explicitly close them in order to free native resources.

For example, if we execute a long traversal like this:

```java
for (final Vertex vertex : graph.getVertices()) {
for (final Edge edge : vertex.getOutEdges()) {
final Vertex vertex2 = edge.getInVertex();
for (final Edge edge2 : vertex2.getOutEdges()) {
...
}
}
}
```

all retrieved collections won't be closed until the graph database is stopped. Of course, keep active this amount of resources will have a negative impact in the performance. To avoid this, we should implement something like this:

```java
DexIterable<Vertex> vv = (DexIterable<Vertex>)graph.getVertices();
for (final Vertex vertex : vv) {
DexIterable<Edge> ee = (DexIterable<Edge>)vertex.getOutEdges();
for (final Edge edge : ee) {
final Vertex vertex2 = edge.getInVertex();
DexIterable<Edge> ee2 = (DexIterable<Edge>)vertex2.getOutEdges();
for (final Edge edge2 : ee2) {
...
}
ee2.close();
}
ee.close();
}
vv.close();
```

0 comments on commit 30e1227

Please sign in to comment.