Skip to content
Browse files

master branch is now 2.4.0-SNAPSHOT.

  • Loading branch information...
1 parent 3c5eeef commit 6f14fbca47f4fba2e737da0386f7e70b1d9c822e @okram okram committed Mar 28, 2013
Showing with 11 additions and 4,666 deletions.
  1. +1 −1 blueprints-core/pom.xml
  2. +1 −1 blueprints-dex-graph/pom.xml
  3. +1 −1 blueprints-graph-jung/pom.xml
  4. +1 −1 blueprints-graph-sail/pom.xml
  5. +1 −1 blueprints-neo4j-graph/pom.xml
  6. +1 −1 blueprints-orient-graph/pom.xml
  7. +1 −1 blueprints-rexster-graph/pom.xml
  8. +1 −1 blueprints-sail-graph/pom.xml
  9. +1 −1 blueprints-test/pom.xml
  10. +0 −78 doc/Acknowledgments.html
  11. +0 −133 doc/Batch-Implementation.html
  12. +0 −132 doc/Code-Examples.html
  13. +0 −83 doc/Desired-Implementations.html
  14. +0 −145 doc/Dex-Implementation.html
  15. +0 −102 doc/Event-Implementation.html
  16. +0 −171 doc/GML-Reader-and-Writer-Library.html
  17. +0 −95 doc/Graph-Indices.html
  18. +0 −84 doc/Graph-Morphisms.html
  19. +0 −96 doc/Graph-Transactions.html
  20. +0 −224 doc/GraphML-Reader-and-Writer-Library.html
  21. +0 −350 doc/GraphSON-Reader-and-Writer-Library.html
  22. +0 −155 doc/Home.html
  23. +0 −104 doc/Id-Implementation.html
  24. +0 −76 doc/Implementations.html
  25. +0 −69 doc/InfiniteGraph-Implementation.html
  26. +0 −113 doc/JUNG-Ouplementation.html
  27. +0 −110 doc/Neo4j-Implementation.html
  28. +0 −111 doc/Neo4jBatch-Implementation.html
  29. +0 −77 doc/Neo4jHa-Implementation.html
  30. +0 −110 doc/OrientDB-Implementation.html
  31. +0 −72 doc/Ouplementations.html
  32. +0 −93 doc/Partition-Implementation.html
  33. +0 −80 doc/Property-Graph-Implementations.html
  34. +0 −160 doc/Property-Graph-Model-Test-Suite.html
  35. +0 −91 doc/Property-Graph-Model.html
  36. +0 −201 doc/PropertyGraphSail-Ouplementation.html
  37. +0 −78 doc/ReadOnly-Implementation.html
  38. +0 −410 doc/Release-Notes.html
  39. +0 −97 doc/Rexster-Implementation.html
  40. +0 −146 doc/Sail-Implementation.html
  41. +0 −234 doc/Sail-Ouplementation.html
  42. +0 −76 doc/The-Benefits-of-Blueprints.html
  43. +0 −109 doc/The-Major-Differences-Between-Blueprints-1.x-and-2.x.html
  44. +0 −105 doc/TinkerGraph.html
  45. +0 −85 doc/Vertex-Query.html
  46. +2 −2 pom.xml
View
2 blueprints-core/pom.xml
@@ -6,7 +6,7 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
- <version>2.3.0</version>
+ <version>2.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-core</artifactId>
View
2 blueprints-dex-graph/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
- <version>2.3.0</version>
+ <version>2.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-dex-graph</artifactId>
View
2 blueprints-graph-jung/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
- <version>2.3.0</version>
+ <version>2.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-graph-jung</artifactId>
View
2 blueprints-graph-sail/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
- <version>2.3.0</version>
+ <version>2.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-graph-sail</artifactId>
View
2 blueprints-neo4j-graph/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
- <version>2.3.0</version>
+ <version>2.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-neo4j-graph</artifactId>
View
2 blueprints-orient-graph/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
- <version>2.3.0</version>
+ <version>2.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-orient-graph</artifactId>
View
2 blueprints-rexster-graph/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
- <version>2.3.0</version>
+ <version>2.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-rexster-graph</artifactId>
View
2 blueprints-sail-graph/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
- <version>2.3.0</version>
+ <version>2.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-sail-graph</artifactId>
View
2 blueprints-test/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.tinkerpop.blueprints</groupId>
<artifactId>blueprints</artifactId>
- <version>2.3.0</version>
+ <version>2.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>blueprints-test</artifactId>
View
78 doc/Acknowledgments.html
@@ -1,78 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta http-equiv="Content-type" content="text/html;charset=utf-8">
- <link rel="stylesheet" type="text/css" href=" css/gollum.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/editor.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/dialog.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/template.css" media="all">
-
- <!--[if IE 7]>
- <link rel="stylesheet" type="text/css" href=" css/ie7.css" media="all">
- <![endif]-->
-
- <script type="text/javascript" src=" css/jquery.js"></script>
- <script type="text/javascript" src=" css/gollum.js"></script>
- <script type="text/javascript" src=" css/gollum.dialog.js"></script>
- <script type="text/javascript" src=" css/gollum.placeholder.js"></script>
-
- <script type="text/javascript"
- src=" css/editor/gollum.editor.js"></script>
- <title>Acknowledgments</title>
-</head>
-<body>
-
-<div id="wiki-wrapper" class="page">
-<div id="head"><h3><a href="../../index.html">TinkerPop 2.3.0</a> - <a href="Home.html">Blueprints</a></h3>
- <h1>Acknowledgments</h1>
- <ul class="actions">
- <li class="minibutton"><a href="/pages"
- class="action-all-pages">All Pages</a></li>
- <li class="minibutton" class="jaws">
- <a href="#" id="minibutton-new-page">New Page</a></li>
- <li class="minibutton"><a href="/edit/Acknowledgments"
- class="action-edit-page">Edit Page</a></li>
- <li class="minibutton"><a href="/history/Acknowledgments"
- class="action-page-history">Page History</a></li>
- </ul>
- <div id="searchbar">
- <form action="/search" method="get" id="search-form">
- <div id="searchbar-fauxtext">
- <input type="text" name="q" id="search-query" value="Search&hellip;" autocomplete="off">
- <a href="#" id="search-submit" title="Search this wiki">
- <span>Search</span>
- </a>
- </div>
- </form>
- </div></div>
-<div id="wiki-content">
- <div class="wrap">
- <div id="wiki-body" class="gollum-textile-content">
- <div id="template">
- <p><img width="100" src=" images/blueprints-character-2.png" /></p>
-<p>This section provides a list of the people that have contributed in some way to the creation of Blueprints.</p>
-<ol><li><a href="http://markorodriguez.com">Marko A. Rodriguez</a> &#x2014; designed, developed, tested, and documented Blueprints.</li>
- <li><a href="http://orientechnologies.com">Luca Garulli</a> &#x2014; developed the OrientDB implementation (<code>OrientGraph</code>).</li>
- <li><a href="http://fortytwo.net">Joshua Shinavier</a> &#x2014; developed Blueprints Sail (<code>GraphSail</code>).</li>
- <li><a href="http://github.com/pangloss">Darrick Weibe</a> &#x2014; tests, bug fixes, and transaction work.</li>
- <li><a href="http://stephen.genoprime.com">Stephen Mallette</a> &#x2014; develops <code>RexsterGraph</code>, the IO packages (i.e. GraphSON) and other components.</li>
- <li><a href="http://github.com/sgomezvillamor">Sergio G&#xF3;mez Villamor</a> &#x2014; developed the Dex implementation (<code>DexGraph</code>).</li>
- <li><a href="http://www.linkedin.com/in/pierredewilde">Pierre De Wilde</a> &#x2014; designs and tests new features.</li>
- <li><a href="http://www.ketrinayim.com/">Ketrina Yim</a> &#x2014; designed the Blueprints logo.</li>
- <li><a href="http://www.matthiasb.com/">Matthias Broecheler</a> &#x2014; designed many of the TinkerPop 2 <span class="caps">API</span> changes.</li>
-</ol><p>Please review Blueprints&#x2019; <a href="http://github.com/tinkerpop/blueprints/blob/master/pom.xml">pom.xml</a>. Blueprints would not be possible without the work done by others to create these useful packages.</p>
- </div>
- </div>
- </div>
-
-</div>
-<div id="footer">
- <p id="last-edit">Last edited by <b>joshsh</b>, 2013-03-20 04:57:12</p>
-</div>
-</div>
-
-<script type="text/javascript" src=" css/MathJax/MathJax.js"></script>
-
-
-</body>
-</html>
View
133 doc/Batch-Implementation.html
@@ -1,133 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta http-equiv="Content-type" content="text/html;charset=utf-8">
- <link rel="stylesheet" type="text/css" href=" css/gollum.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/editor.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/dialog.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/template.css" media="all">
-
- <!--[if IE 7]>
- <link rel="stylesheet" type="text/css" href=" css/ie7.css" media="all">
- <![endif]-->
-
- <script type="text/javascript" src=" css/jquery.js"></script>
- <script type="text/javascript" src=" css/gollum.js"></script>
- <script type="text/javascript" src=" css/gollum.dialog.js"></script>
- <script type="text/javascript" src=" css/gollum.placeholder.js"></script>
-
- <script type="text/javascript"
- src=" css/editor/gollum.editor.js"></script>
- <title>Batch Implementation</title>
-</head>
-<body>
-
-<div id="wiki-wrapper" class="page">
-<div id="head"><h3><a href="../../index.html">TinkerPop 2.3.0</a> - <a href="Home.html">Blueprints</a></h3>
- <h1>Batch Implementation</h1>
- <ul class="actions">
- <li class="minibutton"><a href="/pages"
- class="action-all-pages">All Pages</a></li>
- <li class="minibutton" class="jaws">
- <a href="#" id="minibutton-new-page">New Page</a></li>
- <li class="minibutton"><a href="/edit/Batch-Implementation"
- class="action-edit-page">Edit Page</a></li>
- <li class="minibutton"><a href="/history/Batch-Implementation"
- class="action-page-history">Page History</a></li>
- </ul>
- <div id="searchbar">
- <form action="/search" method="get" id="search-form">
- <div id="searchbar-fauxtext">
- <input type="text" name="q" id="search-query" value="Search&hellip;" autocomplete="off">
- <a href="#" id="search-submit" title="Search this wiki">
- <span>Search</span>
- </a>
- </div>
- </form>
- </div></div>
-<div id="wiki-content">
- <div class="wrap">
- <div id="wiki-body" class="gollum-textile-content">
- <div id="template">
- <p><img src="http://www.stacymakescents.com/wp-content/uploads/haystack-clip-art.gif" width="250px" /></p>
-<pre><code>&lt;dependency&gt;
- &lt;groupId&gt;com.tinkerpop.blueprints&lt;/groupId&gt;
- &lt;artifactId&gt;blueprints-core&lt;/artifactId&gt;
- &lt;version&gt;??&lt;/version&gt;
-&lt;/dependency&gt;</code></pre>
-<p><code>BatchGraph</code> wraps any <code>TransactionalGraph</code> to enable batch loading of a large number of edges and vertices by chunking the entire load into smaller batches and maintaining a memory-efficient vertex cache so that intermediate transactional states can be flushed after each chunk is loaded to release memory.</p>
-<p><code>BatchGraph</code> is <strong><span class="caps">ONLY</span></strong> meant for loading data and does not support any retrieval or removal operations. That is, BatchGraph only supports the following methods:</p>
-<ul><li><code>addVertex()</code> for adding vertices</li>
- <li><code>addEdge()</code> for adding edges</li>
- <li><code>getVertex()</code> to be used when adding edges</li>
- <li>Property getter, setter and removal methods for vertices and edges as well as <code>getId()</code></li>
-</ul><p>An important limitation of <code>BatchGraph</code> is that edge properties can only be set immediately after the edge has been added. If other vertices or edges have been created in the meantime, setting, getting or removing properties will throw exceptions. This is done to avoid caching of edges which would require memory.</p>
-<p><code>BatchGraph</code> wraps <code>TransactionalGraph</code>. To wrap arbitrary graphs, use <code>BatchGraph.wrap()</code> which will additionally wrap non-transactional graphs.</p>
-<p><code>BatchGraph</code> can also automatically set the provided element ids as properties on the respective element. Use <code>setVertexIdKey()</code> and <code>setEdgeIdKey()</code> to set the keys for the vertex and edge properties, respectively. This is useful when the graph implementation ignores supplied ids and allows to make the loaded graph compatible for later wrapping with <code>IdGraph</code> (see <a class="internal present" href="Id-Implementation.html">Id Implementation</a>) when setting the vertex and edge Id keys to <code>IdGraph.ID</code>.</p>
-<p>As an example, suppose we are loading a large number of edges defined by a String array with four entries called <em>quads</em>:</p>
-<ol><li>The out vertex id</li>
- <li>The in vertex id</li>
- <li>The label of the edge</li>
- <li>A string annotation for the edge, i.e. an edge property</li>
-</ol><p>Assuming this array is very large, loading all these edges in a single transaction is likely to exhaust main memory. Furthermore, one would have to rely on the database indexes to retrieve previously created vertices for a given id. <code>BatchGraph</code> addresses both of these issues.</p>
-<pre><code>BatchGraph bgraph = new BatchGraph(graph, VertexIDType.STRING, 1000);
-for (String[] quad : quads) {
- Vertex[] vertices = new Vertex[2];
- for (int i=0;i&lt;2;i++) {
- vertices[i] = bgraph.getVertex(quad[i]);
- if (vertices[i]==null) vertices[i]=bgraph.addVertex(quad[i]);
- }
- Edge edge = bgraph.addEdge(null,vertices[0],vertices[1],quad[2]);
- edge.setProperty("annotation",quad[3]);
-}</code></pre>
-<p>First, a <code>BatchGraph</code> <em>bgraph</em> is created wrapping an existing <em>graph</em> and setting the id type to <code>VertexIDType.STRING</code> and the batch size to 1000. <code>BatchGraph</code> maintains a mapping from the external vertex ids, in our example the first two entries in the String array describing the edge, to the internal vertex ids assigned by the wrapped graph database. Since this mapping is maintained in memory, it is potentially much faster than the database index. By specifying the <code>VertexIDType</code>, <code>BatchGraph</code> chooses the most memory-efficient mapping data structure and applies compression algorithms if possible. There are four different <code>VertexIDType</code>:</p>
-<ul><li><em><span class="caps">OBJECT</span></em> : For arbitrary object vertex ids. This is the most generic and least space efficient type.</li>
- <li><em><span class="caps">STRING</span></em> : For string vertex ids. Attempts to apply string compression and prefixing strategies to reduce the memory footprint.</li>
- <li><em><span class="caps">URL</span></em> : For string vertex ids that parse as URLs. Applies <span class="caps">URL</span> specific compression schemes that are more efficient than generic string compression.</li>
- <li><em><span class="caps">NUMBER</span></em> : For numeric vertex ids. Uses primitive data structures that requires significantly less memory.</li>
-</ul><p>The last argument in the constructor is the batch size, that is, the number of vertices and edges to load before committing a transaction and starting a new one.</p>
-<p>The <code>for</code> loop then iterates over all the quad String arrays and creates an edge for each by first retrieving or creating the vertex end points and then creating the edge. Note, that we set the edge property immediately after creating the edge. This is required because edges are only kept in memory until the next edge is created for efficiency reasons.</p>
-<h2>Presorting Data</h2>
-<p>In the previous example, there is a big speed advantage if the next edge loaded has the same out vertex as the previous edge. Loading all of the out going edges for a particular vertex at once before moving on to the next out vertex makes optimal use of the cache, whereas loading edges in a random order causes many more writes to and flushes of the cache.</p>
-<p>To take advantage of this, the data can be presorted quickly and efficiently using the linux built-in <a href="http://en.wikipedia.org/wiki/Sort_(Unix)">sort</a> command. Let&#x2019;s say that edges are read from a text file <code>edges.txt</code> with one edge per line:</p>
-<pre><code>4 created 5 weight=1.0
-1 knows 4 weight=1.0
-1 knows 2 weight=0.5
-4 created 3 weight=0.4
-6 created 3 weight=0.2
-1 created 3 weight=0.4</code></pre>
-<p>This file can be sorted before loading with</p>
-<pre><code>vadasg$ sort -S4G -o edges_sorted.txt edges.txt</code></pre>
-<p>The <code>-S4G</code> flag gives sort 4Gb of memory to work with. If the file fits into memory the sort will be very fast; otherwise <code>sort</code> will use scratch space on disk to perform the operation. Although this is not as fast, the linux <code>sort</code> command is highly optimized and is not limited in the size of files it can process. If the input data contain unwanted duplicate lines, using the <code>-u</code> flag will cause <code>sort</code> to remove these duplicate lines during processing.</p>
-<p>The sorted file <code>edges_sorted.txt</code> now has the edges ordered by out vertex:</p>
-<pre><code>1 created 3 weight=0.4
-1 knows 2 weight=0.5
-1 knows 4 weight=1.0
-4 created 3 weight=0.4
-4 created 5 weight=1.0
-6 created 3 weight=0.2</code></pre>
-<p>This way, any given out vertex is kept in the cache for all of its out going edges. The time needed to sort the data is nearly always much less than the loading time saved by maximizing use of the cache, especially for large input data.</p>
-<h2>Incremental Loading</h2>
-<p>The above describes how <code>BatchGraph</code> can be used to load data into a graph under the assumption that the wrapped graph is initially empty. <code>BatchGraph</code> can also be used to incrementally batch load edges and vertices into a graph with existing data. In this case, vertices may already exist for given ids.</p>
-<p>If the wrapped graph does not ignore ids, then enabling incremental batch loading is as simple as calling <code>setLoadingFromScratch(false)</code>, i.e. to disable the assumption that data is loaded into an empty graph. If the wrapped graph does ignore ids, then one has to tell <code>BatchGraph</code> how to find existing vertices for a given id by specifying the vertex id key using <code>setVertexIdKey(uid)</code> where <em>uid</em> is some string for the property key. Also, uid must be <a href="../../blueprints/2.3.0/Graph-Indices.html">key indexed</a> for this to work.</p>
-<pre><code>graph.createKeyIndex("uid",Vertex.class);
-BatchGraph bgraph = new BatchGraph(graph, VertexIDType.STRING, 10000);
-bgraph.setVertexIdKey("uid");
-bgraph.setLoadingFromScratch(false);
-//Load data as shown above</code></pre>
-<p>Note, that incremental batch loading is more expensive than loading from scratch because <code>BatchGraph</code> has to call on the wrapped graph to determine whether a vertex exists for a given id.</p>
- </div>
- </div>
- </div>
-
-</div>
-<div id="footer">
- <p id="last-edit">Last edited by <b>joshsh</b>, 2013-03-20 04:57:12</p>
-</div>
-</div>
-
-<script type="text/javascript" src=" css/MathJax/MathJax.js"></script>
-
-
-</body>
-</html>
View
132 doc/Code-Examples.html
@@ -1,132 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta http-equiv="Content-type" content="text/html;charset=utf-8">
- <link rel="stylesheet" type="text/css" href=" css/gollum.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/editor.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/dialog.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/template.css" media="all">
-
- <!--[if IE 7]>
- <link rel="stylesheet" type="text/css" href=" css/ie7.css" media="all">
- <![endif]-->
-
- <script type="text/javascript" src=" css/jquery.js"></script>
- <script type="text/javascript" src=" css/gollum.js"></script>
- <script type="text/javascript" src=" css/gollum.dialog.js"></script>
- <script type="text/javascript" src=" css/gollum.placeholder.js"></script>
-
- <script type="text/javascript"
- src=" css/editor/gollum.editor.js"></script>
- <title>Code Examples</title>
-</head>
-<body>
-
-<div id="wiki-wrapper" class="page">
-<div id="head"><h3><a href="../../index.html">TinkerPop 2.3.0</a> - <a href="Home.html">Blueprints</a></h3>
- <h1>Code Examples</h1>
- <ul class="actions">
- <li class="minibutton"><a href="/pages"
- class="action-all-pages">All Pages</a></li>
- <li class="minibutton" class="jaws">
- <a href="#" id="minibutton-new-page">New Page</a></li>
- <li class="minibutton"><a href="/edit/Code-Examples"
- class="action-edit-page">Edit Page</a></li>
- <li class="minibutton"><a href="/history/Code-Examples"
- class="action-page-history">Page History</a></li>
- </ul>
- <div id="searchbar">
- <form action="/search" method="get" id="search-form">
- <div id="searchbar-fauxtext">
- <input type="text" name="q" id="search-query" value="Search&hellip;" autocomplete="off">
- <a href="#" id="search-submit" title="Search this wiki">
- <span>Search</span>
- </a>
- </div>
- </form>
- </div></div>
-<div id="wiki-content">
- <div class="wrap">
- <div id="wiki-body" class="gollum-textile-content">
- <div id="template">
- <p>This section will provide a collection of basic code examples that work with the Blueprints graph <span class="caps">API</span>. The in-memory <a class="internal present" href="TinkerGraph.html">TinkerGraph</a> database will be used throughout the examples. Please feel free to alter the graph constructor to work with different graph databases.</p>
-<ol><li><a href="#create">Create a Simple Graph</a></li>
- <li><a href="#elements">Iterate through the Elements of a Graph</a></li>
- <li><a href="#edge">Iterate through the Edges of a Vertex</a></li>
-</ol><p><a name="create" id="create"></a></p>
-<h2>Create a Simple Graph</h2>
-<p>Create a graph. Add two vertices. Set the <code>name</code> property of each vertex. Create an <code>knows</code> edge between the two vertices. Print the components of the graph.</p>
-<pre><code>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() + "--&gt;" + e.getVertex(Direction.IN).getProperty("name"));</code></pre>
-<p>The <code>System.out</code> after the code executes is:</p>
-<pre><code>marko--knows--&gt;peter</code></pre>
-<p><a name="elements" id="elements"></a></p>
-<h2>Iterate through the Elements of a Graph</h2>
-<p>Load the TinkerPop play graph diagrammed in <a class="internal present" href="Property-Graph-Model.html">Property Graph Model</a>. Iterate through all the vertices and print them to <code>System.out</code>. Iterate through all the edges and print them to <code>System.out</code>.</p>
-<pre><code>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);
- }
-}</code></pre>
-<p>The <code>System.out</code> after the code executes is:</p>
-<pre><code>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-&gt;5]
-e[7][1-knows-&gt;2]
-e[9][1-created-&gt;3]
-e[8][1-knows-&gt;4]
-e[11][4-created-&gt;3]
-e[12][6-created-&gt;3]</code></pre>
-<p><a name="edge" id="edge"></a></p>
-<h2>Iterate through the Edges of a Vertex</h2>
-<p>Load the TinkerPop play graph diagrammed in <a class="internal present" href="Property-Graph-Model.html">Property Graph Model</a>. Get vertex <code>1</code> from the graph by its <code>id</code>. Print some information about the vertex. Iterate through the outgoing edges of the vertex and print the edges.</p>
-<pre><code>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);
-}</code></pre>
-<p>The <code>System.out</code> after the code executes is:</p>
-<pre><code>vertex 1 has name marko
-e[7][1-knows-&gt;2]
-e[9][1-created-&gt;3]
-e[8][1-knows-&gt;4]</code></pre>
-<p><a name="index" id="index"></a></p>
- </div>
- </div>
- </div>
-
-</div>
-<div id="footer">
- <p id="last-edit">Last edited by <b>joshsh</b>, 2013-03-20 04:57:12</p>
-</div>
-</div>
-
-<script type="text/javascript" src=" css/MathJax/MathJax.js"></script>
-
-
-</body>
-</html>
View
83 doc/Desired-Implementations.html
@@ -1,83 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta http-equiv="Content-type" content="text/html;charset=utf-8">
- <link rel="stylesheet" type="text/css" href=" css/gollum.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/editor.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/dialog.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/template.css" media="all">
-
- <!--[if IE 7]>
- <link rel="stylesheet" type="text/css" href=" css/ie7.css" media="all">
- <![endif]-->
-
- <script type="text/javascript" src=" css/jquery.js"></script>
- <script type="text/javascript" src=" css/gollum.js"></script>
- <script type="text/javascript" src=" css/gollum.dialog.js"></script>
- <script type="text/javascript" src=" css/gollum.placeholder.js"></script>
-
- <script type="text/javascript"
- src=" css/editor/gollum.editor.js"></script>
- <title>Desired Implementations</title>
-</head>
-<body>
-
-<div id="wiki-wrapper" class="page">
-<div id="head"><h3><a href="../../index.html">TinkerPop 2.3.0</a> - <a href="Home.html">Blueprints</a></h3>
- <h1>Desired Implementations</h1>
- <ul class="actions">
- <li class="minibutton"><a href="/pages"
- class="action-all-pages">All Pages</a></li>
- <li class="minibutton" class="jaws">
- <a href="#" id="minibutton-new-page">New Page</a></li>
- <li class="minibutton"><a href="/edit/Desired-Implementations"
- class="action-edit-page">Edit Page</a></li>
- <li class="minibutton"><a href="/history/Desired-Implementations"
- class="action-page-history">Page History</a></li>
- </ul>
- <div id="searchbar">
- <form action="/search" method="get" id="search-form">
- <div id="searchbar-fauxtext">
- <input type="text" name="q" id="search-query" value="Search&hellip;" autocomplete="off">
- <a href="#" id="search-submit" title="Search this wiki">
- <span>Search</span>
- </a>
- </div>
- </form>
- </div></div>
-<div id="wiki-content">
- <div class="wrap">
- <div id="wiki-body" class="gollum-textile-content">
- <div id="template">
- <p><img src=" images/blueprints-bob-the-builder.png" alt="" /></p>
-<p>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 <a class="internal present" href="Property-Graph-Model.html">Property Graph Model</a> and <a class="internal present" href="Property-Graph-Model-Test-Suite.html">Property Graph Model Test Suite</a>.</p>
-<p>Below is a list of desired implementations. This list is not intended to be exhaustive. Please feel free to add to the list.</p>
-<ul><li><a href="http://developer.db4o.com">db4o</a></li>
- <li><a href="http://www.versant.com">Versant Object Database</a></li>
- <li><a href="http://infogrid.org/">InfoGrid</a></li>
- <li><a href="http://www.dekorte.com/projects/opensource/vertexdb/">vertexdb</a></li>
- <li><a href="http://code.google.com/p/redis/">Redis</a> &#x2013; see <a href="https://github.com/dmitriid/blueredis">Blueredis</a></li>
- <li><a href="http://lucene.apache.org/core/">Lucene</a> &#x2013; see <a href="https://github.com/karussell/lumeo">Lumeo</a></li>
- <li><a href="http://www.windowsazure.com/en-us/home/features/storage/">Azure Table Storage</a></li>
- <li>Sail-based <span class="caps">RDF</span> Stores (very easy to do as only a <code>Sail</code> constructor is needed)
- <ul><li><a href="http://4store.org/">4Store</a></li>
- <li><a href="http://www.franz.com/agraph/allegrograph/">AllegroGraph</a></li>
- <li><a href="http://virtuoso.openlinksw.com/">OpenVirtuoso</a></li>
- <li><a href="http://www.ontotext.com/owlim/">OWLim</a></li>
- </ul></li>
-</ul>
- </div>
- </div>
- </div>
-
-</div>
-<div id="footer">
- <p id="last-edit">Last edited by <b>joshsh</b>, 2013-03-20 04:57:12</p>
-</div>
-</div>
-
-<script type="text/javascript" src=" css/MathJax/MathJax.js"></script>
-
-
-</body>
-</html>
View
145 doc/Dex-Implementation.html
@@ -1,145 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta http-equiv="Content-type" content="text/html;charset=utf-8">
- <link rel="stylesheet" type="text/css" href=" css/gollum.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/editor.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/dialog.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/template.css" media="all">
-
- <!--[if IE 7]>
- <link rel="stylesheet" type="text/css" href=" css/ie7.css" media="all">
- <![endif]-->
-
- <script type="text/javascript" src=" css/jquery.js"></script>
- <script type="text/javascript" src=" css/gollum.js"></script>
- <script type="text/javascript" src=" css/gollum.dialog.js"></script>
- <script type="text/javascript" src=" css/gollum.placeholder.js"></script>
-
- <script type="text/javascript"
- src=" css/editor/gollum.editor.js"></script>
- <title>Dex Implementation</title>
-</head>
-<body>
-
-<div id="wiki-wrapper" class="page">
-<div id="head"><h3><a href="../../index.html">TinkerPop 2.3.0</a> - <a href="Home.html">Blueprints</a></h3>
- <h1>Dex Implementation</h1>
- <ul class="actions">
- <li class="minibutton"><a href="/pages"
- class="action-all-pages">All Pages</a></li>
- <li class="minibutton" class="jaws">
- <a href="#" id="minibutton-new-page">New Page</a></li>
- <li class="minibutton"><a href="/edit/Dex-Implementation"
- class="action-edit-page">Edit Page</a></li>
- <li class="minibutton"><a href="/history/Dex-Implementation"
- class="action-page-history">Page History</a></li>
- </ul>
- <div id="searchbar">
- <form action="/search" method="get" id="search-form">
- <div id="searchbar-fauxtext">
- <input type="text" name="q" id="search-query" value="Search&hellip;" autocomplete="off">
- <a href="#" id="search-submit" title="Search this wiki">
- <span>Search</span>
- </a>
- </div>
- </form>
- </div></div>
-<div id="wiki-content">
- <div class="wrap">
- <div id="wiki-body" class="gollum-textile-content">
- <div id="template">
- <p><img src="http://www.sparsity-technologies.com/images/sparsity_logo_web.png" /></p>
-<pre><code>&lt;dependency&gt;
- &lt;groupId&gt;com.tinkerpop.blueprints&lt;/groupId&gt;
- &lt;artifactId&gt;blueprints-dex-graph&lt;/artifactId&gt;
- &lt;version&gt;??&lt;/version&gt;
-&lt;/dependency&gt;</code></pre>
-<pre><code>Graph graph = new DexGraph("/tmp/graph.dex");</code></pre>
-<p><a href="http://www.sparsity-technologies.com/dex">Dex</a> is a graph database developed by <a href="http://www.sparsity-technologies.com/">Sparsity Technologies</a>. For a fine summary of the Dex graph database, please review the following <a href="http://www.sparsity-technologies.com/dex_tutorials">presentations</a>. The software can be downloaded from <a href="http://www.sparsity-technologies.com/dex_downloads">here</a> and be used with the default evaluation license (which restricts the amount of information Dex can deal with).</p>
-<p>Note that while Dex does implement <code>TransactionalGraph</code> it does not conform to its semantics. Transactions in <code>DexGraph</code> translate to the Dex concept of a session and aid with the release of resources used by the graph when the session is complete.</p>
-<h2>Vertex label</h2>
-<p>As edges, Dex vertices have a label too. Thus, when adding a vertex to the database, its label can be set as follows:</p>
-<pre><code>((DexGraph)graph).label.set("people");
-Vertex v = graph.addVertex(null)
-assertTrue(v.getProperty(StringFactory.LABEL).equals("people"));</code></pre>
-<p>The <code>DexGraph#label</code> property is also relevant for other methods. Go to the javadoc of each of the following methods to see how:</p>
-<ul><li><code>DexGraph#addVertex</code></li>
- <li><code>DexGraph#createKeyIndex(String, Class&lt;T&gt;)</code></li>
- <li><code>DexGraph#getEdges(String, Object)</code></li>
- <li><code>DexGraph#getVertices(String, Object)</code></li>
-</ul><h2>Memory Configuration</h2>
-<p>Dex memory is not managed by the <span class="caps">JVM</span> 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.</p>
-<p>Specifically, users should set <code>dex.io.cache.maxsize</code> as is explained <a href="http://www.sparsity-technologies.com/downloads/javadoc-java/com/sparsity/dex/gdb/DexConfig.html">here</a>.</p>
-<h2>Managment of <code>Iterable</code> collections</h2>
-<p>As before, since Dex resources are not managed by the <span class="caps">JVM</span> heap, Dex-based blueprints applications should take into account the management of <code>Iterable</code> collections and explicitly close them in order to free native resources.</p>
-<p>For example, if we execute a long traversal like this:</p>
-<pre><code>for (final Vertex vertex : graph.getVertices()) {
- for (final Edge edge : vertex.getOutEdges()) {
- final Vertex vertex2 = edge.getInVertex();
- for (final Edge edge2 : vertex2.getOutEdges()) {
- ...
- }
- }
-}</code></pre>
-<p>all retrieved collections won&#x2019;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.</p>
-<p>To avoid this, all retrieved collections from methods in the Dex implementation implement <code>CloseableIterable</code>. Thus, we could implement the previous traversal as follows:</p>
-<pre><code>CloseableIterable&lt;Vertex&gt; vv = (CloseableIterable&lt;Vertex&gt;)graph.getVertices();
-for (final Vertex vertex : vv) {
- CloseableIterable&lt;Edge&gt; ee = (CloseableIterable&lt;Edge&gt;)vertex.getOutEdges();
- for (final Edge edge : ee) {
- final Vertex vertex2 = edge.getInVertex();
- CloseableIterable&lt;Edge&gt; ee2 = (CloseableIterable&lt;Edge&gt;)vertex2.getOutEdges();
- for (final Edge edge2 : ee2) {
- ...
- }
- ee2.close();
- }
- ee.close();
-}
-vv.close();</code></pre>
-<h2>DexGraph Feature List</h2>
-<pre><code>supportsDuplicateEdges = true;
-supportsSelfLoops = true;
-isPersistent = true;
-isRDFModel = false;
-supportsVertexIteration = true;
-supportsEdgeIteration = true;
-supportsVertexIndex = false;
-supportsEdgeIndex = false;
-ignoresSuppliedIds = true;
-supportsTransactions = false;
-supportsIndices = false;
-
-supportsSerializableObjectProperty = false;
-supportsBooleanProperty = true;
-supportsDoubleProperty = true;
-supportsFloatProperty = true;
-supportsIntegerProperty = true;
-supportsPrimitiveArrayProperty = false;
-supportsUniformListProperty = false;
-supportsMixedListProperty = false;
-supportsLongProperty = true;
-supportsMapProperty = false;
-supportsStringProperty = true;
-
-isWrapper = false;
-supportsKeyIndices = true;
-supportsVertexKeyIndex = true;
-supportsEdgeKeyIndex = true;
-supportsThreadedTransactions = false;</code></pre>
- </div>
- </div>
- </div>
-
-</div>
-<div id="footer">
- <p id="last-edit">Last edited by <b>joshsh</b>, 2013-03-20 04:57:12</p>
-</div>
-</div>
-
-<script type="text/javascript" src=" css/MathJax/MathJax.js"></script>
-
-
-</body>
-</html>
View
102 doc/Event-Implementation.html
@@ -1,102 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta http-equiv="Content-type" content="text/html;charset=utf-8">
- <link rel="stylesheet" type="text/css" href=" css/gollum.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/editor.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/dialog.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/template.css" media="all">
-
- <!--[if IE 7]>
- <link rel="stylesheet" type="text/css" href=" css/ie7.css" media="all">
- <![endif]-->
-
- <script type="text/javascript" src=" css/jquery.js"></script>
- <script type="text/javascript" src=" css/gollum.js"></script>
- <script type="text/javascript" src=" css/gollum.dialog.js"></script>
- <script type="text/javascript" src=" css/gollum.placeholder.js"></script>
-
- <script type="text/javascript"
- src=" css/editor/gollum.editor.js"></script>
- <title>Event Implementation</title>
-</head>
-<body>
-
-<div id="wiki-wrapper" class="page">
-<div id="head"><h3><a href="../../index.html">TinkerPop 2.3.0</a> - <a href="Home.html">Blueprints</a></h3>
- <h1>Event Implementation</h1>
- <ul class="actions">
- <li class="minibutton"><a href="/pages"
- class="action-all-pages">All Pages</a></li>
- <li class="minibutton" class="jaws">
- <a href="#" id="minibutton-new-page">New Page</a></li>
- <li class="minibutton"><a href="/edit/Event-Implementation"
- class="action-edit-page">Edit Page</a></li>
- <li class="minibutton"><a href="/history/Event-Implementation"
- class="action-page-history">Page History</a></li>
- </ul>
- <div id="searchbar">
- <form action="/search" method="get" id="search-form">
- <div id="searchbar-fauxtext">
- <input type="text" name="q" id="search-query" value="Search&hellip;" autocomplete="off">
- <a href="#" id="search-submit" title="Search this wiki">
- <span>Search</span>
- </a>
- </div>
- </form>
- </div></div>
-<div id="wiki-content">
- <div class="wrap">
- <div id="wiki-body" class="gollum-textile-content">
- <div id="template">
- <pre><code>&lt;dependency&gt;
- &lt;groupId&gt;com.tinkerpop.blueprints&lt;/groupId&gt;
- &lt;artifactId&gt;blueprints-core&lt;/artifactId&gt;
- &lt;version&gt;??&lt;/version&gt;
-&lt;/dependency&gt;</code></pre>
-<p><code>EventGraph</code> and <code>EventIndexableGraph</code> wrap any <code>Graph</code> or <code>IndexableGraph</code>, respectively. The purpose of an <code>EventGraph</code> is to raise events to one or more <code>GraphChangedListener</code> as changes to the underlying <code>Graph</code> occur. The obvious limitation is that events will only be raised to listeners if the changes to the <code>Graph</code> occur within the same process.</p>
-<p><code>EventTransactionalGraph</code> and <code>EventTransactionalIndexableGraph</code> wrap any <code>TransactionalGraph</code>. These wrappers behave in the same fashion as the aforementioned <code>EventGraph</code> and <code>EventIndexableGraph</code>, but respect the concept of transactions, such that the events that are triggered during a transaction are queued until the transaction is successfully committed. Once committed, the events will fire in the order that they were queued. If the transaction is rolled back the event queue is reset.</p>
-<p>The following events are raised:</p>
-<ul><li>New vertex</li>
- <li>New edge</li>
- <li>Vertex property changed</li>
- <li>Edge property changed</li>
- <li>Vertex property removed</li>
- <li>Edge property removed</li>
- <li>Vertex removed</li>
- <li>Edge removed</li>
-</ul><p>To start processing events from a <code>Graph</code> first implement the <code>GraphChangedListener</code> interface. An example of this implementation is the <code>ConsoleGraphChangedListener</code> which writes output to the console for each event.</p>
-<p>To add a listener to the <code>EventGraph</code>:</p>
-<pre><code>EventGraph graph = new EventGraph(TinkerGraphFactory.createTinkerGraph());
-graph.addListener(new ConsoleGraphChangedListener(graph));
-
-Vertex v = graph.addVertex(100);
-v.setProperty("name", "noname");
-
-for (Edge edge : graph.getEdges()) {
- edge.removeProperty("weight");
-}</code></pre>
-<p>The following output would appear in the console:</p>
-<pre><code>Vertex [v[100]] added to graph [eventgraph[tinkergraph[vertices:6 edges:6]]]
-Vertex [v[4]] property [name] set to value of [noname] in graph [eventgraph[tinkergraph[vertices:6 edges:6]]]
-Edge [e[10][4-created-&gt;5]] property [weight] with value of [1.0] removed in graph [eventgraph[tinkergraph[vertices:6 edges:6]]]
-Edge [e[7][1-knows-&gt;2]] property [weight] with value of [0.5] removed in graph [eventgraph[tinkergraph[vertices:6 edges:6]]]
-Edge [e[9][1-created-&gt;3]] property [weight] with value of [0.4] removed in graph [eventgraph[tinkergraph[vertices:6 edges:6]]]
-Edge [e[8][1-knows-&gt;4]] property [weight] with value of [1.0] removed in graph [eventgraph[tinkergraph[vertices:6 edges:6]]]
-Edge [e[11][4-created-&gt;3]] property [weight] with value of [0.4] removed in graph [eventgraph[tinkergraph[vertices:6 edges:6]]]
-Edge [e[12][6-created-&gt;3]] property [weight] with value of [0.2] removed in graph [eventgraph[tinkergraph[vertices:6 edges:6]]]</code></pre>
- </div>
- </div>
- </div>
-
-</div>
-<div id="footer">
- <p id="last-edit">Last edited by <b>joshsh</b>, 2013-03-20 04:57:12</p>
-</div>
-</div>
-
-<script type="text/javascript" src=" css/MathJax/MathJax.js"></script>
-
-
-</body>
-</html>
View
171 doc/GML-Reader-and-Writer-Library.html
@@ -1,171 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta http-equiv="Content-type" content="text/html;charset=utf-8">
- <link rel="stylesheet" type="text/css" href=" css/gollum.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/editor.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/dialog.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/template.css" media="all">
-
- <!--[if IE 7]>
- <link rel="stylesheet" type="text/css" href=" css/ie7.css" media="all">
- <![endif]-->
-
- <script type="text/javascript" src=" css/jquery.js"></script>
- <script type="text/javascript" src=" css/gollum.js"></script>
- <script type="text/javascript" src=" css/gollum.dialog.js"></script>
- <script type="text/javascript" src=" css/gollum.placeholder.js"></script>
-
- <script type="text/javascript"
- src=" css/editor/gollum.editor.js"></script>
- <title>GML Reader and Writer Library</title>
-</head>
-<body>
-
-<div id="wiki-wrapper" class="page">
-<div id="head"><h3><a href="../../index.html">TinkerPop 2.3.0</a> - <a href="Home.html">Blueprints</a></h3>
- <h1>GML Reader and Writer Library</h1>
- <ul class="actions">
- <li class="minibutton"><a href="/pages"
- class="action-all-pages">All Pages</a></li>
- <li class="minibutton" class="jaws">
- <a href="#" id="minibutton-new-page">New Page</a></li>
- <li class="minibutton"><a href="/edit/GML-Reader-and-Writer-Library"
- class="action-edit-page">Edit Page</a></li>
- <li class="minibutton"><a href="/history/GML-Reader-and-Writer-Library"
- class="action-page-history">Page History</a></li>
- </ul>
- <div id="searchbar">
- <form action="/search" method="get" id="search-form">
- <div id="searchbar-fauxtext">
- <input type="text" name="q" id="search-query" value="Search&hellip;" autocomplete="off">
- <a href="#" id="search-submit" title="Search this wiki">
- <span>Search</span>
- </a>
- </div>
- </form>
- </div></div>
-<div id="wiki-content">
- <div class="wrap">
- <div id="wiki-body" class="gollum-textile-content">
- <div id="template">
- <pre><code>&lt;dependency&gt;
- &lt;groupId&gt;com.tinkerpop.blueprints&lt;/groupId&gt;
- &lt;artifactId&gt;blueprints-core&lt;/artifactId&gt;
- &lt;version&gt;??&lt;/version&gt;
-&lt;/dependency&gt;</code></pre>
-<p>The <a href="http://www.fim.uni-passau.de/en/fim/faculty/chairs/theoretische-informatik/projects.html"><span class="caps">GML</span></a> reader and writer package allows an entire graph to be streamed to and from <span class="caps">GML</span> (Graph Modelling Language).</p>
-<p><img src=" images/graph-example-1.jpg" alt="" /></p>
-<p>The following example shows the format of the graph diagram above in <span class="caps">GML</span>:</p>
-<pre><code>graph [
- node [
- id 1
- blueprintsId "3"
- name "lop"
- lang "java"
- ]
- node [
- id 2
- blueprintsId "2"
- name "vadas"
- age 27
- ]
- node [
- id 3
- blueprintsId "1"
- name "marko"
- age 29
- ]
- node [
- id 4
- blueprintsId "6"
- name "peter"
- age 35
- ]
- node [
- id 5
- blueprintsId "5"
- name "ripple"
- lang "java"
- ]
- node [
- id 6
- blueprintsId "4"
- name "josh"
- age 32
- ]
- edge [
- source 6
- target 5
- label "created"
- blueprintsId "10"
- weight 1.0
- ]
- edge [
- source 3
- target 2
- label "knows"
- blueprintsId "7"
- weight 0.5
- ]
- edge [
- source 3
- target 1
- label "created"
- blueprintsId "9"
- weight 0.4
- ]
- edge [
- source 3
- target 6
- label "knows"
- blueprintsId "8"
- weight 1.0
- ]
- edge [
- source 6
- target 1
- label "created"
- blueprintsId "11"
- weight 0.4
- ]
- edge [
- source 4
- target 1
- label "created"
- blueprintsId "12"
- weight 0.2
- ]
-]</code></pre>
-<h1>Usage</h1>
-<p>To output a graph in <span class="caps">GML</span> format, pass the graph into the <code>GMLWriter</code> constructor, then call <code>outputGraph</code>:</p>
-<pre><code>Graph graph = ...
-OutputStream out = ...
-
-GMLWriter.outputGraph(graph, out);</code></pre>
-<p>The <code>GMLReader</code> works in a similar format. Simply pass what would likely be an empty graph into the constructor, then call <code>inputGraph</code>:</p>
-<pre><code>Graph graph = ...
-InputStream in = ...
-
-GMLReader.inputGraph(graph, in);</code></pre><br />
-By default, the <code>id</code> property is used for vertex and edge ids. In <span class="caps">GML</span> edges may not have id, in this case an integer id will be generated. The <code>label</code> property is used for edge labels and &#x201C;undefined&#x201D; if not present. The properties used for the vertex id, the edge id and the edge label can be set using.
-<pre><code>reader.setVertexId("propertyToUseAsVertexId");
-reader.setEdgeId("propertyToUseAsEdgeId");
-reader.setEdgeLabel("propertyToUseAsEdgeLabel");</code></pre><br />
-If set manually the reader assumes that the ids are unique. There are a number of static method overloads that offer more options and control.
-<p>Note that the <code>GMLWriter</code> has a <code>strict</code> option that will enforce the <span class="caps">GML</span> specification for property keys, such that keys names not meeting the specification are ignored. By default, this value is set to <code>false</code>. This value can be changed using the <code>setStrict</code> method on a <code>GMLWriter</code> instance.</p>
- </div>
- </div>
- </div>
-
-</div>
-<div id="footer">
- <p id="last-edit">Last edited by <b>joshsh</b>, 2013-03-20 04:57:12</p>
-</div>
-</div>
-
-<script type="text/javascript" src=" css/MathJax/MathJax.js"></script>
-
-
-</body>
-</html>
View
95 doc/Graph-Indices.html
@@ -1,95 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta http-equiv="Content-type" content="text/html;charset=utf-8">
- <link rel="stylesheet" type="text/css" href=" css/gollum.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/editor.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/dialog.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/template.css" media="all">
-
- <!--[if IE 7]>
- <link rel="stylesheet" type="text/css" href=" css/ie7.css" media="all">
- <![endif]-->
-
- <script type="text/javascript" src=" css/jquery.js"></script>
- <script type="text/javascript" src=" css/gollum.js"></script>
- <script type="text/javascript" src=" css/gollum.dialog.js"></script>
- <script type="text/javascript" src=" css/gollum.placeholder.js"></script>
-
- <script type="text/javascript"
- src=" css/editor/gollum.editor.js"></script>
- <title>Graph Indices</title>
-</head>
-<body>
-
-<div id="wiki-wrapper" class="page">
-<div id="head"><h3><a href="../../index.html">TinkerPop 2.3.0</a> - <a href="Home.html">Blueprints</a></h3>
- <h1>Graph Indices</h1>
- <ul class="actions">
- <li class="minibutton"><a href="/pages"
- class="action-all-pages">All Pages</a></li>
- <li class="minibutton" class="jaws">
- <a href="#" id="minibutton-new-page">New Page</a></li>
- <li class="minibutton"><a href="/edit/Graph-Indices"
- class="action-edit-page">Edit Page</a></li>
- <li class="minibutton"><a href="/history/Graph-Indices"
- class="action-page-history">Page History</a></li>
- </ul>
- <div id="searchbar">
- <form action="/search" method="get" id="search-form">
- <div id="searchbar-fauxtext">
- <input type="text" name="q" id="search-query" value="Search&hellip;" autocomplete="off">
- <a href="#" id="search-submit" title="Search this wiki">
- <span>Search</span>
- </a>
- </div>
- </form>
- </div></div>
-<div id="wiki-content">
- <div class="wrap">
- <div id="wiki-body" class="gollum-textile-content">
- <div id="template">
- <p><img src=" images/indices-example.png" alt="" /></p>
-<p>An index is a data structure that supports the fast lookup of elements by some key/value pair. Lookups are usually in <code>log(n)</code> time where <code>n</code> is the number of elements in the index. There are two types of indexing structures supported by Blueprints. These are reflected in the two respective interfaces: <code>KeyIndexableGraph</code> and <code>IndexableGraph</code>.</p>
-<h2>KeyIndexableGraph and Fast LookUp of Elements by Key/Value Pairs</h2>
-<p>A <code>KeyIndexableGraph</code> is a graph that supports the automatic indexing of a vertex or edges by its key/value pair properties. When a method requires access to an element by a key/value, then an appropriate key index can be retrieved. Otherwise, a linear scan must take place. Such methods include <code>Graph.getVertices(String key, Object value)</code> and <code>Graph.getEdges(String key, Object value)</code>. The methods of <code>KeyIndexableGraph</code> are provided below.</p>
-<pre><code>public &lt;T extends Element&gt; void dropKeyIndex(String key, Class&lt;T&gt; elementClass);
-public &lt;T extends Element&gt; void createKeyIndex(String key, Class&lt;T&gt; elementClass);
-public &lt;T extends Element&gt; Set&lt;String&gt; getIndexedKeys(Class&lt;T&gt; elementClass);</code></pre>
-<h2>IndexableGraph and Putting, Getting, and Removing Elements</h2>
-<p>An <code>IndexableGraph</code> is a <code>Graph</code> that supports the indexing of its vertices and edges. An index is a data structure that allows for the fast retrieval of an element by a particular key/value pair. The <code>IndexableGraph</code> interface has the following methods:</p>
-<pre><code>public &lt;T extends Element&gt; Index&lt;T&gt; createIndex(String indexName, Class&lt;T&gt; indexClass, Parameter... indexParameters);
-public &lt;T extends Element&gt; Index&lt;T&gt; getIndex(String indexName, Class&lt;T&gt; indexClass);
-public Iterable&lt;Index&lt;? extends Element&gt;&gt; getIndices();
-public void dropIndex(String indexName);</code></pre>
-<p>An index requires the developer to manually put, get, and remove elements from the index. To create a manual index of vertices, do the following:</p>
-<pre><code>Index&lt;Vertex&gt; index = graph.createIndex("test-idx", Vertex.class);</code></pre>
-<p>The <code>Index</code> interface has the following methods:</p>
-<pre><code>public long count(String key, Object value);
-public String getIndexName();
-public Class&lt;T&gt; getIndexClass();
-public void put(String key, Object value, T element);
-public Iterable&lt;T&gt; get(String key, Object value);
-public Iterable&lt;T&gt; query(String key, Object value);
-public void remove(String key, Object value, T element);</code></pre>
-<p>Given the <code>index</code> object created previous, to add, get, query, and remove a vertex from this index, do the following:</p>
-<pre><code>index.put("name","peter",vertex);
-Iterable&lt;Vertex&gt; results = index.get("name","peter");
-Iterable&lt;Vertex&gt; results = index.query("name", "PeTeR"); // assuming some case-insensitive index
-index.remove("name","peter",vertex);</code></pre>
-<p>Finally, The index construction method <code>createIndex()</code> has a <code>Parameter</code> &#x201C;var arg&#x201D; as its final argument. Some underlying graph implementations support the passing of parameters to tweak the underlying indexing model &#x2014; e.g. case insensitive querying. Please refer to the specifics of each <code>IndexableGraph</code> implementation for their respective support parameters.</p>
- </div>
- </div>
- </div>
-
-</div>
-<div id="footer">
- <p id="last-edit">Last edited by <b>joshsh</b>, 2013-03-20 04:57:12</p>
-</div>
-</div>
-
-<script type="text/javascript" src=" css/MathJax/MathJax.js"></script>
-
-
-</body>
-</html>
View
84 doc/Graph-Morphisms.html
@@ -1,84 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta http-equiv="Content-type" content="text/html;charset=utf-8">
- <link rel="stylesheet" type="text/css" href=" css/gollum.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/editor.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/dialog.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/template.css" media="all">
-
- <!--[if IE 7]>
- <link rel="stylesheet" type="text/css" href=" css/ie7.css" media="all">
- <![endif]-->
-
- <script type="text/javascript" src=" css/jquery.js"></script>
- <script type="text/javascript" src=" css/gollum.js"></script>
- <script type="text/javascript" src=" css/gollum.dialog.js"></script>
- <script type="text/javascript" src=" css/gollum.placeholder.js"></script>
-
- <script type="text/javascript"
- src=" css/editor/gollum.editor.js"></script>
- <title>Graph Morphisms</title>
-</head>
-<body>
-
-<div id="wiki-wrapper" class="page">
-<div id="head"><h3><a href="../../index.html">TinkerPop 2.3.0</a> - <a href="Home.html">Blueprints</a></h3>
- <h1>Graph Morphisms</h1>
- <ul class="actions">
- <li class="minibutton"><a href="/pages"
- class="action-all-pages">All Pages</a></li>
- <li class="minibutton" class="jaws">
- <a href="#" id="minibutton-new-page">New Page</a></li>
- <li class="minibutton"><a href="/edit/Graph-Morphisms"
- class="action-edit-page">Edit Page</a></li>
- <li class="minibutton"><a href="/history/Graph-Morphisms"
- class="action-page-history">Page History</a></li>
- </ul>
- <div id="searchbar">
- <form action="/search" method="get" id="search-form">
- <div id="searchbar-fauxtext">
- <input type="text" name="q" id="search-query" value="Search&hellip;" autocomplete="off">
- <a href="#" id="search-submit" title="Search this wiki">
- <span>Search</span>
- </a>
- </div>
- </form>
- </div></div>
-<div id="wiki-content">
- <div class="wrap">
- <div id="wiki-body" class="gollum-textile-content">
- <div id="template">
- <p>In the world of graphs, there are numerous <a href="http://en.wikipedia.org/wiki/Graph_%28mathematics%29">graph types</a>. The diagram below describes the important feature of a collection of common graph types. Note that many of these types can be mixed and matched. For example, the <a class="internal present" href="Property-Graph-Model.html">property graph model</a> of Blueprints can be seen as a <strong>vertex/edge-labeled/attributed, directed, multi-graph</strong>.</p>
-<p><img src=" images/graph-types.jpg" alt="" /></p>
-<ul><li><strong>half-edge graph</strong>: a unary edge graph where an edge connects only one vertex.</li>
- <li><strong>multi-graph</strong>: when edges are labeled, the various ways in which vertices are related can be denoted.</li>
- <li><strong>simple graph</strong>: the prototypical graph where an edge connects two vertices and no loops are allowed.</li>
- <li><strong>weighted graph</strong>: used to represent strength of ties or transition probabilities.</li>
- <li><strong>vertex-labeled graph</strong>: most every graph makes use of labeled vertices (e.g. an identifier)</li>
- <li><strong>semantic graph</strong>: used to model cognitive structures such as the relationship between concepts and instances of a concept.</li>
- <li><strong>vertex-attributed</strong>: used in applications where it is desirable to append non-relational metadata to a vertex.</li>
- <li><strong>edge-labeled graph</strong>: provides the ability to denote the way in which two vertices are related (e.g. friendships, kinships, etc.).</li>
- <li><strong>directed graph</strong>: orders the vertices connected by an edge to denote directionality.</li>
- <li><strong>hypergraph</strong>: generalizes a binary graph to allow an edge to connect to an arbitrary number of vertices.</li>
- <li><strong>undirected graph</strong>: the typical graph that is used when the relationship is symmetrical (e.g. friendship).</li>
- <li><strong>resource description framework graph</strong>: a graph standard developed by the the World Wide Web consortium that denotes vertices and edges by Uniform Resource Identifiers (see <a class="internal present" href="Sail-Implementation.html">Sail Implementation</a> and <a class="internal present" href="Sail-Ouplementation.html">Sail Ouplementation</a>).</li>
- <li><strong>edge-attributed graph</strong>: used in applications where its desirable to append non-relational metadata to an edge.</li>
- <li><strong>pseudo graph</strong>: generally allowed in most disciplines to denote a reflexive relationship.</li>
-</ul><p>The <a class="internal present" href="Property-Graph-Model.html">property graph model</a> is a convenient graph data model as it is easy to represent other graph types. The following diagram provides the <a href="http://en.wikipedia.org/wiki/Morphism">morphisms</a> that go from one graph type to another. Note that a <a href="http://en.wikipedia.org/wiki/Hypergraph">hypergraph</a> can be modeled using a property graph, though its not as straightforward as modeling other graph types.</p>
-<p><img src=" images/graph-types-morphisms.jpg" alt="" /></p>
- </div>
- </div>
- </div>
-
-</div>
-<div id="footer">
- <p id="last-edit">Last edited by <b>joshsh</b>, 2013-03-20 04:57:12</p>
-</div>
-</div>
-
-<script type="text/javascript" src=" css/MathJax/MathJax.js"></script>
-
-
-</body>
-</html>
View
96 doc/Graph-Transactions.html
@@ -1,96 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta http-equiv="Content-type" content="text/html;charset=utf-8">
- <link rel="stylesheet" type="text/css" href=" css/gollum.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/editor.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/dialog.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/template.css" media="all">
-
- <!--[if IE 7]>
- <link rel="stylesheet" type="text/css" href=" css/ie7.css" media="all">
- <![endif]-->
-
- <script type="text/javascript" src=" css/jquery.js"></script>
- <script type="text/javascript" src=" css/gollum.js"></script>
- <script type="text/javascript" src=" css/gollum.dialog.js"></script>
- <script type="text/javascript" src=" css/gollum.placeholder.js"></script>
-
- <script type="text/javascript"
- src=" css/editor/gollum.editor.js"></script>
- <title>Graph Transactions</title>
-</head>
-<body>
-
-<div id="wiki-wrapper" class="page">
-<div id="head"><h3><a href="../../index.html">TinkerPop 2.3.0</a> - <a href="Home.html">Blueprints</a></h3>
- <h1>Graph Transactions</h1>
- <ul class="actions">
- <li class="minibutton"><a href="/pages"
- class="action-all-pages">All Pages</a></li>
- <li class="minibutton" class="jaws">
- <a href="#" id="minibutton-new-page">New Page</a></li>
- <li class="minibutton"><a href="/edit/Graph-Transactions"
- class="action-edit-page">Edit Page</a></li>
- <li class="minibutton"><a href="/history/Graph-Transactions"
- class="action-page-history">Page History</a></li>
- </ul>
- <div id="searchbar">
- <form action="/search" method="get" id="search-form">
- <div id="searchbar-fauxtext">
- <input type="text" name="q" id="search-query" value="Search&hellip;" autocomplete="off">
- <a href="#" id="search-submit" title="Search this wiki">
- <span>Search</span>
- </a>
- </div>
- </form>
- </div></div>
-<div id="wiki-content">
- <div class="wrap">
- <div id="wiki-body" class="gollum-textile-content">
- <div id="template">
- <p>A <code>Graph</code> that implements the <code>TransactionalGraph</code> or <code>ThreadedTransactionalGraph</code> interfaces must natively support <a href="http://en.wikipedia.org/wiki/Database_transaction">transaction handling</a>. A transaction describes a coherent and complete unit of work comprised of multiple read and write operations to be executed against the database together or not at all. In addition, transactions are needed to handle conflicts and consistency issues that arise when multiple users interact with the <code>Graph</code> concurrently. The exact <a href="http://en.wikipedia.org/wiki/ACID"><span class="caps">ACID</span></a> and <a href="http://en.wikipedia.org/wiki/Isolation_(database_systems)">isolation</a> level guarantees extended by a <code>TransactionalGraph</code> or <code>ThreadedTransactionalGraph</code> depend on the specific implementation.</p>
-<h2>TransactionalGraph and Starting and Stopping Transactions</h2>
-<p>A <code>TransactionalGraph</code> has just two methods for terminating the transaction:</p>
-<pre><code>public void commit();
-public void rollback();</code></pre>
-<p>Transactions are automatically started with the first operation on the graph, that is, any read or write operation. Hence, a transaction does <span class="caps">NOT</span> need to be started. Transactions need to be manually closed to mark the end of a transactional context and to inform the graph database whether the transaction was successful or not. Calling <code>TransactionalGraph.commit()</code> persists the transactional state to the database whereas <code>TransactionalGraph.rollback()</code> fails the transaction and discards any mutations.</p>
-<p>Transactions are bound to the current thread, which means that any graph operation executed by the thread occurs in the context of that transaction and that there may only be one thread executing in a single transaction. For thread independent transactions that allow concurrent thread access, use <code>ThreadedTransactionalGraph</code>.</p>
-<p>When a transaction is started, all the subsequent read and write operations occur within this transaction context. When the transaction is successfully committed, those mutations operations are persisted and visible to other contexts interacting with the graph and all locks are released. If a transaction is rolled back, then the mutation operations in that transaction are discarded as if they never happened.</p>
-<p><code>TransactionalGraph</code> makes no assumptions about how transactions are implemented by a graph database. Hence, a transaction may fail at any point if a conflict arises that could not be resolved.</p>
-<p>Note, that a <code>TransactionalGraph.shutdown()</code> will automatically successfully commit any open transaction. Also note, that keeping transactions open for a long time may result in <code>OutOfMemoryException</code> if too many mutations have occurred and possible dead-locks if locks are held for too long in multi-user environments.</p>
-<p>Note, that element references created in a transactional context may not be accessed outside the transactional context. Doing so may cause an exception. A transaction marks a complete unit of work and after it is stopped, its state may be discarded. Moreover, concurrently running transaction can render such references out-of-sync. Any references created during the transaction may therefore no longer be alive. Hence, the following code snippet may cause an exception:</p>
-<pre><code>Vertex v = graph.addVertex(null);
-//More operations inside the transaction
-graph.commit();
-//Other code
-v.setProperty("name","marko");</code></pre>
-<p>In such cases, the transactional context should be extended until all operations have been completed. In other words, the <code>commit()</code> call should be moved after the <code>v.setProperty("name","marko");</code> write operation.<br />
-In cases where the element reference needs to be accessed outside its original transactional context, it should be re-instantiated based on the element id. For example:</p>
-<pre><code>Vertex v = graph.addVertex(null);
-//More operations inside the transaction
-graph.commit();
-//Other code
-v = graph.getVertex(v.getId());
-v.setProperty("name","marko");</code></pre>
-<h2>ThreadedTransactionalGraph and Multi-Threads for One Transaction</h2>
-<p><code>ThreadedTransactionalGraph</code> provides more fine grained control over the transactional context. While <code>TransactionalGraph</code> binds each transaction to the executing thread, <code>ThreadedTransactionalGraph.newTransaction()</code> returns a <code>TransactionalGraph</code> that represents its own transactional context independent of the executing thread.<br />
-Hence, one can have multiple threads operating against a single transaction represented by the returned TransactionalGraph object. This is useful for parallelizing graph algorithms.</p>
-<p>A <code>ThreadedTransactionalGraph</code> extends <code>TransactionalGraph</code> with a single method.</p>
-<pre><code>public TransactionalGraph newTransaction()</code></pre>
-<p>The returned transaction represented by a <code>TransactionalGraph</code> object needs to be explicitly closed by calling <code>TransactionalGraph.stopTransaction(Conclusion conclusion)</code>. Calling <code>TransactionalGraph.shutdown()</code> will successfully commit the transaction without closing the underlying graph database.</p>
- </div>
- </div>
- </div>
-
-</div>
-<div id="footer">
- <p id="last-edit">Last edited by <b>joshsh</b>, 2013-03-20 04:57:12</p>
-</div>
-</div>
-
-<script type="text/javascript" src=" css/MathJax/MathJax.js"></script>
-
-
-</body>
-</html>
View
224 doc/GraphML-Reader-and-Writer-Library.html
@@ -1,224 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta http-equiv="Content-type" content="text/html;charset=utf-8">
- <link rel="stylesheet" type="text/css" href=" css/gollum.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/editor.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/dialog.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/template.css" media="all">
-
- <!--[if IE 7]>
- <link rel="stylesheet" type="text/css" href=" css/ie7.css" media="all">
- <![endif]-->
-
- <script type="text/javascript" src=" css/jquery.js"></script>
- <script type="text/javascript" src=" css/gollum.js"></script>
- <script type="text/javascript" src=" css/gollum.dialog.js"></script>
- <script type="text/javascript" src=" css/gollum.placeholder.js"></script>
-
- <script type="text/javascript"
- src=" css/editor/gollum.editor.js"></script>
- <title>GraphML Reader and Writer Library</title>
-</head>
-<body>
-
-<div id="wiki-wrapper" class="page">
-<div id="head"><h3><a href="../../index.html">TinkerPop 2.3.0</a> - <a href="Home.html">Blueprints</a></h3>
- <h1>GraphML Reader and Writer Library</h1>
- <ul class="actions">
- <li class="minibutton"><a href="/pages"
- class="action-all-pages">All Pages</a></li>
- <li class="minibutton" class="jaws">
- <a href="#" id="minibutton-new-page">New Page</a></li>
- <li class="minibutton"><a href="/edit/GraphML-Reader-and-Writer-Library"
- class="action-edit-page">Edit Page</a></li>
- <li class="minibutton"><a href="/history/GraphML-Reader-and-Writer-Library"
- class="action-page-history">Page History</a></li>
- </ul>
- <div id="searchbar">
- <form action="/search" method="get" id="search-form">
- <div id="searchbar-fauxtext">
- <input type="text" name="q" id="search-query" value="Search&hellip;" autocomplete="off">
- <a href="#" id="search-submit" title="Search this wiki">
- <span>Search</span>
- </a>
- </div>
- </form>
- </div></div>
-<div id="wiki-content">
- <div class="wrap">
- <div id="wiki-body" class="gollum-textile-content">
- <div id="template">
- <pre><code>&lt;dependency&gt;
- &lt;groupId&gt;com.tinkerpop.blueprints&lt;/groupId&gt;
- &lt;artifactId&gt;blueprints-core&lt;/artifactId&gt;
- &lt;version&gt;??&lt;/version&gt;
-&lt;/dependency&gt;</code></pre>
-<p>Besides being able to query and manipulate the underlying data management system with Blueprints, a <a href="http://graphml.graphdrawing.org">GraphML</a> reader and writer package is provided with Blueprints for streaming <span class="caps">XML</span> graph representations into and out of the underlying graph framework. The GraphML package uses <a href="http://stax.codehaus.org">StAX</a> to process a GraphML graph. This section discusses the use of the GraphML library for reading and writing <span class="caps">XML</span>-encoded graphs.</p>
-<p><img src=" images/graph-example-1.jpg" alt="" /></p>
-<p>Below is the GraphML representation of the graph diagrammed above. Here are some of the important <span class="caps">XML</span> elements to recognize.</p>
-<ul><li><strong>graphml</strong>: the root element of the GraphML document
- <ul><li><strong>key</strong>: a type description for graph element properties</li>
- <li><strong>graph</strong>: the beginning of the graph representation
- <ul><li><strong>node</strong>: the beginning of a vertex representation</li>
- <li><strong>edge</strong>: the beginning of an edge representation
- <ul><li><strong>data</strong>: the key/value data associated with a graph element</li>
- </ul></li>
- </ul></li>
- </ul></li>
-</ul><pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;graphml xmlns="http://graphml.graphdrawing.org/xmlns"&gt;
- &lt;key id="weight" for="edge" attr.name="weight" attr.type="float"/&gt;
- &lt;key id="name" for="node" attr.name="name" attr.type="string"/&gt;
- &lt;key id="age" for="node" attr.name="age" attr.type="int"/&gt;
- &lt;key id="lang" for="node" attr.name="lang" attr.type="string"/&gt;
- &lt;graph id="G" edgedefault="directed"&gt;
- &lt;node id="1"&gt;
- &lt;data key="name"&gt;marko&lt;/data&gt;
- &lt;data key="age"&gt;29&lt;/data&gt;
- &lt;/node&gt;
- &lt;node id="2"&gt;
- &lt;data key="name"&gt;vadas&lt;/data&gt;
- &lt;data key="age"&gt;27&lt;/data&gt;
- &lt;/node&gt;
- &lt;node id="3"&gt;
- &lt;data key="name"&gt;lop&lt;/data&gt;
- &lt;data key="lang"&gt;java&lt;/data&gt;
- &lt;/node&gt;
- &lt;node id="4"&gt;
- &lt;data key="name"&gt;josh&lt;/data&gt;
- &lt;data key="age"&gt;32&lt;/data&gt;
- &lt;/node&gt;
- &lt;node id="5"&gt;
- &lt;data key="name"&gt;ripple&lt;/data&gt;
- &lt;data key="lang"&gt;java&lt;/data&gt;
- &lt;/node&gt;
- &lt;node id="6"&gt;
- &lt;data key="name"&gt;peter&lt;/data&gt;
- &lt;data key="age"&gt;35&lt;/data&gt;
- &lt;/node&gt;
- &lt;edge id="7" source="1" target="2" label="knows"&gt;
- &lt;data key="weight"&gt;0.5&lt;/data&gt;
- &lt;/edge&gt;
- &lt;edge id="8" source="1" target="4" label="knows" &gt;
- &lt;data key="weight"&gt;1.0&lt;/data&gt;
- &lt;/edge&gt;
- &lt;edge id="9" source="1" target="3" label="created"&gt;
- &lt;data key="weight"&gt;0.4&lt;/data&gt;
- &lt;/edge&gt;
- &lt;edge id="10" source="4" target="5" label="created"&gt;
- &lt;data key="weight"&gt;1.0&lt;/data&gt;
- &lt;/edge&gt;
- &lt;edge id="11" source="4" target="3" label="created"&gt;
- &lt;data key="weight"&gt;0.4&lt;/data&gt;
- &lt;/edge&gt;
- &lt;edge id="12" source="6" target="3" label="created"&gt;
- &lt;data key="weight"&gt;0.2&lt;/data&gt;
- &lt;/edge&gt;
- &lt;/graph&gt;
-&lt;/graphml&gt;</code></pre>
-<p>Note that line breaks and indentation have been added for clarity. The default output contains no unnecessary whitespace, but <code>GraphMLWriter</code> does include an option to actually insert the whitespace, as well as ordering elements in the output (see below).</p>
-<h2>Usage</h2>
-<p>To read GraphML data into a graph, pass the graph into the <code>GraphMLReader</code> constructor, then call <code>inputGraph</code>:</p>
-<pre><code>Graph graph = ...
-InputStream in = ...
-
-GraphMLReader.inputGraph(graph, in);</code></pre>
-<p>Note that <code>inputGraph</code> is also overloaded with a &#x201C;buffer size&#x201D; parameter. Several setter methods are provided for customizing the property keys which <code>GraphMLReader</code> uses to map the GraphML data into the Property Graphs model. If used, these should be called before <code>inputGraph</code>, e.g.</p>
-<pre><code>GraphMLReader reader = new GraphMLReader(graph);
-reader.setVertexIdKey("_id");
-reader.setEdgeIdKey("_id");
-reader.setEdgeLabelKey("_label");
-reader.inputGraph(in);</code></pre>
-<p>To output a graph in GraphML format, pass the graph into the <code>GraphMLWriter</code> constructor, then call <code>outputGraph</code>:</p>
-<pre><code>Graph graph = ...
-OutputStream out = ...
-
-GraphMLWriter.outputGraph(graph, out);</code></pre>
-<p>If you have a large graph and you know the key and value type of all vertex and/or edge properties used in your graph, you can speed up <code>outputGraph</code> by first specifying those properties, e.g.</p>
-<pre><code>Map&lt;String, String&gt; vertexKeyTypes = new HashMap&lt;String, String&gt;();
-vertexKeyTypes.put("age", GraphMLTokens.INT);
-vertexKeyTypes.put("lang", GraphMLTokens.STRING);
-vertexKeyTypes.put("name", GraphMLTokens.STRING);
-Map&lt;String, String&gt; edgeKeyTypes = new HashMap&lt;String, String&gt;();
-edgeKeyTypes.put("weight", GraphMLTokens.FLOAT);
-
-GraphMLWriter writer = new GraphMLWriter(graph);
-writer.setVertexKeyTypes(vertexKeyTypes);
-writer.setEdgeKeyTypes(edgeKeyTypes);
-writer.outputGraph(out);</code></pre>
-<p>There is an additional <code>GraphMLWriter</code> method, described below, for enabling normalized GraphML output for use with versioning tools.</p>
-<h2>Normalizing GraphMLWriter output</h2>
-<p><code>GraphMLWriter</code> &#x2019;s default output is sufficient for saving all of the information in a graph in an interoperable format, which can be loaded in <code>GraphMLReader</code> in order to re-create the graph. However, another important use case for <code>GraphMLWriter</code> has to do with versioning and collaborative editing of graphs. If you call the <code>setNormalize</code> method before calling <code>outputGraph</code>, <code>GraphMLWriter</code> will apply additional formatting and constraints to the output so as to make it compatible with line-based versioning tools such as <a href="http://subversion.apache.org/">Subversion</a> and <a href="http://git-scm.com/">Git</a>, e.g.</p>
-<pre><code>GraphMLWriter writer = new GraphMLWriter(graph);
-writer.setNormalize(true);
-writer.outputGraph(out);</code></pre>
-<p>The following is an example of normalized GraphML output. Key definitions appear in alphabetical order, as do vertices and edges (according to the string representation of the id) and vertex and edge properties. The <span class="caps">XML</span> is indented consistently, with one start and/or end tag per line:</p>
-<pre><code>&lt;?xml version="1.0" ?&gt;
-&lt;graphml xmlns="http://graphml.graphdrawing.org/xmlns"&gt;
- &lt;key id="age" for="node" attr.name="age" attr.type="int"&gt;&lt;/key&gt;
- &lt;key id="lang" for="node" attr.name="lang" attr.type="string"&gt;&lt;/key&gt;
- &lt;key id="name" for="node" attr.name="name" attr.type="string"&gt;&lt;/key&gt;
- &lt;key id="weight" for="edge" attr.name="weight" attr.type="float"&gt;&lt;/key&gt;
- &lt;graph id="G" edgedefault="directed"&gt;
- &lt;node id="1"&gt;
- &lt;data key="age"&gt;29&lt;/data&gt;
- &lt;data key="name"&gt;marko&lt;/data&gt;
- &lt;/node&gt;
- &lt;node id="2"&gt;
- &lt;data key="age"&gt;27&lt;/data&gt;
- &lt;data key="name"&gt;vadas&lt;/data&gt;
- &lt;/node&gt;
- &lt;node id="3"&gt;
- &lt;data key="lang"&gt;java&lt;/data&gt;
- &lt;data key="name"&gt;lop&lt;/data&gt;
- &lt;/node&gt;
- &lt;node id="4"&gt;
- &lt;data key="age"&gt;32&lt;/data&gt;
- &lt;data key="name"&gt;josh&lt;/data&gt;
- &lt;/node&gt;
- &lt;node id="5"&gt;
- &lt;data key="lang"&gt;java&lt;/data&gt;
- &lt;data key="name"&gt;ripple&lt;/data&gt;
- &lt;/node&gt;
- &lt;node id="6"&gt;
- &lt;data key="age"&gt;35&lt;/data&gt;
- &lt;data key="name"&gt;peter&lt;/data&gt;
- &lt;/node&gt;
- &lt;edge id="10" source="4" target="5" label="created"&gt;
- &lt;data key="weight"&gt;1.0&lt;/data&gt;
- &lt;/edge&gt;
- &lt;edge id="11" source="4" target="3" label="created"&gt;
- &lt;data key="weight"&gt;0.4&lt;/data&gt;
- &lt;/edge&gt;
- &lt;edge id="12" source="6" target="3" label="created"&gt;
- &lt;data key="weight"&gt;0.2&lt;/data&gt;
- &lt;/edge&gt;
- &lt;edge id="7" source="1" target="2" label="knows"&gt;
- &lt;data key="weight"&gt;0.5&lt;/data&gt;
- &lt;/edge&gt;
- &lt;edge id="8" source="1" target="4" label="knows"&gt;
- &lt;data key="weight"&gt;1.0&lt;/data&gt;
- &lt;/edge&gt;
- &lt;edge id="9" source="1" target="3" label="created"&gt;
- &lt;data key="weight"&gt;0.4&lt;/data&gt;
- &lt;/edge&gt;
- &lt;/graph&gt;
-&lt;/graphml&gt;</code></pre>
-<p>This format permits line diffs to be used to capture incremental changes to graphs, so that graphs can be conveniently checked in to a version control repository. You can then commit changes to the graph and roll back to previous versions of the graph, just as you would do with a piece of source code. Forking and merging graphs is also possible within certain limits.</p>
-<p>Note that normalizing output in <code>GraphMLWriter</code> is a memory-intensive process, so it is best used in connection with small to medium-sized graphs.</p>
- </div>
- </div>
- </div>
-
-</div>
-<div id="footer">
- <p id="last-edit">Last edited by <b>joshsh</b>, 2013-03-20 04:57:12</p>
-</div>
-</div>
-
-<script type="text/javascript" src=" css/MathJax/MathJax.js"></script>
-
-
-</body>
-</html>
View
350 doc/GraphSON-Reader-and-Writer-Library.html
@@ -1,350 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta http-equiv="Content-type" content="text/html;charset=utf-8">
- <link rel="stylesheet" type="text/css" href=" css/gollum.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/editor.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/dialog.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/template.css" media="all">
-
- <!--[if IE 7]>
- <link rel="stylesheet" type="text/css" href=" css/ie7.css" media="all">
- <![endif]-->
-
- <script type="text/javascript" src=" css/jquery.js"></script>
- <script type="text/javascript" src=" css/gollum.js"></script>
- <script type="text/javascript" src=" css/gollum.dialog.js"></script>
- <script type="text/javascript" src=" css/gollum.placeholder.js"></script>
-
- <script type="text/javascript"
- src=" css/editor/gollum.editor.js"></script>
- <title>GraphSON Reader and Writer Library</title>
-</head>
-<body>
-
-<div id="wiki-wrapper" class="page">
-<div id="head"><h3><a href="../../index.html">TinkerPop 2.3.0</a> - <a href="Home.html">Blueprints</a></h3>
- <h1>GraphSON Reader and Writer Library</h1>
- <ul class="actions">
- <li class="minibutton"><a href="/pages"
- class="action-all-pages">All Pages</a></li>
- <li class="minibutton" class="jaws">
- <a href="#" id="minibutton-new-page">New Page</a></li>
- <li class="minibutton"><a href="/edit/GraphSON-Reader-and-Writer-Library"
- class="action-edit-page">Edit Page</a></li>
- <li class="minibutton"><a href="/history/GraphSON-Reader-and-Writer-Library"
- class="action-page-history">Page History</a></li>
- </ul>
- <div id="searchbar">
- <form action="/search" method="get" id="search-form">
- <div id="searchbar-fauxtext">
- <input type="text" name="q" id="search-query" value="Search&hellip;" autocomplete="off">
- <a href="#" id="search-submit" title="Search this wiki">
- <span>Search</span>
- </a>
- </div>
- </form>
- </div></div>
-<div id="wiki-content">
- <div class="wrap">
- <div id="wiki-body" class="gollum-textile-content">
- <div id="template">
- <pre><code>&lt;dependency&gt;
- &lt;groupId&gt;com.tinkerpop.blueprints&lt;/groupId&gt;
- &lt;artifactId&gt;blueprints-core&lt;/artifactId&gt;
- &lt;version&gt;??&lt;/version&gt;
-&lt;/dependency&gt;</code></pre>
-<p>GraphSON is a <a href="http://json.org"><span class="caps">JSON</span>-based</a> format for individual graph elements (i.e. vertices and edges). How these elements are organized and utilized when written as a complete graph can also be considered GraphSON format. In other words, the schema for GraphSON is very flexible and therefore, any <span class="caps">JSON</span> document or fragment that is produced by or can be consumed by the Blueprints <a href="https://github.com/tinkerpop/blueprints/tree/master/blueprints-core/src/main/java/com/tinkerpop/blueprints/util/io/graphson">IO packages</a> can be considered valid GraphSON.</p>
-<h1>Reading and Writing an Entire Graph</h1>
-<p>The GraphSON reader and writer package allows an entire graph to be streamed to and from the standard <span class="caps">JSON</span> format which is utilized across the TinkerPop stack. GraphSON can be read or written in several styles:</p>
-<ul><li><span class="caps">JSON</span>-based data types</li>
- <li>Explicit data typing within the <span class="caps">JSON</span></li>
- <li>A compact format where certain property keys can be ignored</li>
-</ul><p>For most scenarios, standard <span class="caps">JSON</span> without data typing should generally be acceptable. Using the more verbose outputting of explicit data types only provides the added value of ensuring that numeric values are converted properly (ie. float versus double).</p>
-<p><img src=" images/graph-example-1.jpg" alt="" /></p>
-<p>The following example shows the format without explicit data types:</p>
-<pre><code>{
- "graph": {
- "mode":"NORMAL",
- "vertices": [
- {
- "name": "lop",
- "lang": "java",
- "_id": "3",
- "_type": "vertex"
- },
- {
- "name": "vadas",
- "age": 27,
- "_id": "2",
- "_type": "vertex"
- },
- {
- "name": "marko",
- "age": 29,
- "_id": "1",
- "_type": "vertex"
- },
- {
- "name": "peter",
- "age": 35,
- "_id": "6",
- "_type": "vertex"
- },
- {
- "name": "ripple",
- "lang": "java",
- "_id": "5",
- "_type": "vertex"
- },
- {
- "name": "josh",
- "age": 32,
- "_id": "4",
- "_type": "vertex"
- }
- ],
- "edges": [
- {
- "weight": 1,
- "_id": "10",
- "_type": "edge",
- "_outV": "4",
- "_inV": "5",
- "_label": "created"
- },
- {
- "weight": 0.5,
- "_id": "7",
- "_type": "edge",
- "_outV": "1",
- "_inV": "2",
- "_label": "knows"
- },
- {
- "weight": 0.4000000059604645,
- "_id": "9",
- "_type": "edge",
- "_outV": "1",
- "_inV": "3",
- "_label": "created"
- },
- {
- "weight": 1,
- "_id": "8",
- "_type": "edge",
- "_outV": "1",
- "_inV": "4",
- "_label": "knows"
- },
- {
- "weight": 0.4000000059604645,
- "_id": "11",
- "_type": "edge",
- "_outV": "4",
- "_inV": "3",
- "_label": "created"
- },
- {
- "weight": 0.20000000298023224,
- "_id": "12",
- "_type": "edge",
- "_outV": "6",
- "_inV": "3",
- "_label": "created"
- }
- ]
- }
-}</code></pre>
-<p>The following example shows the format with explicit data types:</p>
-<pre><code>{
- "mode":"EXTENDED",
- "vertices": [
- {
- "name": {
- "type": "string",
- "value": "lop"
- },
- "lang": {
- "type": "string",
- "value": "java"
- },
- "_id": "3",
- "_type": "vertex"
- },
- {
- "name": {
- "type": "string",
- "value": "vadas"
- },
- "age": {
- "type": "integer",
- "value": 27
- },
- "_id": "2",
- "_type": "vertex"
- },
- {
- "name": {
- "type": "string",
- "value": "marko"
- },
- "age": {
- "type": "integer",
- "value": 29
- },
- "_id": "1",
- "_type": "vertex"
- },
- {
- "name": {
- "type": "string",
- "value": "peter"
- },
- "age": {
- "type": "integer",
- "value": 35
- },
- "_id": "6",
- "_type": "vertex"
- },
- {
- "name": {
- "type": "string",
- "value": "ripple"
- },
- "lang": {
- "type": "string",
- "value": "java"
- },
- "_id": "5",
- "_type": "vertex"
- },
- {
- "name": {
- "type": "string",
- "value": "josh"
- },
- "age": {
- "type": "integer",
- "value": 32
- },
- "_id": "4",
- "_type": "vertex"
- }
- ],
- "edges": [
- {
- "weight": {
- "type": "float",
- "value": 1
- },
- "_id": "10",
- "_type": "edge",
- "_outV": "4",
- "_inV": "5",
- "_label": "created"
- },
- {
- "weight": {
- "type": "float",
- "value": 0.5
- },
- "_id": "7",
- "_type": "edge",
- "_outV": "1",
- "_inV": "2",
- "_label": "knows"
- },
- {
- "weight": {
- "type": "float",
- "value": 0.4000000059604645
- },
- "_id": "9",
- "_type": "edge",
- "_outV": "1",
- "_inV": "3",
- "_label": "created"
- },
- {
- "weight": {
- "type": "float",
- "value": 1
- },
- "_id": "8",
- "_type": "edge",
- "_outV": "1",
- "_inV": "4",
- "_label": "knows"
- },
- {
- "weight": {
- "type": "float",
- "value": 0.4000000059604645
- },
- "_id": "11",
- "_type": "edge",
- "_outV": "4",
- "_inV": "3",
- "_label": "created"
- },
- {
- "weight": {
- "type": "float",
- "value": 0.20000000298023224
- },
- "_id": "12",
- "_type": "edge",
- "_outV": "6",
- "_inV": "3",
- "_label": "created"
- }
- ]
-}</code></pre>
-<p>There are a few differences between the formats. If types are embedded, the <span class="caps">JSON</span> must start with a <code>mode</code> key with a value of <code>EMBEDDED</code>. This key acts as a hint to the reader that it must extract property values in a different manner. If the key is omitted, that setting is assumed to be <code>NORMAL</code>.</p>
-<p>There is a third option for the <code>mode</code>, which is <code>COMPACT</code>. This mode allows more complete control over exactly what element properties get serialized to the GraphSON output. As there is complete control, there is a possibility that the GraphSON will not be viable for reading (ie. if an important property is not serialized out, like the vertex <code>_id</code>).</p>
-<p>All values of keys, short of the values for reserved keys that start with an underscore, must contain an object that has two keys: <code>type</code> and <code>value</code>. The <code>type</code> must be one of the following: <code>boolean</code>, <code>string</code>, <code>integer</code>, <code>long</code>, <code>float</code>, <code>double</code>, <code>list</code>, or <code>map</code>.</p>
-<p>If the type is a <code>map</code> or a <code>list</code>, then each component object that make up that key must use that same format. For example:</p>
-<pre><code>"someMap": {
- "name": {"type":"string", "value":"william"},
- "age": {"type":"int", "value":76}
-},
-"someList" [{"type":"int", "value":1},{"type":"int", "value":2},{"type":"int", "value":3}]</code></pre>
-<p>Please note that complex objects stored as properties will be converted to strings by way of the object&#x2019;s <code>toString</code> method.</p>
-<h1>Usage</h1>
-<p>To output a graph in <span class="caps">JSON</span> format, pass the graph into the <code>GraphSONWriter</code> constructor, then call <code>outputGraph</code>:</p>
-<pre><code>Graph graph = ...
-OutputStream out = ...
-
-GraphSONWriter.outputGraph(graph, out);</code></pre>
-<p>The <code>GraphSONReader</code> works in a similar format. Simply pass what would likely be an empty graph into the constructor, then call <code>inputGraph</code>:</p>
-<pre><code>Graph graph = ...
-InputStream in = ...
-
-GraphSONReader.inputGraph(graph, in);</code></pre>
-<p>There are a number of static method overloads that offer more options and control.</p>
-<h1>GraphSONUtility Usage</h1>
-<p>The <code>GraphSONUtility</code> class is used by both <code>GraphSONReader</code> and <code>GraphSONWriter</code> to convert individual graph elements (vertices and edges) to and from the GraphSON format with conversion options to both a <a href="http://jettison.codehaus.org/">Jettison</a> <code>JSONObject</code> and a <a href="http://jackson.codehaus.org/">Jackson</a> <code>ObjectNode</code>. Usage is as follows:</p>
-<pre><code>Vertex v = graph.getVertex(1);
-JSONObject json = GraphSONUtility.jsonFromElement(v);
-System.out.println(json.toString())
-
-Vertex convertedBack = GraphSONUtility.vertexFromJson(json,
- new GraphElementFactory(graph), GraphSONMode.NORMAL, null);</code></pre>
-<p>The <code>GraphElementFactory</code> is an implementation of the <code>ElementFactory</code> class, that utilizes a <code>Graph</code> instance to construct <code>Vertex</code> and <code>Edge</code> instances. In most cases, the <code>GraphElementFactory</code> is all that is needed to use the <code>GraphSONUtility</code>, though in cases where vertices or edges need to be constructed outside of the context of a <code>Graph</code> implementation, it might be necessary to implement a custom implementation.</p>
- </div>
- </div>
- </div>
-
-</div>
-<div id="footer">
- <p id="last-edit">Last edited by <b>joshsh</b>, 2013-03-20 04:57:12</p>
-</div>
-</div>
-
-<script type="text/javascript" src=" css/MathJax/MathJax.js"></script>
-
-
-</body>
-</html>
View
155 doc/Home.html
@@ -1,155 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta http-equiv="Content-type" content="text/html;charset=utf-8">
- <link rel="stylesheet" type="text/css" href=" css/gollum.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/editor.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/dialog.css" media="all">
- <link rel="stylesheet" type="text/css" href=" css/template.css" media="all">
-
- <!--[if IE 7]>
- <link rel="stylesheet" type="text/css" href=" css/ie7.css" media="all">
- <![endif]-->
-
- <script type="text/javascript" src=" css/jquery.js"></script>
- <script type="text/javascript" src=" css/gollum.js"></script>
- <script type="text/javascript" src=" css/gollum.dialog.js"></script>
- <script type="text/javascript" src=" css/gollum.placeholder.js"></script>
-
- <script type="text/javascript"
- src=" css/editor/gollum.editor.js"></script>
- <title>Home</title>
-</head>
-<body>
-
-<div id="wiki-wrapper" class="page">
-<div id="head"><h3><a href="../../index.html">TinkerPop 2.3.0</a> - <a href="Home.html">Blueprints</a></h3>
- <h1>Home</h1>
- <ul class="actions">
- <li class="minibutton"><a href="/pages"
- class="action-all-pages">All Pages</a></li>
- <li class="minibutton" class="jaws">
- <a href="#" id="minibutton-new-page">New Page</a></li>
- <li class="minibutton"><a href="/edit/Home"
- class="action-edit-page">Edit Page</a></li>
- <li class="minibutton"><a href="/history/Home"
- class="action-page-history">Page History</a></li>
- </ul>
- <div id="searchbar">
- <form action="/search" method="get" id="search-form">
- <div id="searchbar-fauxtext">
- <input type="text" name="q" id="search-query" value="Search&hellip;" autocomplete="off">
- <a href="#" id="search-submit" title="Search this wiki">
- <span>Search</span>
- </a>
- </div>
- </form>
- </div></div>
-<div id="wiki-content">
- <div class="wrap">
- <div id="wiki-body" class="gollum-textile-content">
- <div id="template">
- <p><img src=" images/blueprints-logo.png" height="152px" /></p>
-<p><span class="float-right"><span><img src="https://github.com/tinkerpop/rexster/raw/master/doc/images/rexster-system-arch.png" width="350px" height="375px" /></span></span></p>
-<p>Blueprints is a collection of interfaces, implementations, ouplementations, and test suites for the property graph data model. Blueprints is analogous to the <a href="http://en.wikipedia.org/wiki/Java_Database_Connectivity"><span class="caps">JDBC</span></a>, but for <a href="http://en.wikipedia.org/wiki/Graph_database">graph databases</a>. As such, it provides a common set of interfaces to allow developers to plug-and-play their graph database backend. Moreover, software written atop Blueprints works over all Blueprints-enabled graph databases. Within the TinkerPop software stack, Blueprints serves as the foundational technology for:</p>
-<ul><li><a href="../../pipes/2.3.0/Home.html">Pipes</a>: A lazy, data flow framework</li>
- <li><a href="../../gremlin/2.3.0/Home.html">Gremlin</a>: A graph traversal language</li>
- <li><a href="../../frames/2.3.0/Home.html">Frames</a>: An object-to-graph mapper</li>
- <li><a href="../../furnace/2.3.0/Home.html">Furnace</a>: A graph algorithms package</li>
- <li><a href="../../rexster/2.3.0/Home.html">Rexster</a>: A graph server</li>
-</ul><p>The documentation herein will provide information regarding the use of Blueprints.<sup class="footnote"><a href="#fn1">1</a></sup> Please join the Gremlin users group at <a href="http://groups.google.com/group/gremlin-users">http://groups.google.com/group/gremlin-users</a> for all <a href="../../index.html">TinkerPop</a> related discussions.</p>
-<p>Blueprints JavaDoc: <a href="http://tinkerpop.com/docs/javadocs/blueprints/2.3.0/">2.3.0</a> &#x2013; <a href="http://tinkerpop.com/docs/javadocs/blueprints/2.2.0/">2.2.0</a> &#x2013; <a href="http://tinkerpop.com/docs/javadocs/blueprints/2.1.0/">2.1.0</a> &#x2013; <a href="http://tinkerpop.com/docs/javadocs/blueprints/2.0.0/">2.0.0</a> &#x2013; <a href="http://tinkerpop.com/maven2/com/tinkerpop/blueprints/blueprints/1.2/api/">1.2</a> &#x2013; <a href="http://tinkerpop.com/maven2/com/tinkerpop/blueprints/blueprints/1.1/api/">1.1</a> &#x2013; <a href="http://tinkerpop.com/maven2/com/tinkerpop/blueprints/blueprints/1.0/api/">1.0</a> &#x2013; <a href="http://tinkerpop.com/maven2/com/tinkerpop/blueprints/blueprints/0.9/api/">0.9</a> &#x2013; <a href="http://tinkerpop.com/maven2/com/tinkerpop/blueprints/blueprints/0.8/api/">0.8</a> &#x2013; <a href="http://tinkerpop.com/maven2/com/tinkerpop/blueprints/blueprints/0.7/api/">0.7</a> &#x2013; <a href="http://tinkerpop.com/maven2/com/tinkerpop/blueprints/blueprints/0.6/api/">0.6</a> &#x2013; <a href="http://tinkerpop.com/maven2/com/tinkerpop/blueprints/0.5/api/">0.5</a> &#x2013; <a href="http://tinkerpop.com/maven2/com/tinkerpop/blueprints/0.4/api/">0.4</a> &#x2013; <a href="http://tinkerpop.com/maven2/com/tinkerpop/blueprints/0.3/api/">0.3</a> &#x2013; <a href="http://tinkerpop.com/maven2/com/tinkerpop/blueprints/0.2/api/">0.2</a> &#x2013; <a href="http://tinkerpop.com/maven2/com/tinkerpop/blueprints/0.1/api/">0.1</a><br />