I was investigating using the Tinkerpop Blueprints API which provides support for using arbitrary SPARQL endpoints as the source of the graph. But when reading the documentation I found the following statement:
Any of these stores can be manipulated with Blueprints through their Sail interfaces. Here is a list of aspects of RDF that should be understood when dealing with Blueprints over an RDF store.
- No duplicate edges: RDF considers two edges the same if they share the same subject, predicate, object, and graph. Thus, edges with these in common are, in fact, the same edge.
- No indices: There are no indices as no elements have properties that can not be accessed simply by using referencing their id (i.e. their URI, blank node, or literal string).
- Infinite vertices: RDF is edge based and as such, every possible vertex exists. It is only when finding outgoing or incoming edges to some vertex do you recognize it within a larger graph structure. For this reason, you can not iterate over all vertices in the graph.
Now points 1 and 2 I completely agree with, point 3 is the one that causes me problems. If you take a strict open world view then maybe you can argue that there are infinite vertices but certainly in an implementation sense that seems to be a fallacy since whatever SPARQL endpoint you choose to use will have some finite number of vertices.
My other problem with point 3 is stating that RDF is edge based, yes RDF is concerned with expressing relationships between things but to imply that RDF lack nodes seems like a gross misrepresentation of RDF to me. To me the subjects and objects of triples are nodes in the graph (or vertices in Blueprints parlance) so I'm puzzled as to why someone would consider RDF to be purely edge based.
So are they misrepresenting RDF in their documentation or is this just RDF as represented in terminology relevant to a reader with a graph centric view of the world?