From the wiki page:
A Neo4J graph consists of the following element types:
- Node
- Relationship
- RelationshipType
- Property name
- Property value
These five types of elements don’t share a common interface, except for Node and Relationship, which both extend the PropertyContainer interface.
The Enhanced API unifies all Neo4j elements under the common interface Vertex.
Which has the result:
Generalizations of database elements
The Vertex interface support methods for the manipulation of Properties and Edges, thereby providing all methods normally associated with Nodes. Properties and Edges (including their Types) are Vertices too. This allows for the generalization of all Neo4j database elements as if they were Nodes.
Due to generalization it is possible to create Edges involving regular Vertices, Edges of any kind, including BinaryEdges and Properties.
The generalization also makes it possible to set Properties on all Vertices. So it even becomes possible to set a Property on a Property.
Hmmm, properties on properties, where have I heard that? 😉
Properties on properties and properties on values are what we need for robust data preservation, migration or even re-use.
I was reminded recently that SNOBOL turns 50 years old in 2012. Care to guess how many formats, schemas, data structures we have been through during just that time period. Some of them intended to be “legacy” formats, forever readable by those who follow. Except that people forget the meaning of the “properties” and their “values.”
If we had properties on properties and properties on values, we could at least record our present understandings of those items. And others could do the same to our properties and values.
Those mappings would not be universally useful to everyone. But if present, we would have the options to follow those mappings or not.
Perhaps that’s the key, topic maps are about transparent choice in the reuse of data.
Leaves the exercise or not of choice up to the user.
This is a step in that direction.