Fedora4 (F4) implements the Linked Data Platform (LDP) W3C Recommendation. Additionally, the Portland Common Data Model (PCDM) has increasingly become adopted as a common content modeling approach in Fedora4.
This guide is designed to describe the details of both LDP and PCDM in the context of F4 by walking through a simple example of a single collection, consisting of a single book that implements page ordering.
Note:
This diagram depicts the logical structure of resources and relationships of a collection ("poe") that consists of a book ("raven") that consists of three pages that are ordered. The following steps will walk through the process of creating this structure from the ground up. |
The ldp:BasicContainers are simply containers of other resources. BasicContainers can contain both other containers as well as ldp:NonRdfSources (or "binaries"). There are three PCDM types here:
Additionally, there are two PCDM relationships that indicate resource membership and file membership:
The descriptions of these resource types and relationships may be found in the detailed Portland Common Data Model page. |
Here we will begin to walk through the mechanics of creating the structures that will facilitate creation of the book and its pages.
Where "pcdm-object.ttl" follows:
Second, create the nested "raven/" pcdm:Object, which is also another ldp:BasicContainer.
Lastly, create an ldp:DirectContainer, "pages/" that will facilitate the establishment of relationships between "raven/" and its constituent pages.
Where "ldp-direct.ttl" follows:
An ldp:DirectContaner is an LDP construct that activates the creation of certain RDF triples when a new resource is added as a child of this container. We will see this in action next! |
Create a new pcdm:Object, "cover/", that is also an ldp:BasicContainer within the "pages/" DirectContainer.
Where "pcdm-object.ttl" follows:
As described in the previous step, the addition of "cover/" automatically creates the following new triple on "raven/"
Restating from the previous step,
|
In the same fashion as the previous step, adding "page0/" to the DirectContainer, "pages/" results in a new auto-generated triple on "raven/" of the form:
|
This step in creating the final page, "page1/", follows the same pattern shown in the previous two steps.
|
In the same way that we used an ldp:DirectContainer to facilitate the auto-generation of triples linking "raven/" to each of the pages, now use the same pattern to auto-generate the creation of triples that link each page pcdm:Object to their various file representations.
Where "ldp-cover-direct.ttl" follows:
Now, any new resource that is added as a child of the DirectContainer "files/" will cause the auto-generation of a new triple on "cover/" that has a predicate of pcdm:hasFile and an object of the new resource. |
Once again, we demonstrate the use of LDP in creating PCDM relationships simply as a result of repository interactions.
Where "cover.jpg" is attached. If you perform a subsequent HTTP HEAD on this new resource, you will see there is a "Link" header of rel="describedby". Update the RDF metadata of the ldp:NonRdfSource to specify that the resource is a pcdm:File, as follows:
Where "pcdm-file.ru" follows:
Repeat for the attached TIFF, cover.tif
After creating the two "cover" resources, an HTTP GET on "cover/" will include the two new triples:
Once again,
|
Here we repeat the exact steps as for the "cover/" above, but for "page0".
Where "ldp-page0-direct.ttl" follows:
|
Here we add the attached page0 files (page0.jpg and page0.tif) to the newly created DirectContainer.
Followed by assigning the type of pcdm:File to the respective RDF Sources found in the "Link; rel=describedby" header of each of the ldp:NonRdfSources.
Where "pcdm-file.ru" follows:
|
|
|