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)
Child object: Scan of postcard front (large image object) - Order 1 of 2
Child object: Scan of postcard back (large image object) - Order 2 of 2
Parent object: Slides of a presentation (PDF content model)
Child object: Video of the presentation (video content model)
This module requires the following modules/libraries:
Install as usual, see this for further information.
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:
"Islandora Compound Object Navigation" block.
"Islandora Compound Object JAIL Display" block. This uses the JAIL library, which allows for lazy loading of images. This will increase performance on compounds with many children.
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).
Only allow compound objects to have child objects associated with them.
Checked: you can only add child objects to Islandora objects with the "Compound Solution Pack" type. [With this option checked, whenever you delete a Compound Object, Islandora will not delete the child object(s). It only removes the relationship predicate from the child objects.]
Unchecked: all objects can have child objects.
If all objects can have child objects, then:
you run the risk of having orphan child objects if you ever delete a "parent" object that does not use the compoundCModel Content Model. This is because Islandora does not remove the relationship predicates from child objects if the parent wasn't a "Compound Object."
Be careful with "Generate a thumbnail for compound objects from their first child" because it will replace the parent object's existing thumbnail when a child is added or re-ordered
Generate a thumbnail for compound objects from their first child.
Checked: When the first child is added or changed through removal/reordering, the thumbnail of the first child will be attached to the parent as a TN datastream.
This will overwrite any existing thumbnail on the parent, and if the first child does not have a TN datastream, then the parent's TN datastream (if it exists) will be purged. This will occur even if the parent is not a Compound CModel object, which may be a bug:
Getting issue details...STATUS
Unchecked: No thumbnail is generated and a system default thumbnail will display
Note: By default, objects of type Compound CModel do not have thumbnail datastreams.
Hide child objects in RI results
Checked: Child objects will not be displayed in the Islandora browse (collection display). Only parent objects will display.
Unchecked: Child objects and parent objects will be displayed in the Islandora browse.
Hide child objects in Solr results
Checked: Child objects will not be displayed in Solr search results. Only parent objects will display.
Unchecked: Child objects and parent objects will be displayed in the Islandora search.
This option will hide child objects in user searches, but may also hide child objects in other places in the interface if Solr is being used to provide back-end functionality. See improvement ticket:
Getting issue details...STATUS
When enabled, if you would like the Compound object set to be discoverable via Solr, then all metadata relating to the parent/children must be present in the parent object's datastreams. However, if the parent has the Compound CModel, the user will only ever be able to see the metadata of the children. Thus, repository managers may need to maintain metadata in two places.
Solr Filter Query
This is the query that enables the "Hide child objects in Solr results" function. The default value is `-RELS_EXT_isConstituentOf_uri_mt:[* TO *]`
Child relationship predicate
This is the statement in the RELS-EXT metadata that associates child objects with parent objects. The default value is `isConstituentOf`
Use alternative, autoloading display for compounds?
Checked: The "Islandora Compound Object JAIL display" block will be populated (dependencies and blocks also need to be configured. See the documentation for "Installation" and "Display" for more information.)
Unchecked: The "Islandora Compound Object Navigation" block will be populated (block also needs to be configured. See documentation for "installation" and "display" for more information.)
Use Derivative hooks for parent thumbnail updates?
Checked: If the parent object is a Compound CModel, then changes to the TN of the first child will cause the TN of the parent to be updated. This is independent of the "Generate a thumbnail for compound objects from their first child" and will occur even if that option is turned off.
Unchecked: Changes to the first child of a Compound CModel object do not change the parent's TN.
Display compound object parents in the breadcrumbs on children objects
Checked: The parent object will appear in the breadcrumb navigation.
Unchecked: The parent object will not appear in the breadcrumb navigation. If child objects are members of other collections, those paths will be shown in the breadcrumbs.
Redirect to first child when a compound object is requested.
Checked: When navigating to the page of a Compound CModel object with children, redirect the user to the page of the first child.
Unchecked: On the page of a Compound CModel object with children, remain "on" the parent object (per the URL) but display the first child's content and metadata (default).
This can cause confusion about which object is currently being viewed. When unchecked, the user sees the first child's metadata and content, but the Manage tab, and any contextual blocks, views, or anything else controlled by the Context module, understands the user to be on the parent's page.
However, the redirect option will also hinder administrators attempting to navigate to the parent. Hence, links to "Manage parent" are provided to authorized users in the compound navigation blocks.
Compound Member Query
SPARQL - Does a SPARQL query with filters. Generally faster than the default option.
SPARQL - Use this option for fully compliant SPARQL triple stores. Does not work with Mulgara.
Solr (requires Islandora Solr) - uses Solr to find child objects. This works even if "Hide child objects in Solr results" is checked.
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).
Add children to the parent object.
Child objects must already exist in your repository before you can add them.
This can be done either through the parent object's Manage > Compound tab, or the child object's Manage > Compound tab.
Even from the parent, child objects can only be added one at a time.
The "Add child object" and "Add Parent Object" fields have an autocomplete function that searches for existing objects by label or PID.
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).
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.
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 theJAIL 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.
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:
Islandora Compound Object Content Model (islandora:compoundCModel)