Overview

The Compound Solution Pack allows you to define Parent-Child relationships between Islandora objects. Users can easily navigate between a parent's child objects as though they are an "ordered set". Parent objects may have the Compound Object content model, or (optionally) any content model. "Child" objects may have any content model. The parent-child relationship is recorded as a (configurable) predicate in the RELS-EXT datastream of the child objects, along with an ordering which uses a predicate unique to the parent object.

Navigation is provided through one of two blocks which must be placed in a region under Structure > Blocks.

Objects can be added, removed, and reordered from the parent object's Manage > Compound tab.

Example use cases:

Parent object: Postcard (the compound object, using the Compound content model)

Parent object: Slides of a presentation (PDF content model)

Dependencies

This module requires the following modules/libraries:


This module has the following as optional requirements for certain features:

For Solr search integration, including optional Solr backend:

For lazy-loading with the JAIL (Jquery Asynchronous Image Loader) Display:

Downloads

Release Notes and Downloads

Installation

Install as usual, see  this  for further information.


Configuration

First, enable one of the following blocks to allow navigation between members of a compound object.

Navigation between members of a compound object requires one of the following two blocks to be placed:

If using the lazy loading option, the  JAIL  library must be present within sites/all/libraries/JAIL, and the "Use alternative autoloading display for compounds" configuration toggle must be enabled (see below).


Module options can be set at Administration » Islandora » Solution pack configuration » Compound Object Solution Pack (admin/islandora/solution_pack_config/compound_object).

  1. Only allow compound objects to have child objects associated with them.
  1. Generate a thumbnail for compound objects from their first child.
  2. Hide child objects in RI results
  3. Hide child objects in Solr results
  4. Solr Filter Query
  5. Child relationship predicate
  6. Use alternative, autoloading display for compounds?
  7. Use Derivative hooks for parent thumbnail updates?
  8. Display compound object parents in the breadcrumbs on children objects
  9. Redirect to first child when a compound object is requested.
  10. Compound Member Query




Usage


  1. Designate a parent object - either by creating an object of type Compound CModel, or (with the appropriate configuration option enabled) an existing object.

    If using a non-Compound object as the parent, then it will appear as the "first child" in the Compound Navigation block (JAIL or regular).


  2. Add children to the parent object. 
  3. Click "Save".

If the option to do so is enabled, this will cause the parent object's thumbnail to be replaced by the TN of the first child.

To reorder objects, go to the parent object's Manage tab, select "Compound", and use the "Reorder" list. If you do reorder the child objects, be sure to click "Save changes" in the "Reorder" fieldset.

Child objects can be removed from parent objects from the parent object Manage >Compound tab. This removes the association from the RELS-EXT metadata and if the child has no other parent compound or collection objects, will delete the child object as well.

As of 7.x-1.12, deleting a parent compound object will also delete the child objects if they have no other parents (either compound parents or collection parents).

Display

If the parent object has the Compound content model, then its default view will present the "landing page" (content and metadata) of its first child object. If the parent object uses another content model, then it will display its own content and metadata.

Navigation Block

There are two block options for displaying compound objects within Islandora. The default "Islandora Compound Object Navigation" block will provide navigation controls and loading of all objects related to the parent compound. The other option "Islandora Compound Object JAIL Display," is a block using the JAIL library which allows for "lazy loading" of images. This allows the block to load images only when they are needed, which will greatly increase performance on compound objects with many children. See the "Configuration" section for more information about the two display options.

Compound Object Solution Pack Blocks

Theme

The "Islandora Compound Object Navigation" block can be themed. Use the hook: theme_islandora_compound_prev_next().

Correcting out-of-date child object relationships

Previous versions of this module (Islandora 7.x-1.2 and earlier) had a different predicate in the RELS-EXT to associate child objects with parent objects. To update to the new compound object predicate, run the drush command `update_rels_predicate` from the command line. This will update the predicates of existing Compound CModel objects from `isPartOf` to `isConstituentOf`. This command accepts no arguments.

Content Models, Prescribed Datastreams and Forms

The Compound Solution Pack comes with the following Content Models:

A parent object created using the Compound Solution Pack's compoundCModel will have the following datastreams:

RELS-EXT

Default Fedora relationship metadata

MODSMODS record, created at time of ingest
DCDublin Core record
TN

Thumbnail image, created at time of ingest

The Compound Solution Pack comes with the "Compound Object MODS form" for editing the MODS datastream (admin/islandora/xmlform).

Sample RELS-EXT for Parent Object (Compound Object)

<rdf:RDF xmlns:rdf=" http://www.w3.org/1999/02/22-rdf-syntax-ns# " xmlns:fedora="info:fedora/fedora-system:def/relations-external#" xmlns:fedora-model="info:fedora/fedora-system:def/model#" xmlns:islandora=" http://islandora.ca/ontology/relsext# ">
    <rdf:Description rdf:about="info:fedora/islandora:3">
        <fedora:isMemberOfCollection rdf:resource="info:fedora/islandora:compound_collection"></fedora:isMemberOfCollection>
		<fedora-model:hasModel rdf:resource="info:fedora/islandora:compoundCModel"></fedora-model:hasModel>
   </rdf:Description>
</rdf:RDF>

Sample RELS-EXT for Child Object (Large Image Object)

<rdf:RDF xmlns:fedora="info:fedora/fedora-system:def/relations-external#" xmlns:fedora-model="info:fedora/fedora-system:def/model#" xmlns:islandora=" http://islandora.ca/ontology/relsext# " xmlns:rdf=" http://www.w3.org/1999/02/22-rdf-syntax-ns# ">
    <rdf:Description rdf:about="info:fedora/islandora:2">
      <fedora:isMemberOfCollection rdf:resource="info:fedora/islandora:sp_large_image_collection"></fedora:isMemberOfCollection>
      <fedora-model:hasModel rdf:resource="info:fedora/islandora:sp_large_image_cmodel"></fedora-model:hasModel>
      <fedora:isConstituentOf rdf:resource="info:fedora/islandora:3"></fedora:isConstituentOf>
      <islandora:isSequenceNumberOfislandora_3>1</islandora:isSequenceNumberOfislandora_3>
    </rdf:Description>
  </rdf:RDF>


Troubleshooting/Issues

Having problems or solved a problem? Check out the Islandora google groups for a solution.