Designed for logic

When I say designed for logic, what I mean is that it that if has the same idea of triple (fact) as in Datalog, 1986:

  • RDF: subject, predicate, object
  • Datalog: predicate(subject, object)

Which may seem as a good idea at first, but problem is that you can’t express Property Graph or Labeled Property Graph, as the workaround you need to use reification.

XML

XML is always a bad choice. It is not human-readable and not optimised for machine either. That is why there is a plethora of alternatives:

FormatDescription
TurtleTerse RDF Triple Language.
TriGPlain text format for serializing named graphs and RDF Datasets.
JSON-LDJSON-based Serialization for Linked Data.
RDF/JSONRDF 1.1 JSON Alternate Serialization.
N-TriplesLine-based syntax for RDF datasets.
N-QuadsLine-based syntax for RDF datasets.
Notation3Notation3 (N3): A readable RDF syntax.
HDTBinary RDF Representation for Publication and Exchange.
aREFAnother RDF Encoding Form.
YARRMLYARRRML is a human readable text-based representation for declarative generation rules. It is a subset of [YAML], a widely used data serialization language designed to be
hextuplesNDJSON serialization

Not a graph

Strictly speaking RDF is not a labeled Graph, even so it can appear like one. See RDF vs Graphs.

Reification problem

There is no single approach for reification, as a result there are 4-5 different approaches. See RDF reification.

Using reification:

  • You can do statements about statements
    • Which allows to express property graph
    • Which allows to express namespaces, versions

Potential solutions for this: