Old Release

This documentation covers an old version of Fedora. Looking for another version? See all documentation.

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 10 Next »

The Fedora 4 Object Model

If you're interested in the differences between the object model of Fedora 3 and earlier and the object model of Fedora 4, start here.

(Cribbed heavily from the JCR Repository Model documentation)

This document describes the objects and structures that compose a Fedora repository. 

A Fedora 4 repository is composed of one or more workspaces, each consisting of a directed acyclic graph of nodes where edges represent a parent-child relation.

For those without a computer science background, in repository terms:

  • A node is an object.
  • An edge is a relationship (in this case, a parent-child relationship) that links two nodes.  Edges are represented as RDF properties in a Fedora object.
  • A graph is a set of nodes connected by edges.  The entire set of objects in the workspace and their relationships to each other form a graph.
  • A directed graph is a graph whose edges have direction associated with them:  that is, the relations that link the nodes move in a given direction from one node to the next.  An example of an edge with a direction is isAChildOf.  The relationship expresses a direction from the child to the parent.  The relationship isParentOf can also link the same two nodes, but in the opposite direction.
  • A directed acyclic graph is a graph where whose edges never form loops (i.e., cycles) of nodes.  That is, if you start at node A, then follow a set of identical relations from that node to other nodes in a chain, you will never end up back at node A.  No Fedora object can ever be its own grandpa.
  • A hierarchical tree, such as the one modelled in the Fedora repository workspace, is a classic example of a directed acyclic graph of nodes.

Each persistent workspace is identified by a unique name within the repository. There is a default workspace, which has an empty workspace identifier.

Each workspace contains at least one item, the root node. The root node is the only item in the workspace without a parent node; all other items have at least one parent.

Nodes can have zero or more child nodes. Nodes can have zero or more properties. Properties can hold one or more values.

The location of an item in the workspace graph can be described by the path from the root node to that item. The path consists of the name of each interceding node in order from root to target item, much like a file system path.

The name of a item consists of the namespace prefix and a local name component. The namespace prefix must be registered before use.

The local name of a node is limited to the range of valid XML characters (http://www.w3.org/TR/xml/#NT-Char)

#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

except

'/' | ':' | '[' | ']' | '|' | '*'

In addition to a path, every node also has an identifier. In some implementations, the identifier is independent of the path and provides an identity to the node that is stable across moves within the workspace.

Some nodes may contain a fcr:content property consisting of a binary payload with a length and digest. (These nodes are often leaf nodes in the graph).

The content of the fcr:content property is de-duplicated across the repository. 

Properties may be single or multi-valued, and are typed. Some properties are reserved for internal-use only (e.g. those in the fedora-internal namespace), but can otherwise be used freely by implementors. By default, properties are multivalued string types.

  • No labels