Content Repository API for Java is a specification for a Java platform
application programming interface to access content repositories in a uniform
manner. The content repositories are used in content management systems to
keep the content data and also the metadata used in content management
systems such as versioning metadata. The specification was developed under the
Java Community Process as JSR-170, and as JSR-283. The main Java package is
javax.jcr. Overview
A JCR is a type of object database tailored to storing, searching, and
retrieving hierarchical data. The JCR API grew out of the needs of content
management systems, which require storing documents and other binary
objects with associated metadata; however, the API is applicable to many
additional types of applications. In addition to object storage, the JCR
provides: APIs for versioning of data; transactions; observation of changes in
data; and import or export of data to XML in a standard way.
Data structure The data in a JCR consists of a tree of
nodes with associated properties. Data is stored in the properties, which may
hold simple values such as numbers and strings or binary data of arbitrary
length. Nodes may optionally have one or more types associated with them which
dictate the kinds of properties, number and type of child nodes, and certain
behavioral characteristics of the nodes. Nodes may point to other nodes via a
special reference type property. In this way nodes in a JCR offer both
referential integrity and object-oriented concept of inheritance.
Additional node types include the referenceable node type which allows the
user to reference said node through use of a universally unique identifier.
Another popular type is the versionable type. This makes the repository track a
document's history and store copies of each version of the document.
Queries A JCR can export portions of its tree to
XML in two standard formats and can import hierarchies directly from XML.
JSR 283 compliant implementations must support a standardized form of SQL for
queries and a query object model QOM. JSR 283 deprecates the XPath query
language defined in JSR 170. The Apache Jackrabbit reference implementation of
JCR also supports the integration of the Apache Lucene search engine to give full
text searches of data in the repository. Available implementations
Both JSRs are led by David Nüscheler of Adobe Systems. Day had both a commercial
JCR implementation called Content Repository Extreme and was involved in
the open source Apache Jackrabbit JCR, which had its 2.0 release in January
2010. ModeShape is another open source JCR implementation that supports
JSR-283. Jahia, Hippo CMS and Magnolia are Enterprise Content Management
systems built on the JCR API, using Jackrabbit as its repository by default,
but able to plug in any other JSR-170 certified repository implementation.
JSR-170 is also supported by Oracle Beehive, Oracle's enterprise
collaboration software. The eXo JCR by eXo Platform is an open source
repository with paid commercial support and documentation. Many other commercial
vendors are working on JCR compatibility and products. Alfresco is an open source
content management system which provides a JCR API onto their repository. GX
released the new community version of its Web enterprise content management
platform based natively on Apache Jackrabbit and JSR.
PHP adaptions have been started by TYPO3, translating the Java API to PHP.
The PHPCR interfaces are also implemented by Jackalope, a PHP frontend
talking to the Jackrabbit backend through the WebDAV interface, and
Midgard, a cross-language content repository.
See also Content Management Interoperability
Services, another content repository API References