Chapter 15. Property Graphs
Use URIs as names for things.
— Tim Berners-Lee, the first rule of Linked Data, 2006
A property graph stores nodes and edges directly, with properties on both. That makes it the closest any deployed model comes to RDF, the state model of the derived stack.
The model
Nodes and edges carry key–value properties. Edges are typed, directed, and have identities of their own. The model encodes any domain, so R1 holds. Each property is three things: the element it belongs to, a key, and a value. That is the arity Proposition 5.2 derived. Nothing types the positions as global names, and R3 is where that shows.
The names
A node’s identity is local to the store, so applications put a second identifier in a property: a UUID, an asset code, a customer number. That is where R3 fails, and it fails the way Chapter 10 found for JSON. That identifier is a string, and the model does not distinguish it from any other string. Two parties must therefore agree on which property holds the identifier, on where its values come from, and on what they refer to. Those agreements are the coordination R2 forbids. Reference here is global by discipline, never by type.
A URI needs no such agreement. Its authority component delegates minting, so any party can issue a global name without asking anyone, and (5.3) makes reference a matter of type rather than discipline. The obvious repair is to invent a global scheme of your own, and Chapter 5 ruled it out: a second naming system violates R2 by itself, because two parties’ private schemes collide on merge.
A merge must decide which nodes are the same node. The model decides nothing.
The same panel, described by two parties. The property graph cannot say whether the two nodes on the left are one panel. The shared name settles it on the right.
The standards
A query is a term evaluated against the store, not code inside it, so selection is separated from storage and S1 holds. The query side is standardized too, and recently. Cypher shipped with Neo4j in 2011 and was opened as openCypher in 2015. The SQL committee added property graph queries to SQL itself as SQL/PGQ (ISO/IEC 9075-16) in 2023. GQL followed in 2024 as a language of its own (Graph Query Language, ISO/IEC 39075). A query means the same thing across implementations, which is what S2 asks of select.
S2 asks the same of arrange and present. No transformation language was standardized for the property graph, and no presentation language. Chapter 10 scored JSON ✗ for two reasons: no transformation language, and interpretation left to the application. The property graph lacks a transformation language too, but GQL specifies what a query means, so the second reason does not apply. One reason scores a tilde where two scored a cross. S3 takes a tilde for the dialects: products implement GQL to different degrees and keep their own extensions, so one product’s term does not always evaluate in another. S4 fails on the protocol. Endpoints exist. The model has two query standards and no wire protocol, so each product ships its own, and the query goes in a request body rather than a URL. The query has no address, and neither does its result, so nothing can link to it or cache it. SPARQL’s protocol defines query via GET instead, which puts the query in the URL and makes the result a resource. Every integrator reverse-engineers a private API when resources are not addressable. No standard defines this one, so it is private by definition. That is GraphQL’s cell again, and for the same reason.
The edge-property argument
The two models have argued for fifteen years, almost always about edge properties. A property graph hangs data on a relationship directly. Plain RDF cannot. Its standard device is reification, which describes the fact in triples of its own, and Chapter 9 audited it as a mismatch.
Saying when the relationship began. The property graph puts it on the edge; RDF names the fact first.
The rows do not settle that argument, because it is not about any of them. It is about arity. Chapter 9 answered that by adding a requirement, attribution, and deriving a fourth position from it. Both models can carry data about an edge. The rows measure something else: whether the names in the positions refer beyond the store.
RDF 1.2 answers that complaint. It adds the triple term, a triple used as the object of another triple, so a statement can be described without being asserted. It reached Candidate Recommendation in April 2026, and SPARQL 1.2 is still a Working Draft. The addition is narrower than it looks. A triple term is a fourth kind of term beside IRIs, literals and blank nodes, and it is not a name, so nothing can address it. The name belongs to the reifier, the subject that rdf:reifies it. The specification makes the feature optional too, splitting conformance into a basic level without triple terms and a full level with them. No score changes, in this column or the derived stack’s. The triple term widens (5.3)’s object position to carry annotations. Chapter 9 widened the triple to a quad because attribution required it.
The compensating industry
Entity resolution is the work of deciding that a node here and a node there are the same thing. It exists because identity is a property rather than a name, which is R3 failing. Two stores can hold the same panel under different keys in differently named fields, and nothing in the model objects, so the matching is done afterwards by hand or by inference. The graph vendors sell the remedy beside the model, as a solution category of its own. The bridge is per pair of stores, so a third store adds two more pairs and not one more name. Chapter 13 found the same industry at the relational boundary and called it integration.
Property graph
| Property graph | |
|---|---|
| R1 | ✓ — any domain, in a graph shape |
| R2 | ✗ — merging needs agreement the model does not supply |
| R3 | ✗ — reference is by discipline, not by type |
| S1 | ✓ — query separated from storage |
| S2 | ~ — query standardized, transformation never |
| S3 | ~ — GQL conformance varies by product |
| S4 | ✗ — the query goes in a body, so the result has no URL |
Chapter 13 found the relational model failing R2, R3 and S4, the three machine-spanning properties, because it answers a single-machine question. This column fails the same three. The property graph got the shape right. What fails is the names.