Architecture
Here is a first simple diagram to illustrate how JCR compares to RDBMS/NoSQL. You might notice that there is very little difference to the diagram below.
PHPCR defines a uniform way how to access and manage content. It is an API definition that can be implemented on top of different data stores. Jackalope and Midgard implement this interface.
PHPCR is an adaption of the Java Content Repository specification JCR. But it does not try to copy the JCR interfaces 1:1 and instead provides a PHP-ified equivalent API.
We built PHPCR-ODM, a object-document mapper on top of PHPCR in the doctrine family. It can be used to map document classes into the storage layer. In addition to the general ODM features, PHPCR-ODM provides you with @Children and @Parent annotations to model the hierarchy. The document manager also offers ways to work with versions.
Now what this diagram tries to illustrate with the two arrows is that the Userland Code will at times interact with Jackalope directly and this is where using the JCR specification gets interesting. For example, you can move nodes in the tree or copy whole parts of a tree, work with the PHPCR workspaces and so on. For searching, we will expose the PHPCR query builder.