Sunteți pe pagina 1din 413

Islandora 7.x-1.

5
Start

Author: Melissa Anez


Version: 5
Date: 12-May-2015 09:09
Table of Contents
1 Introduction 9

1.1 Who is this Guide for? 9

1.2 What’s in the Guide? 9

1.3 What’s not in the Guide? 9

1.4 Where to Get Help 10

1.5 About Islandora 10


1.5.1 What is Islandora? 10
1.5.2 Who Uses Islandora? 11
1.5.3 Why Would I Use Islandora? 11
1.5.4 Islandora Core Technologies 12
1.5.5 Islandora Diagram 13
1.5.6 What are Solution Packs? 14

1.6 Metadata in Islandora 15


1.6.1 Extensible Markup Language (XML) and Descriptive Metadata 15
1.6.2 Metadata Datastreams in Islandora 15
1.6.3 Crosswalking Metadata Datastreams in Islandora 16

1.7 Islandora Community 16


1.7.1 Coding Standards for Islandora 18

1.8 Accessing our Sandbox 28

2 Usage 30

2.1 Getting Started with Islandora 30


2.1.1 How Islandora Understands Content 30
2.1.2 Managing and Building Collections in Islandora 34
2.1.3 How to Add an Item to a Digital Collection 35
2.1.4 How to Batch Ingest Files 38
2.1.5 How to Create a New Islandora Collection 45
2.1.6 How to Edit an Object's Metadata 48
2.1.7 How to Make Changes to the Datastreams of an Object 52
2.1.8 How to Manage Collection Policies 58
2.1.9 How to Purge an Object 60
2.1.10 How to Purge Multiple Objects from a Collection 62

2.2 Islandora and Ingest Forms 64


2.2.1 About Ingest Forms in Islandora 65
2.2.2 How to Edit/Create Ingest Forms 66
2.2.3 Multi-paged Ingest Forms 97

2.3 Security & Access Control in Islandora 102


2.3.1 Drupal Security and Islandora 102
2.3.2 FedoraCommons Security and Islandora 103

3 Administration 105

3.1 Islandora Core Module 105


3.1.1 Overview 105
3.1.2 Requirements 105
3.1.3 Optional Requirements 105
3.1.4 Downloads 105
3.1.5 Installation 106
3.1.6 Usage 106
3.1.7 Configuration 106

3.2 Solution Packs 107


3.2.1 Overview 107
3.2.2 Dependencies 108
3.2.3 Please see individual solution pack pages for details. 108
3.2.4 General Solution Pack Configuration 108
3.2.5 Audio Solution Pack 108
3.2.6 Basic Collection Solution Pack 110
3.2.7 Basic Image Solution Pack 112
3.2.8 Book Solution Pack 114
3.2.9 Compound Solution Pack 117
3.2.10 Islandora Paged Content 120
3.2.11 Large Image Solution Pack 123
3.2.12 Newspaper Solution Pack 126
3.2.13 PDF Solution Pack 130
3.2.14 Video Solution Pack 132
3.2.15 Web Archive Solution Pack 135
3.2.16 Islandora Scholar 137
3.2.17 Entities Solution Pack 142
3.2.18 Disk Image Solution Pack 149
3.3 Islandora Viewers 150
3.3.1 Islandora Internet Archive Bookreader 150
3.3.2 Islandora JWPlayer 154
3.3.3 Islandora Video.js 155
3.3.4 Open Seadragon 156
3.3.5 Islandora PDF.js 158

3.4 Islandora Utility Modules 161


3.4.1 Image Annotation 162
3.4.2 Islandora BagIt 165
3.4.3 Islandora Bookmark 170
3.4.4 Islandora Checksum 175
3.4.5 Islandora Checksum Checker 177
3.4.6 Islandora FITS 179
3.4.7 Islandora Importer 181
3.4.8 Islandora OAI 183
3.4.9 Islandora OCR 187
3.4.10 Islandora Pathauto 190
3.4.11 Islandora PREMIS 192
3.4.12 Islandora Solr Search 194
3.4.13 Islandora Solr Views 208
3.4.14 Islandora XML Sitemap 211
3.4.15 MARCXML Module 212
3.4.16 Simple Workflow 215
3.4.17 XACML Editor 216
3.4.18 XML Form Builder 223
3.4.19 XML Forms 227

3.5 Dependencies 230


3.5.1 Drupal Modules 231
3.5.2 Packages 234
3.5.3 Djatoka 240

4 Installation 245

4.1 Virtual Machine 245

4.2 Enterprise 245

4.3 Migration/Upgrade 245

4.4 Release Notes and Downloads 245


4.5 Virtual Machine 246
4.5.1 Using VirtualBox 247
4.5.2 Using Vagrant 248

4.6 Enterprise 248


4.6.1 Option 1: Installing the Minimum Islandora Stack 249
4.6.2 Option 2: automated installations (islandora_chef) 312
4.6.3 Installing the Islandora Enhancement Modules 313
4.6.4 Customizing Islandora 319
4.6.5 Troubleshooting the Enterprise Setup 320

4.7 Migration/Upgrade 329


4.7.1 Initial remarks 329
4.7.2 Introduction 329
4.7.3 Migrations 329
4.7.4 Update Drupal from version 7.31 to version 7.36 329
4.7.5 Update Islandora from version 7.x-1.3 to version 7.x-1.5RC1 331
4.7.6 Update Fedora from version 3.7.0 to version 3.8.0 332

4.8 3rd Party Integrations 334


4.8.1 Archidora 334
4.8.2 Digital Humanities 335
4.8.3 DuraCloud 335
4.8.4 iRods 336
4.8.5 ModeShape 336
4.8.6 Pydio 336
4.8.7 Taverna 337

4.9 Release Notes and Downloads 337


4.9.1 Downloads 338
4.9.2 Release Notes 341
4.9.3 Bug Fixes 344
4.9.4 Deprecated 354
4.9.5 Contacts 356
4.9.6 License 356

5 Contribute 357

5.1 Bugs 357

5.2 Testing 357

5.3 Metadata Forms 357


5.4 Documentation 357

5.5 Support 358

5.6 Training 358

5.7 Code 358

6 Appendices 360

6.1 Useful External Links 360


6.1.1 General 360
6.1.2 Xpath References 360

6.2 APPENDIX B - SAMPLES & RESOURCES 360


6.2.1 Custom QUERY Datastream 361
6.2.2 Custom COLLECTION_VIEW Datastream 361
6.2.3 Custom Request Handler 362
6.2.4 XACML Policy (CHILD_SECURITY Datastream) 362
6.2.5 Sample XML Form Definition 364

6.3 APPENDIX C - DATASTREAM REFERENCE 366

6.4 APPENDIX D - SOLR SCHEMA (SEARCH) Term Reference 368

6.5 APPENDIX E - Glossary 371


6.5.1 Collection 371
6.5.2 Collection Object 371
6.5.3 Collection Policy 371
6.5.4 Composite Model (DS-COMPOSITE-MODEL) 371
6.5.5 Content Model 371
6.5.6 Datastream 371
6.5.7 Datastream ID (DSID) 371
6.5.8 Datastream Label 372
6.5.9 Drupal (Content Management System) 372
6.5.10 Drupal Roles 372
6.5.11 Dublin Core 372
6.5.12 Fedora Commons (Repository Software) 372
6.5.13 Faceted Search 373
6.5.14 FOXML 373
6.5.15 Ingest 373
6.5.16 Namespace 373
6.5.17 Object (Also "Fedora Object") 373
6.5.18 Open Source 374
6.5.19 Parent-Type Object 374
6.5.20 Persistent Identifier (PID) 374
6.5.21 Relationship (Also “RDF”) 374
6.5.22 Root Collection 374
6.5.23 Viewer 374
6.5.24 Virtual Machine Image 375
6.5.25 XML Schema 375
6.5.26 XSD 375

6.6 APPENDIX F - GPL LICENSE 375


6.6.1 GNU GENERAL PUBLIC LICENSE 375

6.7 APPENDIX G - All About Tuque 388


6.7.1 Variables repeated often in this guide 388
6.7.2 389
6.7.3 Accessing the Fedora Repository 389
6.7.4 Working with existing objects 391
6.7.5 Working with datastreams 395
6.7.6 Creating new objects and datastreams 399
6.7.7 Accessing an object's relationships 399
6.7.8 Using the Fedora A and M APIs 403
6.7.9 Using the Resource Index 407

6.8 APPENDIX H - Git Workflow and Tips 407


6.8.1 Workflow 408

6.9 APPENDIX X - Bibliography 411


6.9.1 Journal Articles and Published Conference Proceedings 411
6.9.2 Theses, Dissertations, and Coursework 412
6.9.3 Presentations 413
6.9.4 Other 413
Start

Welcome to the Islandora 7.x-1.5 Documentation space.

Looking for downloads? Check out the Release Notes and Downloads

Version 5
8
Start

1 Introduction

1.1 Who is this Guide for?


If you are reviewing Islandora to see if it fits your institution’s needs, this guide will show you
how to access and work with an installation of Islandora, and how to use Islandora on your local
machine.
If you are looking for a complete guide to installing Islandora and its dependencies on your
server, this guide provides technical documentation relating to Islandora. In particular, see the
Enterprise Installation section for step-by-step instructions (Chef/Vagrant scripts are available).
There is also help in this guide for those wishing to customize Islandora for a particular
institution’s needs, and for developers interested in contributing to the project.
If you are looking for developer documentation, go to the Documentation for Developers on
Github.

1.2 What’s in the Guide?


This guide is about the most recent release of Islandora. It starts with an overview of the
software and how to try Islandora out via the online sandbox or virtual image. This is followed by
a user guide to more advanced Islandora features and in-depth installation instructions. The
final chapters cover some Islandora customizations and the community surrounding the project.
An appendix provides important information and resources to help you understand and work
with Islandora.

1.3 What’s not in the Guide?


Code (that's maintained on Github)
In-depth systems configurations (try the deployments repository on Github, or ask the list
for advice. Don't forget to contribute your deployment once you've got one!)
In-depth trouble shooting (join the group lists mentioned below to get help)

Version 5
9
Start

Islandora presentations and information about the Islandora Training Camps (for that,
you should go to islandora.ca)
We don't know. You should tell us! Comment on the lists or write us at community@
islandora.ca.

1.4 Where to Get Help


To ask questions about Islandora, please join and ask a question on our users or developers
email list:
Islandora Google Group (Users)
Islandora-Dev Google Group (Developers)
The most recent version of our code is always available for download from GitHub, at https://
github.com/organizations/Islandora.

1.5 About Islandora

On this page:

What is Islandora?
Who Uses Islandora?
Why Would I Use Islandora?
Islandora Core Technologies
Islandora Diagram
What are Solution Packs?
Solution Packs

1.5.1 What is Islandora?


Islandora is an open-source software framework designed to help institutions, organizations
and their audiences collaboratively manage, and discover digital assets using a best-practices
framework. Islandora was originally developed by the University of Prince Edward Island's
Robertson Library in 2006. Islandora is now implemented and contributed to by an ever-growing
international community.

Version 5
10
Start

Built on a base of Drupal , Fedora , and Solr , Islandora releases solution packs which empower
users to work with data types (such as image, video, and pdf) and knowledge domains (such as
Chemistry and the Digital Humanities). Solution packs also often provide integration with
additional viewers, editors, and data processing applications.
Islandora leverages both the expertise of PHP/Java/Python developers, librarians and other
information-professionals. Islandora is committed to utilizing open standards for data description
and access, as well as high-standards for data stewardship and security over time. Islandora
makes it possible to create, edit, discover, view, and manage digital assets. The system strives
to strike a balance between extensibility and usability, by providing out-of-the box support for
collections, while maintaining an architecture that lends itself to customization to other software
and workflows. The heart of Islandora’s data stewardship model is Fedora - if you are a Fedora
user, you are still capable of accessing and manipulating objects in Islandora’s underlying
Fedora as you would in any Fedora installation. Special consideration for Fedora users is taken
in Customizing Islandora.
More information about Islandora’s core technologies is provided in this introductory chapter.

1.5.2 Who Uses Islandora?


A list of current installations of Islandora is available at http://islandora.ca/islandora-installations.
Islandora also represents a community-based approach to integrating robust open source
software projects together. The Islandora community is comprised of implementers, developers,
service companies, and users working as transparently as possible toward better
documentation and a better, always open-source, code base. Membership formalizes
involvement in the community and community discussion is always active on the developer and
administrator/users Google listservs!

1.5.3 Why Would I Use Islandora?


Islandora addresses the following needs:
Stewardship: Islandora emerges out of an awareness of the massive digitization of data, and
the creation of born-digital materials that require long-term stewardship, and the current
difficulties inherent in providing this stewardship. As software continues to grow and evolve,
Islandora stores important data assets securely and in a manner that preserves the accessibility
and understanding of digital assets.
Collaboration: Increasingly, knowledge is created and maintained online via active
communities of contributors who collaboratively create, edit, review, and catalog information
assets. Islandora emerges out of the need for tools that facilitate collaboration and community
surrounding information in a digital age.

Version 5
11
Start

Access: While the production of information has and continues to increase exponentially, this
information is often difficult to access because it is not cataloged and stored in a way that
optimizes retrieval. For that reason, Islandora is committed to open standards for information
sharing and transferring. Moreover, Islandora attempts to increase the agency of information
specialists, researchers, and librarians, by creating tools that allow for better data management
and knowledge creation. Finally, Islandora is engaged with configurable security for data assets,
allowing for granular control of access to data.
Flexibility: Unlike closed or proprietary software solutions, Islandora code is transparent - the
system’s premise is that institutions will have different reasons for using Islandora, and that their
data and workflows will be different. For that reason, Islandora is built to be modified and
extended. To learn more about developing Islandora, see the chapter discussing the Islandora
Community (Developing Islandora).

Islandora sites are not simple websites! By utilizing Fedora as its repository back-end,
sites running Islandora provide the security and sustainability of a more flexible and
complex system than what is governed in a series of HTML pages or a regular
relational database.

1.5.4 Islandora Core Technologies


Islandora’s core technologies are FedoraCommons repository software, Drupal , and Solr .
FedoraCommons Repository Software lends itself to data stewardship via a unique content and
relationship modeling framework that preserves the integrity of collections and can be modified
to manage any digital asset. This means that Fedora collections are uniquely persistent, no
matter what new software lurks around the corner. In the Islandora system, Drupal acts as an
interaction layer atop Fedora, enabling users to discover, view, and manage Fedora objects.
Drupal is a very popular, module-based system that understands Islandora as a suite of
modules. Through Drupal, Islandora users can create content together, and use
social-networking to enrich Fedora content.
Solr represents an emerging, and important third application used in Islandora – bringing
lightning-fast searching of the Fedora database, including full-text searching of any attached
documents. Solr also allows for results to be refined, using faceting techniques to engage users
in a process of discovery and exploration.

Version 5
12
Start

1.5.5 Islandora Diagram

Version 5
13
Start

1.5.6 What are Solution Packs?


Islandora's Solution Packs provide the framework for the ingestion, organization, and display of
digital assets in a Fedora repository through a front end Drupal web interface. They are the
meat of the Drupal-Islandora-Fedora sandwich. Solution Packs reflect best-practice workflows
emerging as a result of the community’s experience dealing with particular types of data, such
as large-format images, maps, books, magazines, and individual research articles.
Solution packs combine pre-chosen Content Models, Metadata Forms, and Viewers based on
the experience of the Islandora community. Solution packs may be customized to meet the
needs of your collection and institution, or used out of the box to create collections. More
information about installing and using Islandora Solution Packs is provided later on in this guide.
Solution Packs often require additional applications to be installed and configured. An overview
of common dependencies is provided in the Dependencies section.

Solution Packs
Audio Solution Pack
Basic Collection Solution Pack
Basic Image Solution Pack
Book Solution Pack
Compound Solution Pack
Disk Image Solution Pack
Entities Solution Pack
Large Image Solution Pack
Newspaper Solution Pack
PDF Solution Pack
Video Solution Pack
Web Archive Solution Pack
The Solution Packs for the latest Islandora release are always available from the Release and
Downloads page in Islandora's online documentation. What you will find here are links to the
GitHub origins for each module.

Version 5
14
Start

1.6 Metadata in Islandora


Many discipline-specific and community-specific metadata standards have evolved to meet the
challenge of supporting data management and discovery, as well as capturing information and
communicating it to users. Islandora by default tends to use MODS and the DC datastreams
provided natively by FedoraCommons for descriptive metadata, PREMIS for preservation
metadata (leveraging the AUDIT datastream from FedoraCommons), MARCXML for some
ingests, etc. However, Islandora supports any XML-based metadata standard or approach and
leverages xsl for crosswalking and indexing of metadata.

1.6.1 Extensible Markup Language (XML) and Descriptive Metadata


As the proliferation of Descriptive Metadata standards continues to create interoperability and
compatibility issues, XML and its accompanying tools are increasingly viewed as key for
automating and translating metadata. The benefits are widely recognized as reduced effort,
greater consistency of metadata, and enhanced accuracy of metadata.
A representative document defines the XML elements allowed in a given schema; this
representative document has an .xsd file extension.
A mapping document defines how to translate XML elements between schemas; this
document has an .xsl or .xslt extension.

1.6.2 Metadata Datastreams in Islandora


When an object is created in Islandora, a datastream containing Dublin Core XML metadata is
automatically produced and is given "DC" as its DSID. You will most likely want a separate
datastream containing metadata from a richer metadata schema. For this reason, Islandora
Solution Packs usually provide one or more MODS forms (and occasionally other forms) for
storing more complex descriptive metadata. Typically, developers of Islandora Solution packs
will define DSIDs appropriate to the metadata standard being used. For example, Islandora
Solution packs usually store MODS metadata in a datastream with the DSID "MODS."
A user ingesting a new object is presented with the metadata form appropriate for that collection
. Associations between forms and content models can be changed or removed by users of
Islandora as described in the XML Forms section of this documentation. One Islandora content
model may be associated with a number of forms to suit the needs of different collections. In
order to fully utilize the Forms Builder, users will have to have an understanding of XML,
Schema documents, and XPath (the language used to navigate XML documents).

Version 5
15
Start

1.6.3 Crosswalking Metadata Datastreams in Islandora


In order to crosswalk metadata, Islandora makes extensive use of XML transformations, or .xslt.
Transformations serve a number of purposes in the Islandora system. Solution packs provide
default transformations that do things like crosswalk MODS metadata to DC on ingest and edit
of metadata. Both MODS and DC are thus persisted and kept in sync. When creating and
editing forms based on new schemas, systems administrators can also add .xslt files to folders
in an Islandora installation, and make them available for administrators.
The architecture surrounding metadata in Islandora is designed to provide out-of-the box
metadata creation, but also customization. New forms can be created and associated with
Content Models via the Islandora interface. Content Models can be written to define any number
of metadata datastreams, and to call .xslt files to create new datastreams on ingest, and to
update datastreams when metadata is edited. The system leverages the external community by
taking advantage of .xslts that are commonly produced to serve similar use-cases for other
organizations. When installing an Islandora module, explore what metadata datastreams,
transformations, and forms are made available to learn more about what options are available
to you.

1.7 Islandora Community


Islandora software is developed and maintained by a dedicated group of developers, systems
administrators, and librarians. As an open source project, Islandora is constantly undergoing
improvements in its architecture and adding new features. We welcome feedback from the
community and are always seeking new contributors and collaborators.
Here are the spaces that make up Islandora’s community:

GitHub https://github.com/Islandora All of our code repositories are available


at this URL. To submit code to Islandora
, send a pull request. Our release
manager tests and merges code into the
main Islandora repository.

Committers Skype Our developers meet bi-weekly to


Calls review open tickets and review the
status of the code. If you are interested
in attending a developer meeting,
please submit a request to community@
islandora.ca or on the developers
Google Group mailing list.

Version 5
16
Start

JIRA https://jira.duraspace.org/browse/ Our JIRA is the place to submit bugs


ISLANDORA and feature requests relating to
Islandora. It is easy to make an account
so you can submit tickets.

Wiki https://wiki.duraspace.org/display/ This documentation is maintained on a


ISLANDORA/Islandora wiki. If you have an account, you can
edit the wiki.

Islandora.ca http://islandora.ca At Islandora.ca, you will find our most


current news, as well as information
about Islandora events and links to our
community spaces.

Google http://groups.google.com/group/ A place for developers to answer


Groups islandora-dev questions and keep tabs on code
(Developers development
)

Google http://groups.google.com/group/ A place for users and implementers to


Groups ( islandora ask questions and get support
Users)

YouTube http://https://www.youtube.com/user/ Videos and playlists on an assortment


Islandora of subjects and Islandora Camps

Facebook http://www.facebook.com/Islandora A Facebook page where we post


updates and events

Twitter http://twitter.com/Islandora Our Twitter feed. The first place for


news and updates about the Islandora
community.

Interest http://islandora.ca/if/board There are a number of interest groups


Groups that have gathered around various
http://islandora.ca/content/
Islandora topics. Learn about active
establishing-islandora-interest-groups
groups to join, or start your own! http://
islandora.ca/content/
establishing-islandora-interest-groups

Version 5
17
Start

1.7.1 Coding Standards for Islandora


Although notes are provided below, the most up-to-date information for developers will always
be on the Islandora Github Wiki. Please visit here for Developer Documentation. Islandora
develops code using a Continuous Integration development environment to ensure compatibility
and quality of code.
Anyone developing for the Islandora module is to follow the Drupal coding standards (http://
drupal.org/coding-standards). This will be tested at commit time by the Coder Module (http://
drupal.org/project/coder). In order to make things easier, try to test your code with the coder
module before committing code to the islandora GIT. There are also some great pages on the
Drupal Wiki (http://drupal.org/node/147789) about how to setup your favorite Integrated
Development Environment (IDE) to use the Drupal standards.
Here are some examples:
IntelliJ - the Islandora Foundation has a license for contributing Islandora coders.
Netbeans (http://drupal.org/node/1019816)
VIM (http://drupal.org/node/29325)

Islandora Module File Structure and Naming


Briefly, filenames should contain lowercase characters and PHP files (except templates) should
use underscores to separate words in the filename. For a more detailed outline and explanation,
please see: http://github.com/Islandora/islandora/wiki/
Islandora-Module-File-Structure-and-Naming

Documentation Standards in Islandora Development


This page covers the standards for documentation in Islandora code. Most of this page is taken
directly from the Drupal Doxygen and Comment Formatting Standards (http://drupal.org/node/
1354). There have been some modifications specifically for Islandora; when in doubt, refer to
the Drupal standards.
There are two types of comments: in-line and headers. In-line comments are comments that are
within functions. In Islandora, documentation headers on functions, classes, constants, etc. are
specially-formatted comments used to build the API and developer documentation. The system
for extracting documentation from the header comments uses the Doxygen generation system,
and since the documentation is extracted directly from the sources, it is much easier to keep the
documentation consistent with the source code.
There is an excellent Doxygen manual at http://www.stack.nl/~dimitri/doxygen/manual.html. This
page describes the Islandora implementation of Doxygen, and our standards for both in-line and
header comments.

General documentation standards


Version 5
18
Start

General documentation standards


These standards apply to both in-line and header comments:
All documentation and comments should form proper sentences and use proper
grammar and punctuation.
Sentences should be separated by single spaces.
Comments and variable names should be in English, and use US English spelling (e.g., "
color" not "colour").
All caps are used in comments only when referencing constants, for example TRUE.
Comments should be word-wrapped if the line length would exceed 80 characters (i.e.,
go past the 80th column). They should be as long as possible within the 80-character
limit.

In-line comment standards


Non-header or in-line comments are strongly encouraged. A general rule of thumb is that if you
look at a section of code and think "Wow, I don't want to try to describe that", you need to
comment it before you forget how it works. Comments should be on a separate line immediately
before the code line or block they reference. For example:

// Unselect all other contact categories.


db_query('UPDATE{contact}SET selected = 0');

If each line of a list needs a separate comment, the comments may be given on the same line
and may be formatted to a uniform indent for readability.
C style comments (/* */) and standard C++ comments (//) are both fine, though the former is
discouraged within functions (even for multiple lines, repeat the // single-line comment). Use of
Perl/shell style comments (#) is discouraged.

General header documentation syntax


To document a block of code, such as a file, function, class, method, constant, etc., the syntax
we use is:

/*\*
\* Documentation here.
\*/

Doxygen will parse any comments located in such a block.

Version 5
19
Start

Our style is to use as few Doxygen-specific commands as possible, so as to keep the source
legible. Any mentions of functions, classes, file names, topics, etc. within the documentation will
automatically link to the referenced code, so typically no markup need be introduced to produce
links.

Doxygen directives - general notes

/*\*
\* Summary here; one sentence on one line (should not, but can
exceed 80 chars).
\*
\* A more detailed description goes here.
\*
\* A blank line forms a paragraph. There should be no trailing
white-space
\* anywhere.
\*
\* @param $first
\* "@param" is a Doxygen directive to describe a function
parameter. Like some * other directives, it takes a term/summary
on the same line and a
\* description (this text) indented by 2 spaces on the next line
. All
\* descriptive text should wrap at 80 chars, without going over.
\* Newlines are NOT supported within directives; if a newline
would be before
\* this text, it would be appended to the general description
above.
\* @param $second
\* There should be no newline between multiple directives (of
the same type).
\* @param $third
\* (optional) TRUE if Third should be done. Defaults to FALSE.
\* Only optional parameters are explicitly stated as such. The
description
\* should clarify the default value if omitted.
\*
\* @return * "@return" is a different Doxygen directive to
describe the return value of
\* a function, if there is any.
\*/
function mymodule_foo($first, $second, $third = FALSE) {
}

Version 5
20
Start

Lists

\* @param $variables
\* An associative array containing:
\* - tags: An array of labels for the controls in the pager:
\* - first: A string to use for the first pager element.
\* - last: A string to use for the last pager element.
\* - element: (optional) Integer to distinguish between multiple
pagers on one
\* page. Defaults to 0 (zero). * - style: Integer for the
style, one of the following constants:
\* - PAGER_FULL: (default) Full pager.
\* - PAGER_MINI: Mini pager.
\* Any further description - still belonging to the same param,
but not part
\* of the list.
\*
\* This no longer belongs to the param.

Lists can appear anywhere in Doxygen. The documentation parser requires you to follow a strict
syntax to make them appear correctly in the parsed HTML output:
A hyphen is used to indicate the list bullet. The hyphen is aligned with (uses the same
indentation level as) the paragraph before it, with no newline before or after the list.
No newlines between list items in the same list.
Each list item starts with the key, followed by a colon, followed by a space, followed by
the key description. The key description starts with a capital letter and ends with a period.
If the list has no keys, start each list item with a capital letter and end with a period.
The keys should not be put in quotes unless they contain colons (which is unlikely).
If a list element is optional or default, indicate (optional) or (default) after the colon and
before the key description.
If a list item exceeds 80 chars, it needs to wrap, and the following lines need to be
aligned with the key (indented by 2 more spaces).
For text after the list that needs to be in the same block, use the same alignment/
indentation as the initial text.
Again: within a Doxygen directive, or within a list, blank lines are NOT supported.
Lists can appear within lists, and the same rules apply recursively.

Version 5
21
Start

See Also sections

/*\*
\* (rest of function/file/etc. header)
\*
\* @see foo_bar()
\* @see ajax.inc
\* @see MyModuleClass
\* @see MyClass::myMethod()
\* @see groupname
\* @see [http://drupal.org/node/1354]
\*/

The @see directive may be used to link to (existing) functions, files, classes, methods,
constants, groups/topics, URLs, etc. @see directives should always be placed on their own line,
and generally at the bottom of the documentation header. Use the same format in @see that
you would for automatic links (see below).

Links

/*\*
\* (rest of function/file/etc. header)
\*
\* See also @link group_name Link text @endlink
\*/

The @link directive may be used to output a HTML link in line with the text.
You can also use this to make a link to a particular URL (but it is only necessary if you want the
link text to be something other than the URL itself). Example:

\* @link [http://example.com] Link text goes here @endlink

Automatic links

\* This function invokes hook_foo() on all implementing modules.


\* It calls MyClass::methodName(), which includes foo.module as
\* a side effect.

Version 5
22
Start

Any function, file, constant, class, etc. in the documentation will automatically be linked to the
page where that item is documented (assuming that item has a doxygen header). For functions
and methods, you must include () after the function/method name to get the link. For files, just
put the file name in (not the path to the file).

Code samples

\* Example usage:
\* @code
\* mymodule_print('Hello World\!');
\* @endcode
\* Text to immediately follow the code block.

Code examples can be embedded in the Doxygen documentation using @code and @endcode
directives. Any code in between will be output preformatted.

Todos

/*\*
\* @todo Remove this in D8.
\* @todo Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
sed diam
\* nonumy eirmod tempor invidunt ut labore et dolore magna
aliquyam erat, sed
\* diam voluptua.
\*/

To document known issues and development tasks in code, @todo statements may be used.
Each @todo should form an atomic task. They should wrap at 80 chars, if required. Additionally,
any following lines should be indented by 2 spaces, to clarify where the @todo starts and ends.

// @todo Lorem ipsum dolor sit amet, consetetur sadipscing elitr,


sed diam
// nonumy eirmod tempor invidunt ut labore et dolore magna
aliquyam erat,
// sed diam voluptua.
// We explicitly delete all comments.
comment_delete($cid);

@todo statements in inline comments follow the same rules as above, especially regarding
indentation of subsequent comments.

Version 5
23
Start

Documenting files
Each file should start with a comment describing what the file does. For example:

/*\*
\* @file
\* The theme system, which controls the output of Drupal.
\*
\* The theme system allows for nearly all output of the Drupal
system to be
\* customized by user themes.
\*/

The line immediately following the @file directive is a summary that will be shown in the list of
all file in the generated documentation. If the line begins with a verb, that verb should be in
present tense, e.g., "Handles file uploads." Further description may follow after a blank line.

Documenting functions and methods


All functions and methods, whether meant to be private or public, should be documented. A
function documentation block should immediately precede the declaration of the function itself.
For example:

/*\*
\* Verifies the syntax of the given e-mail address.
\*
\* Empty e-mail addresses are allowed. See RFC 2822 for details.
\*
\* @param $mail
\* A string containing an email address.
\*
\* @return
\* TRUE if the address is in a valid format, and FALSE if it
isn't.
\*/
function valid_email_address($mail) {

After the long description, each parameter should be listed with a @param directive, with a
description indented by two extra spaces on the following line or lines. If there are no
parameters, omit the @param section entirely. Do not include any blank lines in the @param
section.
After all the parameters, a @return directive should be used to document the return value if
there is one. There should be a blank line between the @param section and @return directive.
If there is no return value, omit the @return directive entirely.

Version 5
24
Start

Functions that are easily described in one line may use the function summary only, for example:

/*\*
\* Converts an associative array to an anonymous object.
\*/
function mymodule_array2object($array) {

If the abbreviated syntax is used, the parameters and return value must be described within the
one-line summary.
If the data type of a parameter or return value is not obvious or expected to be of a special class
or interface, it is recommended to specify the data type in the @param or @return directive:

/*\*
\* Executes an arbitrary query string against the active database.
\*
\* Do not use this function for INSERT, UPDATE, or DELETE queries.
Those should
\* be handled via the appropriate query builder factory. Use this
function for
\* SELECT queries that do not require a query builder.
\*
\* @param object $query
\* The prepared statement query to run. Although it will accept
both named and
\* unnamed placeholders, named placeholders are strongly
preferred as they are
\* more self-documenting.
\* @param array $args
\* An array of values to substitute into the query. If the query
uses named
\* placeholders, this is an associative array in any order. If
the query uses
\* unnamed placeholders \(?), this is an indexed array and the
order must match
\* the order of placeholders in the query string.
\* @param array $options
\* An array of options to control how the query operates.
\*
\* @return DatabaseStatementInterface
\* A prepared statement object, already executed.
\*
\* @see DatabaseConnection::defaultOptions()
\*/
function db_query($query, array $args = array(), array $options =
array()) {
// ...

Version 5
25
Start

Primitive data types, such as int or string, are not specified. It is recommended to specify
classes and interfaces. If the parameter or return value is an array, or (anonymous/generic)
object, you can specify the type if it would add clarity to the documentation. If for any reason, a
primitive data type needs to be specified, use the lower-case data type name, e.g. "array". Also,
make sure to use the most general class/interface possible. E.g., document the return value of
db_select() to be a SelectQueryInterface, not a particular class that implements SelectQuery.

Documenting classes and interfaces


Each class and interface should have a doxygen documentation block, and each member
variable, constant, and function/method within the class or interface should also have its own
documentation block. Example:

/*\*
\* Represents a prepared statement.
\*/
interfaceDatabaseStatementInterfaceextendsTraversable{
/*\*
\* Executes a prepared statement.
\*
\* @param array $args
\* Array of values to substitute into the query.
\* @param array $options
\* Array of options for this query.
\*
\* @return
\* TRUE on success, FALSE on failure.
\*/
public functionexecute($args= array(),$options= array());
}
/*\*
\* Represents a prepared statement.
\*
\* Default implementation of DatabaseStatementInterface.
\*/
classDatabaseStatementBaseextendsPDOStatementimplementsDatabaseSta
tementInterface{
/*\*
\* The database connection object for this statement
DatabaseConnection.
\*
\* @var DatabaseConnection
\*/
public$dbh;
/*\*

Version 5
26
Start

\* Constructs a DatabaseStatementBase object.


\*
\* @param DatabaseConnection $dbh
\* Database connection object.
\*/
protected function__construct($dbh) {
// Function body here.
}
/*\*
\* Implements DatabaseStatementInterface::execute().
\*
\* Optional explanation of the specifics of this implementation
goes here.
\*/
public functionexecute($args= array(),$options= array()) {
// Function body here.
}
/*\*
\* Returns the foo information.
\*
\* @return object
\* The foo information as an object.
\*
\* @throws MyFooUndefinedException
\*/
public functiongetFoo() {
// Function body here.
}
/*\*
\* Overrides PDOStatement::fetchAssoc().
\*
\* Optional explanation of the specifics of this override goes
here.
\*/
public functionfetchAssoc() {
// Call PDOStatement::fetch to fetch the row.
return$this->fetch(PDO::FETCH_ASSOC);
}
}

Notes:
Leave a blank line between class declaration and first docblock.
Use a 3rd person verb to begin the description of a class, interface, or method (e.g.
Represents not Represent).
For a member variable, use @var to tell what data type the variable is.

Version 5
27
Start

Use @throws if your method can throw an exception, followed by the name of the
exception class. If the exception class is not specific enough to explain why the exception
will be thrown, you should probably define a new exception class.

Make sure when documenting function and method return values, as well as member
variable types, to use the most general class/interface possible. E.g., document the
return value of db_select() to be a SelectQueryInterface, not a particular class that
implements SelectQuery.

Documenting Islandora interaction with Fedora


Whenever we interact with Fedora in the comments using either:
@throws
@return
We need to document what is returned on error and what state the Fedora is left in, so that the
error can be reported through Drupal instead of failing silently and whoever is calling the API
can make a choice about what to do next.

Generating Islandora documentation with Doxygen


In order to generate the documentation you need the doxygen package installed.
Download the Doxyfile to your modules/fedora_repository folder and run the command:
doxygen Doxyfile
after the command finishes running the documentation can be found in documentation/html/
index.html
Within the Doxyfile if you change the line:
EXTRACT_ALL = YES
to
EXTRACT_ALL = NO
Then doxygen will only extract information from documented files, instead of trying to extract
information from all files.

1.8 Accessing our Sandbox


The Islandora sandbox is an online installation of Islandora running the most recent code. Every
night the site is refreshed and all content is deleted. Several people may access the installation
at once. In order to maintain security, some options available to a Drupal administrator are
deactivated.

Version 5
28
Start

To access the Islandora Sandbox, visit http://sandbox.islandora.ca and login using the following
credentials:
username: admin
password: islandora
This is an account that will allow you to see Islandora from the perspective of a user who would
add and administer repository content. If you want additional access to feature and the code
base, you can install the Islandora Virtual Machine Image on your local computer.

Version 5
29
Start

2 Usage
Find out more about using Islandora:

2.1 Getting Started with Islandora


This chapter focuses on explaining the way that Islandora understands content, and providing
basic instructions for how you can create, view, update, and delete (purge) content in your
repository. This chapter presumes that you have access to a running instance of Islandora,
either through the online sandbox or a virtual machine image on your local machine. Both the
online sandbox and the VM come with pre-installed collections that will be used as examples in
this documentation.

If you do not have access to an instance of Islandora, please review the Accessing our
Sandbox section.

2.1.1 How Islandora Understands Content


Before accessing and using Islandora, it is important to learn how Islandora understands your
content. Islandora uses Fedora Commons’ flexible digital object model, relationships, and
content model architecture. If you are familiar with these concepts, you may find this section
repetitive, because it borrows heavily from the Fedora Commons documentation to provide what
is most relevant for Islandora.
Understanding Islandora means understanding the following:
Everything in Islandora's repository is an Object
Objects are made up of Datastreams
Objects have Relationships to one another
Objects have Persistent Identifiers (PIDs) that are unique in your repository

Everything in Islandora's repository is an object


Everything in Islandora’s Fedora Commons Repository is an object made up of datastreams. An
object is like a directory or folder full of different files (the datastreams). However, unlike the
folder system on your computer (which contain other folders), Islandora's information
architecture is graph-like, more like a network. There are several kinds of objects, and each
object performs a different function. Islandora's main object types are Content Model Objects,
Collection Objects, and Data Objects.

Version 5
30
Start

Content Model Object


A Content Model Object is a “template” for a particular type of content. Content model objects
are usually built through a Solution Pack. Other analogies are a cookie-cutter or recipe
ingredient list. Fedora Commons has its own notion of a Content Model, which you can read
more about here . This version of Islandora uses the Fedora Commons 3.x content model
architecture.
Unlike previous versions of Islandora (6.x), Islandora 7's content model is very lightweight and
defined in a DS-COMPOSITE-MODEL datastream. The DS-COMPOSITE-MODEL defines what
types of files can be added to an object, including whether these datastreams are optional or
required.

Collection Object
Collection objects are Fedora objects that have "child" objects that are gathered into a collection
in the Islandora display. If you want to make a collection of PDFs in Islandora, you would start
by creating a collection object that has the PDF Content Model. Because of Fedora's ability to
automatically create relationships between objects, every data object you add to this collection
becomes a member of that collection with a content model of PDF.
Every instance of Islandora starts with a root collection object. This collection object has the
Collection Content Model, enabling more collections to be created as children (sub-collections)
of the root collection. These sub-collections can have their own sub-collections, or can contain
any type of data object as defined in the collection policy datastream of each collection.

Data Object
Data objects are the files ingested into the repository and any associated metadata, derivatives,
or related files that should be managed as a single digital asset in the repository. For example,
one image (such as a TIFF file) and its associated datastreams (such as descriptive and
technical metadata, thumbnails, and access derivatives in other formats) make up a “data object
.” Fedora also stores relationship metadata in datastreams that connect objects to parent
collections, content models, and other related objects.

Objects have datastreams


Each object has datastreams, which are the parts of an object.

Version 5
31
Start

Datastreams may include content files (such as a PDF or an image), metadata, or information
about relationships to content models or other objects. Every object in Islandora has at least
three datastreams in common (DC, RELS-EXT, and TN) as well as specialized datastreams to
serve the functions of that object. The relationship of an object to other objects is stored in the
RELS-EXT datastream, simple metadata about the object is stored in the Dublin Core (DC)
datastream, and a display thumbnail for the object is stored in the TN datastream.
For a complete list of datastreams in Islandora, see APPENDIX C - Datastream Reference.

Objects have states


Every object in Islandora can also be set to one or more "states" in Fedora. Fedora states
include "Active," "Inactive," or "Deleted." These states are used in different ways by Islandora
code. By default, only "Active" objects display to anonymous users. Inactive states can be used
for objects that aren't ready to be published (for example, objects waiting for approval in an
ingest workflow). Objects can also be set to a state of "Deleted," which maintains a copy of the
object in the repository but restricts viewing and management to certain roles. This is in contrast
to purging an object, which permanently removes the object and its administrative history from
the repository.

Objects have relationships


Objects in Islandora have relationships to one another. These relationships are stored in a
RELS-EXT datastream in an object, which usually has the label “Fedora Object-to-Object
Relationship Metadata.” This datastream is written in RDF/XML.

Version 5
32
Start

The RDF/XML statements in this datastream will indicate, for example, what collection object(s)
an object belongs to, what content model object it subscribes to, and what its persistent
identifier (PID) is.
A default set of common relationships is defined in the Fedora Relationship Ontology. More
information on digital object relationships is available from the Digital Object Relationships
section of the Fedora Commons documentation. References to these documents are also
provided in the selected reading section of this guide.

Objects have unique, persistent identifiers


Each object in Islandora has a unique identifier called a PID (Persistent IDentifier). No two PIDs
in your repository can be the same. PIDs look like this:

In the first case, the entire PID has been specified by a user. In the second case, the first part of
the PID (the namespace prefix ) has been added by the user, and the system is automatically
assigning a number to make up the second part of the PID. Islandora supports the creation of
PIDs based on UUIDs as well.

Version 5
33
Start

PID namespace prefixes do not need to be meaningful, they just need to be unique. However,
making these namespaces meaningful can help you sort and find items in your repository. For
example, a namespace might refer to the type of content (such as audio:) or it may refer to the
name of an institution or collection (upei: OR stmatthews:). As you navigate Islandora, you will
see PID namespaces mentioned frequently, and you will be prompted to choose PID
namespace prefixes or PID namespaces.
Another way of understanding the PID is as the basis for your repository’s Uniform Resource
Identifiers (URIs) which uniquely identify items in your repository. To learn more about PIDs and
PID namespace prefixes, visit Fedora Commons documentation; specifically, the section on
Fedora Identifiers.

2.1.2 Managing and Building Collections in Islandora


Once you have logged into your Islandora site as an administrator, you can view a list of all
current collections by clicking the Islandora Repository link.
You should see any collections that are installed as part of a Solution Pack, and they will
appear with a default folder icon.

These tutorials assume that you have installed one or more Solution Packs. Please
review the milestone 5 - Installing the Islandora Essential Modules and the Installing
the Islandora Enhancement Modules if you are not sure if you have Solution Packs
installed. If no solution packs are installed, you will not be able to create collections of
content in Islandora.

The following tutorials will guide you through the basics of managing and building your Islandora
collections:

Version 5
34
Start

2.1.3 How to Add an Item to a Digital Collection

You will not be able to ingest unless you install and enable the XML Form Builder
module or another module that implements the ingest registry hook.

Objects are ingested into the Islandora Repository by being added to a digital collection. This
tutorial will run through the steps to creating a new object in Islandora.

1. Navigate to the Islandora Repository


On a standard installation of Islandora 7.x, the Islandora Repository's root page can be
accessed through the address http://path.to.your.site/islandora; this will take you to the
top-level collection.

If the 'Navigation' block has been placed using your site's /admin/structure/block configuration
page, a link to the Islandora Repository will also show up on any page that block has been
enabled on.

2. Choose a collection to add the item to


Each item you ingest into the Islandora Repository will need to be added to a collection. A
collection is represented (by default) by an image of a folder in the repository section of the site
- and the digital collection you choose will need to be already set up with a Content Model in
Collection Policy that matches the MIME type of file you would like to ingest. For more
information on how to create new collections, check out the section How to Create a New
Islandora Collection, or for information on adding or removing Content Models from a collection
policy, check out How to Manage Collection Policies.
In the example we're using here, the name of the collection is shown below the folder in the
image below, and that folder has already been set up to use the 'Islandora Basic Image
Collection' Content Model.

Version 5
35
Start

Click on the folder to enter the collection.

3. Click the collection's 'Manage' tab

This will take you to the collection's administrative page.

4. Click the 'Collection' button

This will bring up a list of ways to manipulate the collection.

5. Choose 'Add an object to this collection'

This brings up the form for a single-object ingest.


If the collection you are ingesting the object into has more than one Content Model applied to its
Collection Policy, the first screen that comes up will contain a drop-down menu similar to the
following:

Version 5
36
Start

Simply choose the Content Model that fits the file you wish to upload, and click 'Next'.

Note
If you have the MARCXML module enabled, you will be prompted to upload a
MARCXML file. If you don't have a MARCXML file, you can ignore this screen and
simply continue with the ingest process.

6. Fill out the object's metadata form


The form for an object varies from Content Model to Content Model. In addition, some content
models may have multiple forms one can choose from; this can also depend on the needs of
the organization who installed Islandora. For production installations of Islandora, it is best to
check with the organization who runs the site for policies regarding which form to use in what
situation, and which fields need to be filled in what way.

7. Upload and ingest a digital file


This can be done in three steps:

1. Choose file to select file inside your computer

2. Upload the file to the server

3. Click the 'Ingest' button to let Fedora turn it into a new object

Below the text box in the image above, you will notice two stipulations - that the file has
both size and type restrictions. Size restrictions can be manipulated by your site
administrator by making changes to the site's php.ini file, to the post_max_size and
upload_max_filesize lines. Type restrictions are set in place by the Content Model
being used and cannot be modified.

Version 5
37
Start

You will receive a message at the top of the screen when your object has been successfully
ingested.

8. View your file in the repository

Upon completion, you will be brought to the new object's page in the collection. You may now
manipulate the file or verify its details.

2.1.4 How to Batch Ingest Files

Before you can batch ingest objects, you will need to have downloaded and installed
the Islandora Batch Importer module. If you want to batch ingest books, you will need
to have downloaded and installed the Islandora Book Batch module.

Version 5
38
Start

For larger collections, Islandora is able to pull multiple files out of a zipped archive and ingest
them into Fedora as a batch. There are a few ways that this can be done. You can upload .zip
archives full of:
files (content) such as images or PDFs
XML metadata that can later have content files added to it
both content files to be ingested and XML metadata to be appended to files
books, formatted with a specific directory structure
This page will run through the specifics of each one. In these examples, we will be
batch-ingesting PDF files into a collection with the 'PDF Solution Pack' content model applied to
its collection policy.

Ingest zipped content

1. Create a .zip archive with your files in it


The process for doing this will vary from operating system to operating system, but on PC, Mac
and Linux at least, a .zip archive can be made in your file browser by highlighting the file or files
you would like to zip, right-clicking, and finding an option similar to 'compress', 'create archive', '
create zipped folder', and so on.
In our example, opening the zipped archive shows our PDFs grouped together:

Version 5
39
Start

2. Navigate to the destination collection and click 'Manage'

This will take you to the collection's management page.

3. Click on the 'Collection' button

This will take you to that collection's options page.

4. Click on 'Batch Import Objects'

This will start the batch import process.

5. If other batch import modules are active, choose 'ZIP File Importer' from
the drop-down menu
The Islandora Batch Importer module comes with several different modules for handling
different types of content. If more than one is enabled, you will need to select the correct one.

In this case, we will be importing objects from a .zip file, so we are going to select that option.

6. Choose the correct options for your batch import


There are a few options on this screen that will need to be set up:

Version 5
40
Start

1. Browse to the .zip file you would like to upload, and then click the 'Upload' button. It may
take a while to move the file to the server.
2. Choose the content models you would like to apply to the objects.

3. Choose the namespace to be applied to the objects. ("Islandora" is given only as an


example.)
4. Click the 'Import' button to begin the batch import process.

This will import all the files from your zipped archive during which new Fedora objects are
created and associated with the specified collection.

Ingest XML files with metadata


If you wish to ingest objects as simply metadata without a file datastream attached, you may do
so by using the batch importer to import a .zip file full of XML forms.
In our example, a .zip file full of XML files has been created. Once the metadata files are fully
ingested, PDF files can be added to the objects as datastreams.

Version 5
41
Start

In this case, we can simply follow the same steps as in the previous example to perform the
batch ingest.

Most Solution Packs look for a file with a MIME type associated with the corresponding
content model. In these cases, when uploading XML-only .zip files, the Book Batch
Importer will show an error saying that derivatives could not be created. This can be
ignored in these cases.

To create the XML files, you can either design them manually in a text editor or XML editor or
use the Form Builder built into Islandora.
To use the Form Builder to create XML records, navigate to http:// path.to.your.site/admin/
islandora/xmlform, find the type of form you would like to fill out, and click the 'view' link beside it
:

Version 5
42
Start

In this case, we will be creating an XML file for a PDF.


Fill out the form with the metadata values you would like, and click the 'Submit' button at the
bottom of the form. This will output raw XML to your browser that you can then paste into a text
editor, similar to the following:

Save this output as an XML file, and add it to your .zip archive.

Make sure you choose the correct content model that you would like to be associated
with the files that will eventually be ingested

Ingest metadata and files at the same time


Zip archives can contain both the content files to be ingested and the metadata files at the same
time. This can be accomplished in the same way as the first example, with a few changes to the
.zip archive itself:

Version 5
43
Start

In the above example, you will notice that each PDF file has a corresponding XML file, and that
the filenames of the PDFs and the XML files are identical in every way – including capitalization
– except for the extension. Files with matching filenames will be ingested together into the same
object.
After creating a .zip archive like above, you can simply follow the steps from the first example to
ingest the batch into the repository.

Not every file in the archive needs to have corresponding datastreams. You could
potentially upload an archive that contains some objects without metadata, some
objects with only metadata, and some objects with both.

Batch Ingest Books


When batch ingesting books, each folder/directory represents one book, and nested folders/
directories represent the pages.
Sample Directory Structure
ZIP File
Book One (Folder) - contains a single metadata file (MODS.xml)
Page 1 (Folder) - contains a single .tiff file (OBJ.tiff)

Version 5
44
Start

Page 2 (Folder) - contains a single .tiff file (OBJ.tiff)


Page 3 (Folder) - contains a single .tiff file (OBJ.tiff)
Book Two (Folder) - contains a single metadata file (MODS.xml)
Page 1 (Folder) - contains a single .tiff file (OBJ.tiff)
Page 2 (Folder) - contains a single .tiff file (OBJ.tiff)
Page 3 (Folder) - contains a single .tiff file (OBJ.tiff)
Within each book, an XML file named "MODS.xml" provides the metadata record. Inside each
folder, a .tiff file, named "OBJ.tiff" become the page. If you have downloaded MARC XML, you
will also be able to upload a file called --METADATA--.mrc (containing binary MARC) in lieu of
the MODS.xml file.

2.1.5 How to Create a New Islandora Collection


All objects added to Islandora need to be placed in a collection.This tutorial will walk you
through the steps to create a new collection in the Islandora Repository.

1. Navigate to the place where the collection will be placed and click '
Manage'
In this example, we will be using a site that contains no objects or collections. In this case, we
will be placing our new collection in the top-level or 'root' collection (in a fresh installation of
Islandora, you can navigate to the root collection by pointing your browser to http://
path.to.your.site/islandora, or by clicking 'Islandora Repository' in the Navigation block).
We refer to a collection contained within another collection as a 'child collection'.
In practice, though, not all child collections need to be placed in the top-level collection. A new
child collection can be placed in any object that contains the 'Collection' content model. This
allows you to create both child collections and sub-child collections in much the way you would
create folders and sub-folders on your computer. However, in Islandora, a collection can be
the child of more than one parent collection.

Click the 'Manage' tab in the collection you would like to place your new child collection into.

Version 5
45
Start

2. Click the 'Collection' button

This will take you to the Collection management page.

3. Click 'Add a child collection to this collection'

This will take you to the form to create a new child collection.

4. Fill out the collection information.

The collection form contains five major steps:

1. Collection Name - This is the name that will show up at the top of the collection's page (
see 'Top-level Collection' in the first image above for an example).
2. Collection PID - This is the Persistent Identifier for this new collection; check APPENDIX
E - Glossary for more information on Persistent Identifiers

3.
Version 5
46
Start

3. Inherit collection policy?- Check this box to copy the parent collection's collection policy
into the new collection. This will include any content models the parent collection was
using. In this example, the only content model in the top-level collection's collection policy
was the 'Collection' content model. so no other unique content models will be pulled.
If the inherit collection policy box is not selected you will need to enter a Children
Namespace - This is the namespace objects in the new collection will use (again, check
the Glossary for more information). You may select any content models which will apply
to this new collection (this will display all content models that are available in your
repository).

4. Inherit XACML policy from: Select from the dropdown menu if you would like to copy
the XACML policy.
5. Create collection - Once the form is filled out, click this button to create the collection.

5. Fill in the MODS Collection metadata form.

If you have the MARCXML module enabled, you will be prompted to upload a
MARCXML file. If you don't have a MARCXML file, you can ignore this screen and
simply continue with the ingest process.

The MODS Collection metadata form allows the user to fully describe collection objects. Once
the form has be filled in, the user can select Ingest to complete the creation of the new
collection object.

Version 5
47
Start

6.View the new collection

You will now be brought to the new child collection's page.

In this example, the new child collection contains no content models that would allow
for ingesting objects. A new content model would need to be assigned to the collection
before the user can begin ingesting new objects. Check the tutorial on How to Manage
Collection Policies to see how to turn this blank collection into a usable one.

2.1.6 How to Edit an Object's Metadata


Islandora allows you to edit the metadata created for an object without having to upload an
entirely new metadata datastream. This tutorial will show you how to find and make changes to
an object's metadata datastream.

Version 5
48
Start

1. Navigate to the object whose metadata needs to be changed and click


the 'Manage' tab

This will bring you to the object's management page.

2. Click the 'Datastreams' button

This will bring you to the object's list of datastreams.

Version 5
49
Start

3. Click the 'edit' button beside the form you wish to change

This will take you to that datastream's form.

Only datastreams created through a form made using Islandora's Form Builder will
have an 'edit' button listed beside them. You can check these forms at Islandora >
Form Builder (admin/islandora/xmlform). By default, a MODS record for each of the
standard Islandora Solution Packs will have been created via one of these forms. If
there is no 'edit' button, you can download the existing datastream, edit it off-line, and
upload it again.

4. If more than one form is associated with the content model being used,
select the form you wish to use for this object

If more than one form is associated with the content model assigned to this object, a dialog box
will appear asking you to choose which form you would like to use. Select a form and click "Next
." this will take you to that metadata datastream displayed in your chosen form.

Version 5
50
Start

To associate multiple forms with a content model, navigate to http:// path.to.your.site/


admin/islandora/xmlform and click on the 'Associate' button beside the form you wish
to add to the content model. More information on how to do this can be found in How
to Edit/Create Ingest Forms.

5. Make changes to the form


This will vary from form to form and content model to content model. In this case, we are going
to add a Description to the example object. Complete the changes and click on the 'Submit'
button at the bottom.

Changes to the object's metadata are now visible on the object's page.

Version 5
51
Start

2.1.7 How to Make Changes to the Datastreams of an Object


If you find that a datastream is incorrect, missing, unnecessary, or could simply use
improvement, it is possible to manually add and remove the datastreams of an object through
the Islandora interface. This tutorial will walk you through the steps of downloading datastreams
, replacing them, or adding new ones.

Adding new datastreams


In this example, we will be adding a new image-type datastream to be stored with the rest of the
datastreams of a basic image - one not supported by the Basic Image Solution Pack, and
therefore not created on ingest.

1. Choose the collection or object you would like to add a datastream to

In this case, we've selected an image from the Basic Image Collection. Click the 'Manage' tab to
continue.

Version 5
52
Start

2. Click the 'Datastreams' button

This will bring you to the datastream management page.

3. Click the 'Add a datastream' button

This will bring you to the datastream adding form.

4. Fill out the datastream adding form

Version 5
53
Start

Add a datastream - Here you will give your datastream an identification (DSID). There
are a few preconfigured datastreams that are recognized by different solution packs, but
your Fedora repository will accept the ingesting of datastreams with any DSID - if they
aren't part of the preconfigured list, they will simply exist as an appended file, without
additional support by Islandora. You can check the standard list of DSIDs for a particular
solution pack in the Solution Packs section of Chapter 5 of this manual. Once a DSID
has been set for a datastream, it cannot be changed unless you re-ingest the datastream
.

Datastream Label - Though necessary, this label can realistically be anything you
choose. Islandora doesn't recognize one label over another; this is simply a
human-readable name to be appended to the datastream for quick identification, but
which can be changed later.
Upload Document - This is the standard form for uploading a file. It can vary between
browsers. This is where you will choose the file to be associated with the datastream you
are creating.
Add Datastream - Once everything is filled out, click this button to start the ingest
process.

5. Wait for the ingest process to complete

Once the process is successfully completed, you will see the above message. You can check if
your datastream has been added properly by navigating to the datastreams management page
of your object and looking for it in the list:

Version 5
54
Start

Removing and replacing a datastream


In this example, we will be replacing the 'thumbnail' datastream of a collection, getting rid of the '
folder' icon and uploading a different image in its stead.

1. Choose the object whose datastream you would like to replace

In this example, we will be working inside the standard Video Solution Pack collection.

2. Click the collection's 'Manage' tab

This will bring you to the collection's management page.

Version 5
55
Start

3. Click the 'Datastreams' button

This will bring you to the datastreams management page.

4. Delete the original datastream

You can do this by clicking the 'delete' button next to the datastream you wish to delete. In this
case, we will be removing the 'TN' datastream, which corresponds to the collection's thumbnail
image.

You will be asked to confirm your deletion; click the 'Delete' button to continue.

Version 5
56
Start

5. Fill out the datastream adding form with the same DSID as the one you
just deleted

You can get to this point by following the same steps as listed in the 'Adding new datastreams'
section above.
In this case, we will be adding a new thumbnail icon using a DSID of 'TN', with an
accompanying label that makes sense.

Thumbnail images are, by default, 128x128 pixel PNG images. Though physically
larger images are acceptable, bear in mind that mismatched thumbnail sizes may
cause objects to be spaced wider apart when viewing them in a list.

6. View your new datastream

Version 5
57
Start

We can now see that our new thumbnail datastream is associated with the object we attached it
to. By simply maintaining the exact same DSID upon ingest, we can replace any datastream for
any object using this same method.

2.1.8 How to Manage Collection Policies


The policies specifying which content models are applied to a collection are stored with the
collection object as a COLLECTION_POLICY datastream, which is viewable on the
Datastreams management page of the collection.
You can manage a collection's content models using the 'Manage collection policy' page. This
tutorial will explain how to navigate to that page and use it.

1. Navigate to the desired collection

Simply click on the collection whose policy you want to manage.

2. Click the 'Manage' tab

This will bring you to that collection's management page.

Version 5
58
Start

3. Click the 'Collection' button

This will bring you to the collection options page.

4. Click the 'Manage collection policy' tab

This will bring up the tool for managing the collection's policies.

5. Edit the collection policy


For each content model you would like to edit in the collection, there are a couple of steps to
take:

Version 5
59
Start

1. The box next to the Content Model PID will need to be checked off. In this example, we
will be adding the 'PDF Solution Pack' model to our collection.
2. A namespace needs to be applied to the content model. In this example, we are changing
it from the default 'islandora' namespace.
3. Once all content models have been selected and configured, click 'Update Collection
Policy' to save your changes.

If your Fedora Repository services multiple sites then namespace decisions have
security implications - any sites using the same namespace will have access to each
others items.

2.1.9 How to Purge an Object


To purge an object is to completely remove it and its record from the repository. This tutorial will
walk you through the steps to purging a single object.

Purging cannot be undone. If you purge an object then the object and its entire
administrative history are removed.

Version 5
60
Start

1. Navigate to the page of the object you would like to delete and click the '
Manage' tab.

You can do this by searching for the object, or navigating to its collection and page through the
repository itself. In this example, we will be removing an object with the 'Basic Image' content
model.

2. Click the 'Properties' button

This will take you to that object's properties management page.

Version 5
61
Start

3. Click the 'Permanently Remove' button

This will take you to the delete confirmation screen.

4. Confirm the deletion by clicking 'Delete' again

After this, the object will be completely removed from the repository.

2.1.10 How to Purge Multiple Objects from a Collection

This action cannot be undone. You will not be asked to confirm your selection of
objects to purge.

For larger batch deletions, Islandora supports removing multiple objects from a collection
simultaneously - including any child collections. This tutorial will walk you through the steps for
purging multiple objects.

Version 5
62
Start

1. Navigate to the collection you want to remove multiple objects from, and
click the 'Manage' tab

This will take you to the collection's management page.

2. Click on the 'Collection' button

This will take you to the collection options page.

3. Click 'Delete members of this collection'

Version 5
63
Start

This will take you to the collection tool that allows you to remove multiple objects.

4. Choose the objects you would like to remove

There are a couple of different ways of doing this:

1. Click the box beside each object you would like to remove to mark it for deletion.

2. Alternatively, you can click the very top box to select all the objects on that page.

3. Click 'Delete selected objects' to confirm the deletion.

You will not be prompted to confirm the deletion. All selected objects will now be removed from
the repository.

To decrease load on the server, Islandora supports display and removal of no more
than 50 objects at a time. If your collection contains more than 50 objects, they will be
displayed across multiple pages, and page navigation options will appear above the
object list. Drupal does not remember checked selections between pages, so you can
only delete what is visible on a single page.

2.2 Islandora and Ingest Forms


Each Islandora Solution Pack comes pre-packaged with at least one ingest form. This is the
form that users with appropriate permissions will see when they are adding (ingesting) new
items into a collection.
A community repository of Islandora Ingest forms is maintained in the Islandora Foundation's
Github account.

Version 5
64
Start

This section will describe how Islandora's forms and content models work together, and
introduce the functions of the XML Form Builder modules. For additional information, including
how to install the XML Form Builder modules, please see the XML Form Builder, XML Forms,
and How to Edit/Create Ingest Forms.
This section assumes that you are either using the Virtual Machine image or http://
sandbox.islandora.ca OR that you have followed instructions for installing and activating the
XML Form Builder modules. Note that use of the Form Builder, particularly advanced use of the
builder, will require a knowledge of XPath, and the schema that you are using (and the XSD that
defines that schema). Additional information is presented later in this guide.

2.2.1 About Ingest Forms in Islandora


Ingest forms are affiliated with content models. This means that a collection object that
subscribes to a given model will make available to users, on ingest, the form that is associated
with the content model. Forms are associated with content models, not collections. A
collection will make available all of the forms associated with a content model to which it
subscribes.

When you use Islandora solution packs, the association to a content model (and its default form
) are made for you:
Note: To learn more about objects in Islandora, please review the introduction.
There may be times when you would like to edit a form. To do this, you can clone the default,
existing form, and then affiliate it with the appropriate content model (so that this form becomes
available to users as part of the ingest workflow).

Version 5
65
Start

Note that all the forms you create and affiliate with a content model will be available in any
collection that subscribes to that content model. This is not ideal in all situations; for example, if
you have made a collection-specific form, it will be available on ingest in other collections.
However, in a multisite configuration, the form will not be available across multiple websites
accessing the same Fedora.

2.2.2 How to Edit/Create Ingest Forms

On this page:

How to Edit an Existing Form


About the Form Builder Interface
How to Create a New Custom Form
Introduction
Before You Begin
Metadata Schemas
Sample XML Record
XML Editors
XML Form Builder
Form Builder Interface
Creating a Form
Setting Form Properties
Adding form fields
Adding a textfield type form field - the dc:title element
Adding the creator element - an element that may have multiple
values
Adding a textarea type form field - the dc:description element
Adding a select type form field - the dc:type element
Adding a datepicker type form field - the dc:date element
Adding a file upload type form field - pdf file uploader
Form Associations Module
Connecting the Form to a Content Model
Form Associations Dialog

Version 5
66
Start

Navigating to a Collection
Adding a PDF to the Collection
Selecting the Associated Form
Entering Metadata

How to Edit an Existing Form


The following section will show you where to access forms in your Islandora installation, and
how to clone and edit a form, and associate it with a content model. This section is for people
who do not have knowledge of XPath, and covers only minimal configuration options. If you are
more familiar with XPath, and XML, then we suggest that you go straight to the section on
creating custom ingest forms, which provides a more technical overview of the interface, as well
as information for creating elements.
To access the XML form builder, log into your Islandora site as an administrator, and navigate
to Islandora > Form Builder (admin/islandora/xmlform). You should see the screen below:

Version 5
67
Start

Here you will see all of the forms currently available. From this point you can create, copy, edit,
view, export, or associate forms. When creating a new form, it is best to start by cloning the
existing form associated with the content model your collection is utilizing.

Don’t know what form you are trying to clone? Visit the details for your solution pack in
this guide to determine the name of the default form. Additional information about
creating new forms is available in Customizing Islandora

In the list of available forms, find the form you want to clone and click “ Copy.” On the next
screen you will be prompted to give your new form a name:

Make sure your name is something that you will remember.

Form names must start with a letter or underscore and they cannot contain
spaces or special characters.

Once you have named your form, click “Copy.”


You will be redirected to the Form editing interface, and receive a message at the top that your
form has been successfully created:

Version 5
68
Start

About the Form Builder Interface


1. Under “Form Properties” you can view the properties of your form.

2. Under “Elements” you can view the fields you have created for your form, as well as
make changes to those fields. Clicking on an element name will allow you to view the way
that element will be created, read, updated, and deleted when you interact with the form,
and the resulting metadata that the form will write.
3. Click “Save” to save changes, and “Save and Preview” to save the changes and render
the form in the preview screen.

Version 5
69
Start

To create a form using a new schema, you will have to create a new form from scratch, or clone
a form of the appropriate schema. This requires knowledge of both XPath and the .xsd affiliated
with that schema. To create a new element, you will also have to be familiar with XPath.
However, there are several simple “tweaking” functions you can perform that do not require
in-depth knowledge of XPath and your schema’s .xsd. For example, you can delete an element
(one that is deemed unnecessary for a user to fill out on ingest) by selecting the element with
your cursor and clicking “Delete.”
Also, you can change the label of a field, or populate the field with a default value (for example,
to pre-populate an author field for a author-specific collection) by selecting the element and
editing the element's configuration properties.

Here, you can change the label users see when interacting with this form field by changing the
value for the “Title” of the element. You can change the description that appears underneath
the entry box by changing the text in the “Description” field. If you want the field to be
pre-populated with the creator’s name, enter the name in the “ Default Value" field. In addition,
if you want to make this field mandatory for you form, select the “ Required” checkbox, and this
field will appear with an asterisk, and the users will not be able to submit this form without filling
in this field. Once you have made these changes, click “ Save and Preview.” You will be able to
view the form as it will appear to its users.

Version 5
70
Start

Here the default “Creator” label has been changed to “Author” and customized instructions for
users appear below this field. The Author field has been pre-populated with a name to prevent
unnecessary repetition for users ingesting items into this collection. However, the user can still
edit this field on ingest if there is a case where the author’s name is different.
Once you have tweaked this form, you will have to associate it with the appropriate content
model in order for this form to appear as an option for users on ingest. To create an association
between your new form and a content model, navigate back to Islandora > Form Builder (
admin/islandora/xmlform) and select "Associate" on the form you wish to associate with a
content model. You will see the following page:

Version 5
71
Start

In order to fill out this form appropriately, ensure that you are familiar with the details of your
solution pack - particularly the name of the content model, and the name of the metadata
stream it prescribes. If you are not sure, please review the Solution Pack documentation for
your installed solution packs.
At the top of the screen, you can see that all existing form associations are listed.
Under "Content Model" begin typing the PID of the content model you wish to associate a form
with, and the name will auto-complete:

Under “Metadata Datastream ID” put in the DSID of the Datastream where your content model
stores its rich metadata (not the DC Datastream). You must use the existing DSID prescribed in
your content model (e.g., MODS, MARCXML, etc.), or this metadata will not appear in your
collection objects. If you do not know what the correct DSID is for rich metadata in your content
model, please review the documentation for the relevant content model. When you have
entered the DSID for the Datastream, click "select" in the “ Title Field.”

Version 5
72
Start

When you do this, you will notice that there is a change in the “ Title Field” drop-down menu.
Islandora populates this drop-down field with the elements in your form, so that you can choose
which element will serve as the source for the object’s label. Most of the time, you will likely
want the object's label to come from the “Title” element. This label can be manually edited after
ingest if ever necessary.
Select which field you would like to use for the object’s label.

The next two options require a little bit more explanation:

The "XSL Transform" file you choose is used by lslandora to crosswalk the schema of your rich
metadata XML to Islandora’s default DC stream. In this case, where you are cloning a form, you
will want to select the default xsl for your content model. This information is provided in the
Solution Pack section of your document. (For more information about Islandora’s use of .xslts,
please review the “Islandora and Metadata” section of the guide. XSLT are called from a folder
within islandora_content_model_forms (in the XML Forms modules).
The “Template Document” is a feature that allows you to submit a form with fields already
completed. Usually, this will be a form that you have created by hand in an XML editor. It is not
obligatory.
Click “Add Association.” Now, whenever you create an object in a collection that is associated
with the content model you have used here, you will see your new form as an option to select in
the drop down menu.

Version 5
73
Start

How to Create a New Custom Form


The following section presumes that you are using the Virtual Machine Image or are visiting http
://sandbox.islandora.ca OR that you have installed and configured the XML Forms module, and
that you have a basic knowledge of XPath and understand metadata schemas. For an overview
of how Islandora handles descriptive metadata, read Chapter 11 - Metadata in Islandora -
Ready for Review (KS). This section will discuss how to create a new form using the Islandora
Form Builder.

Introduction
The XML Forms Builder allows you to create and manipulate XML form templates and
associate them with content models. This allows you to create custom forms to address the
needs of your particular collection, or to pre-populate repeating fields. For example, if a
collection of PDFs was all written by the same author, you may wish to create a custom form for
this collection that has the author’s name pre-populated, so that users ingesting into this
collection will not need to re-enter this information. Using custom forms you can also specify
which metadata elements you wish to use to describe your object, and create validation rules
for particular fields, among other features.
If you are a developer, or somebody looking to install the XML form builder, you will want
to review the section on the XML Form Builder module, which discusses the installation
and configuration of the module.
If you are a user, then the following documentation assumes that you have some
understanding of metadata schemas and XML, as well as Islandora specific concepts
such as Content Models, and Collection Objects. The greater grounding you have in
XPath, XML Form Templates, and XML Schemas (.xsds), the greater use you will be
able to make of the form builder.
Solution Packs are designed to come pre-packaged with suitable forms written in MODS.
These forms can be copied, and edited or modified to suit your needs.
Forms can be created based on any schema.

Before You Begin


Review and install the XML Form Builder module and its dependencies.

Metadata Schemas
Metadata schemas specify the names and properties of elements that can be used in an XML
file that is based on that schema.

Version 5
74
Start

When developing an XML form in the XML Form Builder you’ll need to reference the schema of
the metadata format you are working with. Throughout this document we’ll be using the OAI DC
metadata schema as an example. The OAI DC XML format is the serialization of Simple Dublin
Core metadata descriptions and we’ll be using Dublin Core elements in this example. You can
view/retrieve the schema from http://www.openarchives.org/OAI/2.0/oai_dc.xsd

Sample XML Record


It is helpful to have an example record on hand while developing the form. Ensure that it
matches the version of the XML schema you are working with.
Sample OAI DC Record from a Fedora Repository

<oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/
oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:
schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/
[http://www.openarchives.org/OAI/2.0/oai_dc.xsd]">
<dc:title>Pioneer days & shanty ways</dc:title>
<dc:creator>Eldershaw, Edith V.</dc:creator>
<dc:subject>History</dc:subject>
<dc:subject>Social life and customs</dc:subject>
<dc:description>Edith V. Eldershaw.</dc:description>
<dc:description>Printed by Williams & Crue Ltd.; Summerside, P.E.I
.</dc:description>
<dc:description>Contains "stories", poems, and photographs,</dc:
description>
<dc:publisher>Eldershaw</dc:publisher>
\\
<dc:type>collection</dc:type>
<dc:type>ingested</dc:type>
<dc:format>electronic</dc:format>
<dc:identifier>ilives:257167</dc:identifier>
<dc:language>eng</dc:language>
<dc:coverage>Prince County (P.E.I.)</dc:coverage>
\\
<dc:coverage>Tignish (P.E.I.)</dc:coverage>
<dc:coverage>Prince Edward Island</dc:coverage>
</oai_dc:dc>

XML Editors
When developing a metadata form it can be useful to have an XML editor to test code in.
Typically these editors can help you determine the XPath of an element, whether the output you
are producing is valid, etc. XML editors would include oXygen (commerical), XPontus (
opensource), and there are many others.

Version 5
75
Start

XML Form Builder


XML Form Builder is a Drupal module that integrates the creation of XML based forms into
Islandora. Once a form has been built, it is associated with a content model. This tutorial will
take you through the process of creating a form, associating it with a content model, and
implementing it with a collection. Once it has been created you will be able to create and edit
your metadata.
To use the XML Form Builder navigate to the module in your Islandora site: Islandora > Form
Builder (admin/islandora/xmlform)

Form Builder Interface


When you start the module you are presented with a list of forms (those are the forms that come
bundled with your Islandora install) and a series of options to perform.

Create Form: Select to begin the process of creating a metadata form from scratch or from an
existing form definition file (an XML Form Builder form).
Copy: Copies an existing form, that you can then modify. This is probably be one of the most
common methods you will use to create new forms.
Edit: Edits an existing form.
View: View an existing form. This option is useful when testing input. You can submit a form
and see its XML output.

Version 5
76
Start

Export: Exports an existing form and allows you to save the form XML to your local computer.
Delete: Removes a custom form.
Associate: Links a form with a content model.

Creating a Form

The examples and screenshots below refer to an Islandora 6.x installation. The basic
functions of the form builder are the same, although elements may look slightly
different.

To start creating a form click "Create Form."


In the Create Form dialogue enter a form name - for example we are creating a basic OAI DC
form so a name like oai_dc_basic would be appropriate. If you have an existing XML Form
Builder form you could upload the form definition. We’ll be creating this OAI DC XML form from
scratch, so we can click on "Create" without uploading a form definition.

The module should report that it successfully created a new form called oai_dc_basic.

Version 5
77
Start

This is the main form building/editing interface for creating XML forms and it provides methods for adding
form properties, form fields and a preview pane.

Setting Form Properties

Version 5
78
Start

When creating an XML form the first thing you need to set in the Form Editor is the Form Properties. This
is where having an example of an OAI DC record would come in handy and would provide the
information you need to fill in the Form Properties. Here is the part of the record that you’ll use:

<oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/
oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:
schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/
http://www.openarchives.org/OAI/2.0/oai_dc.xsd">

It provides information about the Root Element Name, the Namespace URI, the location of the
Schema, as well as the various namespaces needed.

Click "Save" once you have the properties entered. Once the form properties have been saved you are
ready to add fields to your form.

Adding form fields


Some schema specify that elements appear in a certain order (an order-based schema), that
certain elements are required, that only certain elements are repeatable, or whether and how
elements can be nested. Refer to your schema documentation and to any guidance it offers in
the creation of records based on the schema. In the schema we are using in this tutorial, Simple
Dublin Core, each of the fifteen elements is optional and may be repeated, but no nesting is

Version 5
79
Start

allowed. We will create a simple form for this exercise that utilizes several Dublin Core elements
. Let’s create a table listing the element names, the form field labels, the types of form fields, the
content of the elements, and whether they are repeatable. We’ll use this information when
adding fields to our form.

Element Label Type Content Repeatable

title Title textfield The title of the work. no

creator Creator(s) tags/tag The creator(s) of the work. yes

description Description textarea A description of the work. no

type Type select A controlled list of terms no

date Date datepicker The date the work was issued or no


published.

subject Subject(s) tags/tag The topic of the work. yes

rights Rights textarea Information about rights held in and over no


the resource.

Adding a textfield type form field - the dc:title element

We can use the information in our table to fill out the " Element Form" pane. We can start with
the title element.
In this part of the form you can enter values for Identifier, Type, Title, Description, Default
Value, and Required. These can be defined as follows:
Identifier: An ID for this form field. It is the Drupal form array key for this element. Typically you
would just enter the name of the element you are describing.
Type: The form field type for this field (textfield, textarea, select, etc.)
Title: The label of the form field as it appears on your form. Typically you would just enter the
name of the element you are describing.
Description: The description of the element that this Element Form is about.
Default Value: The value to be display or selected initially for this element if the form has not
been submitted yet.

Version 5
80
Start

Required: Indicates whether or not the element is required. This automatically validates for
empty fields, and flags inputs as required. Fields with a Type of "file" are not allowed to be
required.

The rest of the form deals with where each element is created, read, updated, and deleted in
the XML tree. This is where it would be useful to understand how XML works and to have a
basic understanding of XPath.
Reviewing our OAI DC XML sample record we can determine the location/context of the title
element.

<oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/
oai_dc/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/
[http://www.openarchives.org/OAI/2.0/oai_dc.xsd]">
<dc:title>Pioneer days & shanty ways</dc:title>

The full XPath in this XML document for the dc:title element would be:

/oai_dc:dc/dc:title

where /oai_dc:dc is the parent element and dc:title is the child element. The Create dialogue is
where we enter the information needed for creating an element in our form. We’ll be entering
information into the Path Context, Path, Type, and Value properties in our example. If you had
an order-based schema, you would also fill in the Schema field. Here are some definitions for
each of those properties:
Path Context: the context at which the XPath action with be executed.
document - the XPath query is run from the root element of the document

Version 5
81
Start

parent - the XPath query is run from the node created/read by its parent’s form field
self - only applies to Delete and Update actions and applies to the node selected by the
Read action.
Path: An XPath to this element’s parent object. This is used to determine where this element is
inserted.
Note: If you specify an XPath that has multiple elements in it then it will generate multiple
elements in the form. If they aren't nested or wrapped in an element then elements will appear
below the Submit button. To prevent this from happening, you'll need to update the XPaths or
the form itself.
Schema: An XPath to the definition of this element's parent. The XPath is executed in the
schema defined in this form's properties. This is used to determine the insert order for this
element.
Type: The type of node that will be created. If XML is specified, an XML snippet is expected in
the Value field.
Value: If the Type is either "element" or "attribute," the name of the element or attribute is
expected here. If the Type is "XML," an XML snippet is expected in which %value% indicates
where the value of the form field will be inserted.
Review the image below and think about how your other OAI DC elements will be created
based on this pattern.
Create action is about selecting the parent node where the new node will be created.

The rest of the form deals with where the element will be read, updated, and/or deleted from.

Version 5
82
Start

Read action is about selecting the node that will be used to populate the form field.
Update action is about updating the node that was used to populated the form field.
Delete action is about deleting the node that the Read action selected.

Note: You can Update or Delete nodes other than the node which is Read - For
example with mods:name … where sub-elements are created with a form field and
additional nodes are automatically created with XML code. We may want to delete/
update the entire mods:name and its sub-elements.

Adding the creator element - an element that may have multiple values

multiple selects
Just a note that the current version of the XML Form Builder does not currently allow
multiple selects. Based on the information in this pull request, users "can still use
unallowed elements such as 'checkbox', 'checkboxes', 'date', 'file', 'managed_file', '
password_confirm', 'radio', 'radios', 'tableselect', 'vertical_tabs', 'weight', 'button', '
image_button', 'submit'. But the builder will no longer allow you to give XML CRUD
actions to these elements, also the 'select' element doesn't allow XML CRUD
combined with multiple."
Users still have the option to create their own forms.

Version 5
83
Start

In some cases you will have multiple occurrences of an element, for example a digital object
may have more than one creator (multiple authors) or may have many subjects that describe it.
The Form Builder has several methods dealing with this use case. In our example OAI DC form
we have decided that there could be multiple creators and the schema allows that. It is a two
step process:

1. create an element with a type of tags,

2. nest another element in the tags type element that has a type of tag.

This image displays the first step of the creation of the creator element.

The second step is to create a nested tag type element. The image below displays the values
for the properties used for this element.

Version 5
84
Start

Adding a textarea type form field - the dc:description element

The "textarea type" of form field should be used for elements that require a description or that
contain a large amount of text.

Version 5
85
Start

Adding a select type form field - the dc:type element

In many cases you will want to provide the user with a list of controlled terms and the select
form field type is used. For the type element our controlled list of terms is based on the DCMI
Type Vocabulary. The Vocabulary provides a general, cross-domain list of approved terms that
may be used as values for the Resource Type element to identify the genre of a resource .
DCMI Type Vocabulary

Term Description

Collection An aggregation of resources.

Dataset Data encoded in a defined structure. Examples include lists, tables, and
databases. A dataset may be useful for direct machine processing.

Event

Version 5
86
Start

A non-persistent, time-based occurrence. Examples include an


exhibition, webcast, conference, workshop, open day, performance,
battle, trial, wedding, tea party, conflagration.

Image A visual representation other than text. Examples include images and
photographs of physical objects, paintings, prints, drawings, other
images and graphics, animations and moving pictures, film, diagrams,
maps, musical notation.

InteractiveResource A resource requiring interaction from the user to be understood,


executed, or experienced. Examples include forms on Web pages,
applets, multimedia learning objects, chat services, or virtual reality
environments.

MovingImage A series of visual representations imparting an impression of motion


when shown in succession. Examples include animations, movies,
television programs, videos, zoetropes, or visual output from a
simulation.

PhysicalObject An inanimate, three-dimensional object or substance. Note that digital


representations of, or surrogates for, these objects should use Image,
Text or one of the other types.

Service A system that provides one or more functions. Examples include a


photocopying service, a banking service, an authentication service,
interlibrary loans, a Z39.50 or Web server.

Software A computer program in source or compiled form.

Sound A resource primarily intended to be heard. Examples include a music


playback file format, an audio compact disc, and recorded speech or
sounds.

StillImage A static visual representation. Examples include paintings, drawings,


graphic designs, plans and maps. Recommended best practice is to
assign the type Text to images of textual materials.

Text

Version 5
87
Start

A resource consisting primarily of words for reading. Examples include


books, letters, dissertations, poems, newspapers, articles, archives of
mailing lists. Note that facsimiles or images of texts are still of the genre
Text.

Source
When adding a select form field in the Form Builder there are two steps:

1. Add the information about the element you are creating

2. Add the terms that will display in the select list for users

1. When adding information about the element we will use the same method that we have
used previously.

2. To add terms to your select form field, click on the "More Advanced Controls" tab in the "
Element Form" pane. Review the image below and enter your terms in the Options panel.

Version 5
88
Start

Adding a datepicker type form field - the dc:date element

For this example we are using the datepicker type of form field. You will want to review your
existing metadata as another type of form field may be more appropriate.

Version 5
89
Start

The remaining two elements for our sample OAI DC XML form, dc:subject (tags, tag) and dc:
rights (textarea), can be built in the same manner as fields of a similar type that we have
already created.
Adding a file upload type form field - pdf file uploader

One additional element that can be added for convenience is a file upload type form field. This
will allow you to browse for a PDF document on your local machine as part of the Islandora
ingest process. The image below illustrates what properties need to be filled in.

Note: the Identifier for this form field type must be ingest-file-location.

Version 5
90
Start

Form Associations Module


Version 5
91
Start

Form Associations Module

Connecting the Form to a Content Model


Once you’ve completed and tested the form you’ve created in the XML Form Builder module,
you can connect that form to an existing content model using the Form Associations module.
You can navigate to the module using this path:
Administer > Content management > Form Associations

In this example we will associate the form we created - oai_dc_basic - with the islandora:sp_strict_pdf
content model. Review the image below to fill out the Form Associations dialog.
Form Associations Dialog

Version 5
92
Start

Navigating to a Collection

Once the association has been successfully created, you can try ingesting new objects into a
collection that has the islandora:sp_strict_pdf content model associated with it. Alternatively,
access the Islandora demo VM which has a PDF collection associated with the islandora:
sp_strict_pdf content model. Navigate to the PDF collection using the image as a guide and try
creating new PDF objects there.

Version 5
93
Start

Once in the collection (you can tell where you are by the breadcrumb), select the Add tab to add
a new PDF to the collection.
Adding a PDF to the Collection

Version 5
94
Start

You will be presented with a dialog requesting two pieces of information: the content model and the form
to use for ingest.
Selecting the Associated Form

Version 5
95
Start

Entering Metadata

You will be presented with the form that we created during this tutorial. You’ll need to fill it in.
Once you’ve completed your data entry, submit the form.

Version 5
96
Start

2.2.3 Multi-paged Ingest Forms


Multi-paged ingest forms are supported in Islandora 7. They allow the user to step though a
series of HTML forms which in turn manipulate one or more Fedora Objects; adding
data-streams, adding relationships, manipulating metadata. Once every form page has been
submitted, Islandora will automatically ingest all the prepared Fedora Objects.
Multi-paged ingest forms have a concept of "steps," such that a steps are a sequential list of
actions. Steps must be traversed to completion, at which point the prepared Fedora objects will
be ingested. There are currently two types of steps supported by the multi-paged ingest forms:
Form steps: Expected to return a normal single paged Drupal Form.
Callback Steps: Expected to execute a single function and render nothing.
For every page request to the multi-paged ingest form, a single form step is executed. Zero or
more callbacks steps may be executed for every page request. Since callback steps don't
render anything to the user they are executed consecutively in the order in which they appear.
For example, we have the series of steps below:
callback_1, callback_2, form_1, callback_3, callback_4, form_2, callback_5

1. Before form_1, renders to the user callback_1 and callback_2 will be executed.

2. When form_1 is submitted, callback_3, callback_4, wile be executed before rendering


form_2.
3. When form_2 is submitted, callback_5 will be executed,

4. Note that all the steps have executed all the prepared Fedora Objects will be ingested.

Version 5
97
Start

Although optional, it's worth noting that typically form/callback steps are expected to also define
undo functions. These revert the changes they have been made to the prepared objects. The
undo functions are called when a user clicks on the previous button in the form and returns to
the previous form step.
To support this a module need only declare what steps they wish to add and what functions
those steps perform.

Adding Steps
To let islandora know what steps you are providing you must implement the
islandora_ingest_steps hook(s):

function hook_islandora_ingest_steps(array $form_state);


function hook_CMODEL_islandora_ingest_steps(array $form_state);

Which can be implemented by modules to conditionally add new steps. These functions are
expected to return an associative array containing the appropriate steps to apply given the
current $form_state:
Each step should consist of a unique name mapped to an array of properties which take
different parameters based upon type:

Shared properties
type: The type of step. Either "form" or "callback".
module: A module from which we want to load an include file.
file: A file to include (relative to the module's path, including the file's extension).
weight: Steps are sorted by weight. The expected range between -50 to 50. The order is
undefined for steps which have the same weight.

Form properties
form_id: The form building function to call to get the form structure for this step.
args: An array of arguments to pass to the form building function, These will be
appended after $form, and $form_state.

Callback properties
do_function: An associate array including:
function: The callback function to be called.

Version 5
98
Start

args: An array of arguments to pass to the callback function.


undo_function: An associate array including:
function: The callback function to be called to reverse the executed action.
args: An array of arguments to pass to the callback function.
Forms do not need to describe their undo. It's assumed to take the form of:

function form_id_undo_submit(array $form, array &$form_state);

Example implementation

/**
* Implements hook_islandora_ingest_steps().
*/
function
islandora_basic_image_islandora_sp_basic_image_islandora_ingest_st
eps() {
return array(
'islandora_basic_image' => array(
'weight' => 10,
'type' => 'form',
'form_id' => 'islandora_basic_image_image_upload_form',
'module' => 'islandora_basic_image',
'file' => 'includes/image_upload.form.inc',
),
);
}

Altering Steps
Sometimes you will want to conditionally include/remove steps based on other steps. You can
do this via the alter hook(s):

function hook_islandora_ingest_steps_alter(array &steps, array $


form_state);
function hook_CMODEL_islandora_ingest_steps_alter(array &steps,
array $form_state);

Version 5
99
Start

Example implementation

/**
* Implements hook_islandora_ingest_steps_alter().
*/
function islandora_marcxml_islandora_ingest_steps_alter(array &$
steps, array &$form_state) {
if (isset($steps['xml_form_builder_metadata_step'])) {
$metadata_step_storage =
islandora_ingest_form_get_step_storage($form_state, '
xml_form_builder_metadata_step');
if (isset($metadata_step_storage['association']) && $
metadata_step_storage['association']['dsid'] == 'MODS') {
$steps['islandora_marcxml_upload'] = array(
'type' => 'form',
'weight' => 1,
'form_id' => 'islandora_marcxml_file_form',
'args' => array(),
'file' => 'includes/file.form.inc',
'module' => 'islandora_marcxml',
);
}
}
}

Persisting information
As you seen in the previous step, there are some functions (
islandora_ingest_form_get_step_storage) that help retrieve and persist information into the form
storage. This allows our steps to share information with one another, as well as manipulate the
list of prepared Fedora Objects.
There are two levels of storage: per step storage and shared storage. Shared storage is first
populated with the configuration that was passed to islandora_ingest_form. Step storage will
often contain custom data related to that particular step, and any submitted values for form
steps:

function &islandora_ingest_form_get_shared_storage(array &$


form_state);
function &islandora_ingest_form_get_step_storage(array &$
form_state, $step_id = NULL);

Version 5
100
Start

And two functions for grabbing the prepared objects, one for grabbing all the objects, and one
for grabbing the current object:

function &islandora_ingest_form_get_objects(array &$form_state);


function &islandora_ingest_form_get_object(array &$form_state);

Example implementation

function xml_form_builder_islandora_ingest_steps(array &$


form_state) {
module_load_include('inc', 'xml_form_builder', 'includes/
associations');
$shared_storage = islandora_ingest_form_get_shared_storage($
form_state);
$metadata_step_storage = &islandora_ingest_form_get_step_storage
($form_state, 'xml_form_builder_metadata_step');
$association_step_storage = &
islandora_ingest_form_get_step_storage($form_state, '
xml_form_builder_association_step');
$association_step_storage['models'] = isset($
association_step_storage['models']) ? $association_step_storage['
models'] : $shared_storage['models'];
$associations = xml_form_builder_get_associations(array(), $
association_step_storage['models'], array());
$metadata_step_storage['association'] = isset($
metadata_step_storage['association']) ? $metadata_step_storage['
association'] : current($associations);
$num_associations = count($associations);
$select_association_step = ($num_associations > 1) ? array(
'weight' => 0,
'type' => 'form',
'form_id' => 'xml_form_builder_select_association_form',
'module' => 'xml_form_builder',
'file' => 'includes/select_association.form.inc',
'args' => array($associations),
) : NULL;
$metadata_step = ($num_associations >= 1) ? array(
'weight' => 5,
'type' => 'form',
'form_id' => 'xml_form_builder_ingest_form',
'module' => 'xml_form_builder',
'file' => 'includes/ingest.form.inc',
'args' => array($metadata_step_storage['association']),
) : NULL;
return array(

Version 5
101
Start

'xml_form_builder_association_step' => $
select_association_step,
'xml_form_builder_metadata_step' => $metadata_step,
);
}

2.3 Security & Access Control in


Islandora
Security in Islandora leverages both Drupal’s Access Control infrastructure (Drupal Roles and
Permissions) with Fedora’s XACML security framework to create a highly flexible framework
that can write restrictions to the datastream and IP level. Additional information about Fedora
security is available at the FedoraCommons wiki (see our Selected Reading Section). Note that
Fedora's restrictions are always enforced over Drupal's, but Fedora XACML policies cannot
grant a user access that they do not have via Drupal permissions.

2.3.1 Drupal Security and Islandora

Namespace Restrictions
In the Islandora configuration pane. (admin/islandora/configure) under "namespaces," an
administrator can set a Drupal site to only allow access to specific namespaces. This is
particularly useful in multisite configurations.

Permissions and Roles


Drupal gives you the ability to divide your site users into different groups, by creating “Roles” for
users. A “Role” defines who your user is, and what they should be able to access, update,
delete, or create in a Drupal site. Roles are managed at admin/people/permissions/roles. Drupal
7 comes out-of-the-box with an administrative role, an anonymous user role (somebody without
an account) and an authenticated user role (somebody with an account, that logs in to the site).
Additional roles can be created and then assigned permissions at admin/people/permissions.
Any module installed will generally make additional types of permissions available. Islandora
modules follow this model. For each Islandora module you install, there will usually be a
permission to configure.
For example:
If you allow a role to add fedora datastreams, users with that role will be able to add a
datastream to an object in your repository (presuming the content model affiliated with
that object has defined the datastream being added as part of the content model).

Version 5
102
Start

If you allow a role to create batch process, users with that role will be able to upload tar
files for ingest.

If you allow a role to delete entire collections, users with that role will be able to purge
entire collections (the collection object and all members) without iterating over all the
member objects manually.
If you allow a role to edit fedora metadata, users with that role will be able to edit the
metadata record for any object.
If you allow a role to edit tags datastream, this functionality appears incomplete.
If you allow a role to ingest new Fedora objects, users with that role will be able to add
items into the repository.
If you allow a role to manage collections, users with that role will have access to some
collection level utilities, such as changing the allowed content models.
If you allow a role to purge objects and datastreams, users with that role will be able to
purge objects, and replace and purge datastreams in an objects.
If you allow a role to view detailed list of content, users with that role will be able to
view the datastream details of a given object (available under the “detailed list of content”
fieldset in any object view)
If you allow a role to view fedora collection, users with that role will be able to view your
collections

2.3.2 FedoraCommons Security and Islandora


Islandora uses the XACML framework in FedoraCommons. XACML (written in eXtensible
Access Control Markup Language) as both an access control policy language implemented in
XML and a processing model that describes how to interpret the policies. In order to use
XACML, you need to have enforced policies in your Fedora configuration file (fedora.fcfg).
XACML policies are first applied when your repository is set up, and these permissions would
be managed by the person installing and maintaining Islandora.
These initial policies are always enforced. No object-specific XACML policy can ever override a
repository-wide XACML policy. This means you cannot use a repository-wide policy to forbid
users to see any objects, and then use XACML to grant viewing rights on particular objects.
However, object-specific XACML can deny rights that are allowed at the Fedora-wide level. You
can author object-level XACML policies (to the DSID and role level) by using the XACML Editor.
Islandora will parse XACML it finds in two places - either the datastream of the object (in the
CHILD_SECURITY or POLICY datastreams) or global XACML policies found at
$FEDORA_HOME/data/fedora-xacml-policies/repository-policies/default

Collection-specific XACML policies


Version 5
103
Start

Collection-specific XACML policies


The CHILD_SECURITY Datastream of a collection object is an XACML policy file. Once this
Datastream has been added, all objects that are ingested from that point onward will have a
POLICY Datastream that enforces the CHILD_SECURITY policy on the members of a collection
. XACML overrides Drupal security. So, for example, if you have a Drupal role that says you are
allowed to add Datastreams, you will be allowed to add Datastreams to all objects except
objects that have a XACML policy that denies it. To learn more about XACML policies at the
Collection Object level, please go to the CHILD_SECURITY section of Chapter 7 - Customizing
Islandora.

Global XACML Policies


XACML also provides default policies that restrict access to management functions in the
Fedora repository (API-M) to the Fedora administrator, or permit any member of the public to
access and view the Fedora Repository (API-A). XACML can establish other basic controls,
such as allowing only localhost to access management functions in the repository.
For more information about writing custom global xacml policies, visit the Fedora XACML Policy
Writing Guide: https://wiki.duraspace.org/display/FEDORA38/Fedora+XACML+Policy+Writing+
Guide
For more information about how Fedora manages security, visit the Fedora Security
documentation: https://wiki.duraspace.org/display/FEDORA38/Security

How does Islandora interpret XACML policies?


Islandora interprets XACML policies using the Drupal filter. The Drupal filter allows Fedora to
authenticate against the Drupal database and it also gathers the roles belonging to users.
These usernames and roles then become available for you to use in your xacml policies. A
sample XACML policy is provided in the modules policy folder in the Drupal module, and it
illustrates how XACML utlizes Drupal usernames and roles in order to provide granular security
in an Islandora site. To discover more about how XACML is interpreted in Islandora, view the
SecurityClass.inc file in the Islandora Module.

Version 5
104
Start

3 Administration
In this section you will find detailed information about the various modules, solution packs, and
dependencies available for Islandora.

3.1 Islandora Core Module


3.1.1 Overview
The core Islandora module establishes a connection between the front-end Drupal website and
the back-end Fedora Commons repository. Installing and enabling the Islandora module adds
an Islandora Repository link to your site's Navigation menu, and an Islandora link to the
Administration panel. Remember to activate the Islandora Basic Collection Module to use
Islandora.

3.1.2 Requirements
Detailed requirements are outlined in the Installing the Islandora Essential Modules section of
the documentation.

Once you've installed Islandora, remember to install the Islandora Basic Collection
Module in order to begin interacting with Islandora. If you haven't activated the
Islandora Basic Collection Module, you will not be able to use Islandora.

3.1.3 Optional Requirements


Islandora supports translation into other languages, leveraging Drupal's framework. If you want
to support languages other than English download and enable String Translation, and follow our
guide for setting up additional languges.

3.1.4 Downloads
The module can be downloaded from the Islandora GitHub as a zip file.
You may also want to visit the Release Notes and Downloads or the Islandora GitHub home
page.

Version 5
105
Start

3.1.5 Installation
The complete installation guide can be found at milestone 5 - Installing the Islandora Essential
Modules.

3.1.6 Usage
Basic instructions for using the Islandora module can be found in Getting Started with Islandora

3.1.7 Configuration
Once installed, configuration options for the Islandora module can be found on your site at http:/
/path.to.your.site/admin/islandora/configure. The configuration panel is depicted in the
screenshot below.

The three tabs to the left of the screen provide the following areas for configuration:

General Configuration
The Fedora Base URL is the path to the Fedora webapp on your Tomcat (or other)
server. On a default installation, this will be http://localhost:8080/fedora; if your port or
path were changed during installation, these will need to be corrected to reflect that.
The Root Collection PID is the Persistent Identifier fedora will use for your root
collection. This may not need to be changed.
UUID PID Generation adds the option to generate Fedora object PIDs with v4 UUIDs.

Version 5
106
Start

Namespaces
It may be convenient to set up namespace restrictions on your site - for example, to prevent
sharing of objects across multiple sites using the same installation. Restrictions entered can use
the following formats:
Use namespace: to add access to all of the objects using the namespace: PID
Use namespace:object to allow access to a specific object

Excluded DSIDs
To address specific access use cases, this screen allows an administrator to enforce DSID (
Data Stream ID) restrictions. Here you can enter a comma seperated list of DSIDs. A user will
not be able to replace any versionable datastream's latest version if its DSID is entered here.

3.2 Solution Packs


3.2.1 Overview
Islandora Solution Packs are Drupal modules offering custom Content Model Objects,
Workflows, and Ingest Forms. Solution Packs can be downloaded from the Release Notes and
Downloads page.
Solution Packs present a starting point for users with particular types of data, such as books or
audio files. A solution pack will allow users to ingest and edit a particular type of content,
including derivatives and metadata. A solution pack also provides a default empty collection for
users, configured for that type of content.
You may combine solution packs together in collection objects to create collections of mixed
data. Solution Packs can also be edited, extended, and customized to meet the needs of your
organization.
Most Solution Packs support integration with other server-side applications and Drupal modules,
which you must install in order to use their additional functionality.
The following Solution Packs are Available:
Audio Solution Pack
Basic Collection Solution Pack
Basic Image Solution Pack
Book Solution Pack
Compound Solution Pack

Version 5
107
Start

Islandora Paged Content


Large Image Solution Pack
Newspaper Solution Pack
PDF Solution Pack
Video Solution Pack
Web Archive Solution Pack
Islandora Scholar
Entities Solution Pack
Disk Image Solution Pack

3.2.2 Dependencies

3.2.3 Please see individual solution pack pages for details.

3.2.4 General Solution Pack Configuration


Solution packs are Drupal modules. For any solution pack you wish to use, make sure you have
installed the dependencies outlined in the documentation for that module, and any required
Drupal modules, before installing the Solution Pack module. For information about how to install
Drupal modules, please see Installing Contributed Modules (Drupal 7) on Drupal.org.

As of Islandora 7.x-1.3, all solution packs make use of the print hook, which will add a "
print" button to collection and object pages. This button can be toggled on or off at
Administration » Islandora.

3.2.5 Audio Solution Pack

Overview
The Audio Solution Pack adds the ability to create audio collections, by uploading WAV and
MP3 files as objects. These files can then be downloaded by users, or the a relevant player (
JWPlayer or Video.js) can be installed to allow for playing of the file in the View tab. On ingest,
the module can also use an installation of the LAME audio encoder to create derivative audio
files.

Dependencies
Islandora

Version 5
108
Start

Tuque
The LAME Encoder is required for derivative creation
Islandora JWPlayer and its corresponding Islandora module can be used to play audio
files in the View tab (Optional)
Video.js and its corresponding Islandora module can be used to play audio files in the
View tab (Optional)

Downloads
Release Notes and Downloads

Configuration
The Audio Solution Pack configuration options can be accessed at http:// path.to.your.site/
admin/islandora/solution_pack_config/audio and includes the following options:
Path to LAME: Upon installing the LAME Audio Codec, an executable is created on your
server. The Audio Solution Pack module requires the path to this executable to run. On
Linux-based servers, this path can often be found by running:

whereis lame

Viewers
By default, the Audio Solution Pack is unable to play any audio files directly in the browser;
users must install Islandora JWPlayer or video.js to play files.

Content Models, Prescribed Datastreams and Forms


The Audio Solution Pack comes with the following objects in http:// path.to.your.site/admin/
islandora/solution_packs:
Islandora Audio Content Model (islandora:sp-audioCModel)
Audio Collection (islandora:audio_collection)

Version 5
109
Start

An audio file ingested using the Audio Solution Pack's content model and LAME will have the
following datastreams:

RELS-EXT Default Fedora relationship metadata

MODS MODS record filled out during ingest

DC Dublin Core record

OBJ Original audio file uploaded

PROXY_MP3 MP3 derivative created by the LAME encoder

TN Default thumbnail icon for audio objects

The Audio Solution Pack comes with the Audio MODS form.

3.2.6 Basic Collection Solution Pack

Overview
The Islandora Basic Collection Solution Pack module allows Islandora to view and manipulate
objects as a collection. Installing the module allows collections to be created, managed and
viewed, and adds the 'Collection' button to the Manage page of collection objects. It also adds
the Islandora Collection content model to the list of solution packs.

NOTE! This module is required for Islandora to work as


expected.
Without the Islandora Basic Collection Solution Pack, end-users will not be able to
create new collections.

Dependencies
Islandora Core Module
Tuque
NOTE: The collection solution pack requires that the resource index is enabled in Fedora, as it
does all of its queries using the resource index.

Version 5
110
Start

Downloads
Release Notes and Downloads

Usage
Information about the links on an object's 'Collection' button (found on its 'Manage' tab) can be
found in the various subsections under Getting Started with Islandora.

Configuration
Configuration options for the Basic Collection Solution Pack can be found at http://
path.to.your.site/admin/islandora/solution_pack_config/basic_collection, and include the
following options:
The default number of objects to show for a collection: If a collection contains more
than the number of objects displayed here, it will split them up into pages.
Select the default collection view style: Grid view displays object icons and their labels
in a grid, while the List view display object icons, labels and descriptions as a list.
Disable deleting the collection policy: Unchecking this box will allow you to delete and
then replace any collection's policy datastream. This is an advanced technique and
generally should be left checked.

Content Models, Prescribed Datastreams and Forms


The Basic Collection Solution Pack comes with the following objects in http:// path.to.your.site/
admin/islandora/solution_packs:
Islandora Collection Content Model (islandora:collectionCModel)
A collection created using the Basic Collection Solution Pack's content model will have the
following datastreams:

RELS-EXT Default Fedora relationship metadata

COLLECTION_POLICY The collection's policies regarding applied content models and


membership

TN Thumbnail icon

DC Dublin Core record

Version 5
111
Start

MODS MODS metadata record

The Basic Collection Solution Pack comes with the Collection MODS form.

3.2.7 Basic Image Solution Pack

Overview
The Basic Image module adds the ability to create Basic Image collections, which are capable
of displaying GIF, PNG and JPG/JPEG files. Users can view a smaller version of the image on
the object's View tab, or click the image to view it full-size. It also allows for creation of a
thumbnail image datastream during the ingest process.

Dependencies
Islandora
Tuque
ImageMagick

Downloads
Release Notes and Downloads

Configuration
Configure the image-tool kit to use ImageMagick rather than GD in Administration >
Configuration > Media > Image Toolkit (admin/config/media/image-toolkit). If GD is selected, TN
and JPG datastreams will not be generated.

Version 5
112
Start

Content Models, Prescribed Datastreams and Forms


The Basic Image Solution Pack comes with the following objects in http:// path.to.your.site/
admin/islandora/solution_pack_config/solution_packs:
Islandora Basic Image Collection (islandora:sp_basic_image)
Basic Image Collection (islandora:sp_basic_image_collection)
An image object created using the Basic Image Solution Pack's content model will have the
following datastreams:

RELS-EXT Default Fedora relationship metadata

MODS MODS record, created at time of ingest

DC Dublin Core record

OBJ The original image file uploaded

TN Thumbnail image, created at time of ingest

MEDIUM_SIZE A compressed version of the image, used on the object's View page

The Basic Image Solution Pack comes with the Basic image MODS form .

Version 5
113
Start

3.2.8 Book Solution Pack

Overview
The Book Solution Pack module allows for the creation of a book collection, and the ingesting of
pages into that book. Essentially, a 'book' object is a special type of collection into which page
objects can be ingested and organized.
A Book's PDF can be generated from each page. Pages are based on an uploaded pdf of the
entire book or individual jpegs, or tiffs of every page. From the uploaded pages its possible to
generate images for use in the "Islandora Internet Archive Bookreader". It is also possible to
generate PDF files per page. OCR and OCR coordinate data can also be generated from the
uploaded pages.

While books for Islandora 6 and 7 can exist in the same repository, books ingested
through Islandora 6 will not display properly in Islandora 7. A migration script is
required.

Dependencies
Islandora
Tuque
Islandora Paged Content
Large Image Solution Pack is required for creating thumbnail and JPEG datastreams
Islandora OCR is required for creating OCR datastreams
Islandora Internet Archive Bookreader can be used to view books (optional)
Open Seadragon can be used to view pages (optional)
ImageMagick is required for creating PDF datastreams (optional)

Downloads
Release Notes and Downloads

Version 5
114
Start

Usage
The Book Solution Pack module functions slightly different than most other solution packs, in
that it is a collection that acts similarly to a regular data object. Books exists as a collection, but
are able to perform tasks like derivative creation and viewing similar to how other content
models function.
There are a few steps to creating a book using the Book Solution Pack module:

1. Create a new collection, or go to an existing one, and add the 'islandora:bookCModel'


content model to its collection policy
2. Go to that collection's 'Manage' tab, and add an object to the collection (from the '
Collection' section)
3. Fill out the Book MODS form and submit it

You will now be brought to the Book's object page. From here, you can use the Paged Content
module to manipulate the book. Check the Usage section of Islandora Paged Content for more
information on how to add and manipulate pages within a book.

Configuration
The Book Solution Pack configuration page can be found at http:// path.to.your.site/admin/
islandora/book, and includes the following configuration options:

Create Page Derivatives Locally


This section allows you to configure the Book Solution Pack module to create derivative
datastreams for pages. The following derivative datastreams can be set, with their
accompanying dependencies:

PDF ImageMagick

TN, JPEG, JP2 Large Image Solution Pack

OCR, HOCR Islandora OCR

Solr Settings
These two fields define how Solr is able to find the PID of a page's parent book, and that page's
number, respectively. Changing these fields requires a working knowledge of Solr queries
and RDF, and for the most part, they should remain untouched.

Book Viewers and Page Viewers


Version 5
115
Start

Book Viewers and Page Viewers


These two sections change how Islandora handles a request in the the 'View' tab of a Book
object and Page object, respectively. Islandora includes out-of-the-box support for the Internet
Archive Bookreader and OpenSeadragon as book and page viewers; check the links in the
Dependencies section above for more information on installing these components.

Content Models, Prescribed Datastreams and Forms


The Book Solution Pack comes with the following objects in http:// path.to.your.site/admin/
islandora/solution_packs:
Islandora Internet Archive Book Content Model (islandora:bookCModel)
Book Collection (islandora:bookCollection)
A book ingested with all derivative creation options checked will have the following datastreams:

RELS-EXT Default Fedora relationship metadata

MODS MODS metadata form

DC Dublin Core record

TN Thumbnail image

PDF PDF derivative created by ImageMagick

Check Islandora Paged Content for information on an individual page's datastreams.


The Book Solution Pack comes with the Islandora Book MODS form.

Version 5
116
Start

3.2.9 Compound Solution Pack

Overview
The Compound Solution pack module adds the ability to to create what are called "compound
objects." Compound objects gather together objects created with any other Islandora solution
pack. When you create a compound object, a generic parent-child relationship is authored
between the existing objects and the new compound object (implying a sibling relationship
between the objects gathered as "children" of the new compound). These objects are ordered
as part of the compound (so an object becomes "part one" of the compound object). This is
reflected in the RELS-EXT datastream.
The object view of a compound object is replaced by the view of its first child object. After a
compound object is created, the "Islandora Compound Object Navigation" block must be
activated and set in an appropriate region. When a user navigates to a compound object, this
block will render a thumbnail view of all the additional objects linked via the compound object. In
addition, a "Compound" management tab allows for the addition, removal, and reordering of
objects from the compound object.
Configuration options are available through the Compound objects administrative menu (admin/
islandora/solution_pack_config/compound_object)

Dependencies
Islandora
JAIL library
If utilizing the lazy loading image ability of the solution pack, enable the "Islandora
Compound Object JAIL Display" block and ensure the JAIL library is present
within sites/all/libraries/JAIL.

Downloads
Release Notes and Downloads

Installation
Enable the Islandora compound object module (admin/modules). There exists two block options
for displaying compound objects within Islandora: The first is the default "Islandora Compound
Object Navigation" block. Go to admin/structure/block/manage/islandora_compound_object/
compound_navigation/configureto find navigation controls and load all objects related to the

Version 5
117
Start

parent compound. The"Islandora Compound Object JAIL Display" block (admin/structure/block/


manage/islandora_compound_object/compound_jail_display/configure) uses the JAIL library
which allows for lazy loading of images. This allows the block to load images only when they are
being accessed which will greatly increase performance on compounds with many children.

Usage
To create a compound object:
Go to parent collection.
Click "Manage".
Enable the "Compound Object" object under "Collection" tab, then click "Update
Collection Policy".
After adding compound objects to your Collection Policy, you will be able to click the "
Overview" tab and "Add an Object".
Select "Compound Object" then "Next".
Select "Compound Object MODS form" then "Next".
Fill in the form then click "Next". Note that you will not be ingesting an object datastream
at this point, you are just creating an empty "parent" compound object that you will then
be able to add "child" objects to.
After the compound object has been created, you can add "child" objects under "Manage
" > "Compound".
Under the "Add Child Object" field, enter the PID for each object to be added to the
compound object, then click submit. If you do not use drush, you must do this
one-at-a-time for each PID. An autocomplete will also allow you to search for the object
by its label if this is relevant. Once a child has been added to the compound, the view of
the compound will use the metadata and thumbnail from the first object to render the
main object view.

Configuration
The module has documented configuration options at admin/islandora/solution_pack_config/
compound_object.
By default, compound objects will be filtered from Solr search results. To change this, go
to "Islandora" > "Solution pack configuration" > "Compound Object Solution Pack" > and
uncheck the "Hide child objects in Solr results.

Version 5
118
Start

Customization
The "Islandora Compound Object Navigation" block can be themed. See
theme_islandora_compound_prev_next().

Drush
A Drush command has been added, to be run from the command line (Terminal), that will
update the existing rel-predicate of existing compound objects to 'isConstituentOf'. It can be run
with the drush command 'drush update_rels_predicate'. This command accpets no arguments.

Content Models, Prescribed Datastreams and Forms


The Compound Solution Pack comes with the following objects in http:// path.to.your.site/admin
/islandora/solution_packs:
Islandora Compound Object Content Model (islandora:compoundCModel)
Compound Collection (islandora:compound_collection)
An image object created using the Compound Solution Pack's content model will have the
following datastreams:

RELS-EXT Default Fedora relationship metadata

Version 5
119
Start

MODS MODS record, created at time of ingest

DC Dublin Core record

TN Thumbnail image, created at time of ingest

The Compound Solution Pack comes with the Compound Object MODS form .

3.2.10 Islandora Paged Content

Overview
The Islandora Paged Content module is required by the Book Solution Pack and Newspaper
Solution Pack modules, to provide numbered, individual pages as objects. This module takes
files in TIFF format, and is able to create several kinds of derivatives depending on the type of
collection they are being ingested into. Solution Packs that use the Paged Content module are
referred to below as 'Paged Content collections'.

Dependencies
Islandora
Tuque
The Large Image Solution Pack is required to create image derivatives
Ghostscript is used to compile PDF derivatives into a single document

Optional
pdftotext
pdfinfo
Install in Ubuntu/Debian with sudo apt-get install poppler-utils

Provisions
The Book Solution Pack or Newspaper Solution Pack are examples of Paged Content
collections. It is advisable to install one of those solution packs, and check their pages for
additional dependencies.

Downloads
Release Notes and Downloads

Version 5
120
Start

Usage
Adding a collection that uses the Paged Content module (such as Book and Newspaper
Solution Pack) adds a new button to the end of the 'Manage' tab - 'Book', for the Book Solution
Pack, and 'Newspaper' for the Newspaper Solution Pack, for example. It also adds a 'Page'
button to the 'Manage' tab of any page objects added to a Paged Content collection. Clicking on
this button will bring up several options, depending on what components of the module are
selected and enabled:
Add Page - This brings up a page that uses the TIFF uploader form in conjunction with
Tesseract to allow you to choose the file and language of your page, and add it to the
parent Paged Content collection.
Create PDF - This section includes the ability to create either a single page PDF if
selected from a single page's 'Manage' tab, or a PDF of an entire Paged Content
collection if selected from the collection's 'Manage' tab. The resolution of the image can
also be set here. Creating a PDF will overwrite any existing PDF datastream.
Perform OCR - This section includes the ability to create OCR datastreams for a single
page if selected from that page's 'Manage' tab, or OCR datastreams for an entire Paged
Content collection if selected if selected from the collection's 'Manage' tab. If multiple
languages are installed into Tesseract, the option to switch between them will also be
given here. Creating new OCR datastreams will overwrite any existing ones.
Create Images - This section adds the option to create image derivatives if the Large
Image Solution Pack is installed. Any existing image derivatives will be overwritten if this
is used. If this option is selected from a Paged Content collection, the option will be given
to create a thumbnail image for the collection from the first ordered page, updating and
overwriting any existing thumbnail.
Reorder Pages - This section allows a user to re-order the pages in a Paged Content
collection if they are not in their correct place.
Delete Pages - This section allows a user to remove pages from a Paged Content
collection.

Configuration
Few configuration options exist for the paged content module out-of-the-box; most of the
configuration is associated with the relevant, dependent solution pack (book or newspaper). The
configuration page at Administration » Islandora » Solution pack configuration » Paged Content
Module (admin/islandora/solution_pack_config/paged_content) has the following options:

Version 5
121
Start

PDF Derivative Settings


Enter the path to the Ghostscript executable here. This will allow multi-page PDFs to be
compiled using each page in the book or newspaper. More information about installing
Ghostscript on your server can be found at the official project website, http://
www.ghostscript.com/.

There is also an option to set the page label to the page's sequence number. On ingest, each
page's label will be set to its sequence number. When reordering pages, all of the page labels
will be updated with the new sequence numbers.

Content Models, Prescribed Datastreams and Forms


The Paged Content Solution Pack comes with the following objects in http:// path.to.your.site/
admin/islandora/solution_pack_config/solution_packs:
Islandora Page Content Model (islandora:pageCModel)
A page image ingested into a Paged Content collection using ImageMagick, the Large Image
Solution Pack and the Islandora OCR modules, will have the following datastreams:

OBJ Original TIFF file uploaded

Version 5
122
Start

DC Dublin Core record

PDF PDF derivative created by Ghostscript

JP2 JPEG 2000 derivative created by ImageMagick

JPG Smaller JPEG derivative created by ImageMagick

TN Thumbnail icon created from the image during the ingest process

RELS-INT Internal Fedora relationship metadata defining the dimensions of the JP2
datastream

OCR The raw output from Tesseract

HOCR A converted version of the OCR datastream, intended to be more


human-readable

RELS-EXT Default Fedora relationship metadata

The Paged Content Solution Pack does not come with any forms .

3.2.11 Large Image Solution Pack

Overview
The Large Image Solution Pack module supports ingesting and viewing TIF/TIFF files, which by
nature tend to be extremely large in both filesize and resolution. The module supports creation
of derivatives for use when a smaller filesize is necessary, and also supports the installation of
image viewers that can accommodate the larger resolution.

Dependencies
Islandora
Tuque
ImageMagick is required to create image derivatives
Kakadu (bundled with Djatoka)

Version 5
123
Start

To successfully create derivative datastreams, ImageMagick (TN & JPG) needs to be


installed on the server. To create JP2 datastreams, Kakadu is the preferred solution,
but ImageMagick can be used if it has been built with JPEG2000 support.

Downloads
Release Notes and Downloads

Configuration
The Large Image Solution Pack module's configuration page can be found at http://
path.to.your.site/admin/islandora/solution_pack_config/large_image, and contains the
following settings:
Lossless Derivative Creation?: Enabling this will force the Large Image Solution Pack
to use reversible lossless compression when creating JP2 derivatives. When a JP2
original is uploaded, a second "use" copy is created for the JP2 datastream.
Use Kakadu for Image Compression?: The Kakadu software suite can be installed on
your server to take advantage of its much faster kdu_compress program. Users often use
the copy of kdu_compress that comes bundled with Djatoka (see below), but you can
also check out the official website at http://www.kakadusoftware.com/ for download and
installation instructions.
Configure the image-tool kit to use ImageMagick rather than GD in Administration >
Configuration > Media > Image Toolkit (admin/config/media/image-toolkit). If GD is selected, TN
and JPG datastreams will not be generated.

Select configuration options and viewer in Administration > Islandora > Solution pack
configuration > Large Image Collection (admin/islandora/solution_pack_config/large_image).

Version 5
124
Start

To use Kakadu, make sure that kdu_compress and kdu_expand are avaliable to the Apache
user. Often users will create symbolic links from /usr/local/bin/kdu_compress to their
installation of Kakadu that comes bundled with Adore-Djatoka. Make sure that the required
dynamic libriraries that come with Kakadu are accessible to kdu_compress and kdu_expand.
If they are not present, attempting to run either command from the terminal will inform you it's
libraries are missing. You can also use a symbolic link from /usr/local/lib to include these
libraries, remember to restart the terminal so your changes take affect. Also, make sure the php
settings allow for enough memory and upload size: upload_max_filesize, post_max_size and
memory_limit.

Viewers
If no viewers are installed, the Large Image Solution Pack module will use its standard viewer to
display images. For better results, the Open Seadragon library can be installed; check that page
for further instructions. If it is installed, it can be selected here.

Content Models, Prescribed Datastreams and Forms


The Large Image Solution Pack comes with the following objects in http:// path.to.your.site/
admin/islandora/solution_pack_config/solution_packs:
Islandora Large Image Content Model (islandora:sp_large_image_cmodel)
Islandora Large Image Collection (islandora:sp_large_image_collection)
An image ingested using the Large Image Solution Pack's content model using ImageMagick
will have the following datastreams:

RELS-EXT Default Fedora relationship metadata

MODS MODS record filled out during ingest

DC Dublin Core record

Version 5
125
Start

OBJ Original TIFF or JP2 file uploaded

JP2 JPEG 2000 derivative created by ImageMagick or Kakadu

JPG Medium-sized JPEG created by ImageMagick and used in the standard image
viewer

TN Thumbnail icon created from the image during the ingest process

The Large Image Solution Pack comes with the Large image MODS form.

3.2.12 Newspaper Solution Pack

Overview
The Islandora Newspaper Solution Pack is a Paged Content collection that is similar to the
Book solution pack, with a few key differences. Unlike a book collection, a newspaper collection
is intended to represent a single publication, and each object inside that collection is intended to
represent a single issue of that publication. Another level down, each object is intended to
represent a page of that particular issue. The Newspaper Solution Pack is designed to make it
easier to navigate between issues and pages of a single publication - closer to the nature of a
newspaper or magazine - as opposed to a book, which is more commonly read page-by-page.

Dependencies
Islandora
Tuque
Islandora Paged Content
Islandora OCR is required to create OCR and HOCR derivatives
Large Image Solution Pack is required to create thumbnails and other image derivatives
ImageMagick is required to create PDF datastreams
Ghostscript is required to combine PDF datastreams into one issue-wide PDF

Viewers
Open Seadragon can be used to view pages and provides page and issue navigation
and viewing tools
Internet Archive Bookreader can be used to view issues

Downloads
Version 5
126
Start

Downloads
Release Notes and Downloads

Usage

Adding a newspaper, issue and page


The Islandora Newspaper Solution Pack comes with several different content models and the
associated objects are intended to be ingested in a particular order:

1. A child collection is set up and given the Islandora newspaper content model. This
represents the publication to which issues will be added.
2. Inside that collection, a new object is created; this will automatically be given the
Islandora newspaper issue content model.
3. Within that new object, pages are added. These are automatically given the Islandora
newspaper page content model.

Because you will be ingesting multiple issues of a publication that contains extremely
similar MODS records, it is recommended to install the MARCXML Module so that the
MARCXML record from one issue can be uploaded into other issues. Check the
MARCXML Module page for more information on downloading and ingesting
MARCXML files.

Creating issue derivatives


Once pages are added and sorted in an issue, you can use the 'Collection' section of the issue's
'Manage' tab to create derivatives:
Under 'Create PDF', if Ghostscript is installed on your server, you can concatenate
individual PDF page datastreams into one ordered PDF datastream that can be
appended to the issue itself
Under 'Create Images', you can update the issue's thumbnail image if the first page of
the issue has changed.

Page controls
When looking at an individual page, navigation options will be given above the viewing window,
listed below from left to right:

Version 5
127
Start

A drop-down menu to quickly select a page in the current issue


Options to view the entire issue or the entire publication
Links to download any created derivatives
A link to download the original image

Configuration
The Islandora Newspaper Solution Pack configuration page is accessible at http://
path.to.your.site/admin/islandora/solution_pack_config/newspaper, and includes the following
options:

Create Page Derivatives Locally


This section allows you to configure the Newspaper Solution Pack module to create derivative
datastreams for pages. The following derivative datastreams can be set, with their
accompanying dependencies:

PDF ImageMagick

TN, JPEG, JP2 Large Image Solution Pack

OCR, HOCR Islandora OCR

Page Viewers
This section changes how Islandora handles a request in the 'View' tab of a newspaper's page
object. Islandora includes out-of-the-box support for OpenSeadragon; otherwise, no viewer will
be available. Check the OpenSeadragon page for more information on installing this component
.

Version 5
128
Start

Content Models, Prescribed Datastreams and Forms


The Newspaper Solution Pack comes with the following objects in http://path.to.your.site/
admin/islandora/solution_pack_config/solution_packs:
Content Models
Islandora newspaper content model (islandora:newspaperCModel)
Islandora newspaper issue content model (islandora:newspaperIssueCModel)
Islandora newspaper page content model (islandora:newspaperPageCModel)
Default Collection Object
Newspaper collection (islandora:newspaper_collection)
A newspaper issue ingested with all derivative creation options checked will have the following
datastreams:

RELS-EXT Default Fedora relationship metadata

MODS MODS metadata form

DC Dublin Core record

TN Thumbnail image

PDF Concatenated PDF of existing newspaper page images compiled with


Ghostscript

Look at Islandora Paged Content for information on an individual page's datastreams.

Version 5
129
Start

The Newspaper Solution Pack comes with a MODS form that can be used to describe the
Newspaper object and another form that can be used to describe Issue objects. Both of these
forms are considered suggestions and users will want to review and update based on their own
requirements.

Solution Pack Demonstration Video

3.2.13 PDF Solution Pack

Overview
The PDF Solution Pack module adds functionality to Islandora for ingesting and viewing PDF
files. It uses the ImageMagick library and module to create derivative thumbnail and preview
images. Because of the text-based nature of PDF files, it can also be used to create or append
easily searchable text datastreams to the object, which can later be configured through Solr to
appear in searches.

Dependencies
Islandora
Tuque
ImageMagick is required to create derivatives. ( Debian/Ubuntu sudo apt-get
install imagemagick )

pdftotext is required to automatically create a FULL_TEXT data stream. ( Debian/Ubuntu


sudo apt-get install pdftotext )

Downloads
Release Notes and Downloads

Configuration
The configuration options for the PDF Solution Pack module can be found at http://
path.to.your.site/admin/islandora/solution_pack_config/pdf, and include the following:

Text
Users can either upload a text file of their own, or allow Islandora to extract one from the PDF.
Text accompanying the PDF is stored as the FULL_TEXT datastream. If both options are
checked under the Text configuration section, and a valid path to pdftotext is entered,
preference will be given to a supplied text file on ingest.

Version 5
130
Start

Allow users to upload text file with PDF?: This file must be plain text stored in .txt
format.
Store extracted (or supplied) text?: Checking this box, will display an option to enter a
path to the pdftotext executable. This package is not native to most server setups and
will need to be installed manually for this option to be functional. Check the pdftotext
dependency page for more information.

Thumbnail and Preview


These options set the parameters that will be sent to ImageMagick when ingesting a PDF.
ImageMagick will attempt to create these using the first page of the document. Changing these
will simply change the size of the derivatives being created.

Viewers
The PDF Solution pack can utilize the PDF.js viewer to display PDF documents inline. To
enable, navigate to the PDF Solution Pack's configuration page (admin/islandora/
solution_pack_config/pdf) and select the PDF.js as the viewer.

Content Models, Prescribed Datastreams and Forms


The PDF Solution Pack comes with the following objects in http://path.to.your.site/admin/
islandora/solution_pack_config/solution_packs:
Islandora PDF Content Model (islandora:sp_pdf)
PDF Collection (islandora:sp_pdf_collection)
A collection created using the PDF Solution Pack's content model will have the following
datastreams:

RELS-EXT Default Fedora relationship metadata

MODS MODS metadata record created during ingest

Version 5
131
Start

DC Dublin Core record

OBJ Original PDF file uploaded

TN Thumbnail image created by ImageMagick during ingest

PREVIEW Preview image created by ImageMagick during ingest

FULL_TEXT Optional datastream either uploaded during ingest, or created by the pdftotext
executable

The PDF Solution Pack comes with the PDF MODS Form.

3.2.14 Video Solution Pack

Overview
The Islandora Video Solution Pack is used to ingest digital videos into Fedora. It supports
creation of derivatives in various different video formats, and requires the server-side installation
of accompanying codecs to enable this functionality. It can also be configured to stream the
video to a player window on-site using JWPlayer.

Dependencies
Islandora
Tuque
ffmpeg is required if MKV and MP4 derivatives are to be created on the same server as
Islandora. Compliation guides: Ubuntu, CentOS
ffmpeg2Theora is required if OGG and thumbnail derivatives are to be created on the
same server as Islandora (Optional - Instructions)
The Islandora Islandora JWPlayer library (and the Libraries API module) or the Video.js
player are required to play videos in a video object's 'View' tab

FFmpeg version 1.1.1 has been tested. It can be downloaded here

remove the --enable-x11grab flag on the ffmpeg configure.

Version 5
132
Start

Downloads
Release Notes and Downloads

Installation
This installation cam be very tricky, and possibly the most difficult of all components of the
Islandora stack. Please see this post on the Islandora Google Group for details ( please replace
any references to release 7.x-1.3 with 7.x.1-5 ):
https://groups.google.com/forum/#!topic/islandora/wuOjmRTY5Rs

Configuration
The Islandora Video Solution pack can be configured at http:// path.to.your.site/admin/islandora
/solution_pack_config/video, and includes the following options:

Viewers
If players have been correctly installed on the server, you will be able to select which one to use
here.
Keep original file after ingest? - Check this option to retain files uploaded to a video
collection as a datastream appended to the video object

Paths to ffmpeg/Theora executables


For derivative creation, the Video Solution Pack needs to know the location of the binaries that
perform conversion. On Unix-based systems, this can often be done by running:

whereis ffmpeg ffmpeg2theora

and checking for binary package files located in folders called 'bin' (such as /usr/bin, /usr/local/
bin, etc.)

Video conversion in any context is an extremely resource-heavy task that can be very
taxing on the computer performing it. In the case of Islandora, when using these
derivative creation options, the task is called upon and performed by the 'apache' user
on the same server Islandora is running on and that users are performing other tasks
with. When creating video derivatives on ingest, please consider either delaying ingest
to a low-traffic period of time, or performing derivative creation on another machine
altogether.

Version 5
133
Start

Content Models, Prescribed Datastreams and Forms


The Video Solution Pack comes with the following objects in http:// path.to.your.site/admin/
islandora/solution_pack_config/solution_packs:
Islandora Video Content Model (islandora:sp_videoCModel)
Video Collection (islandora:video_collection)
A collection created using the Video Solution Pack's content model will have the following
datastreams:

RELS-EXT Default Fedora relationship metadata

MODS MODS metadata record created during ingest

DC Dublin Core record

OBJ The original video file ingested

MP4 MP4 derivative created during ingest by ffmpeg and used by JWPlayer if no
suitable video exists

OGG OGG audio-only derivative created by ffmpeg2theora

MKV MKV derivative created during ingest by ffmpeg

TN Thumbnail image pulled from a frame of the video by ffmpeg2theora

The Video Solution Pack comes with the Video MODS Form.

Development
If you would like to contribute to this module, please check out our helpful Documentation for
Developers info, as well as our Developers section on the Islandora.ca site.
The Video Solution Pack includes an ingest/purge load test that is disabled and unusable by
default. This particular solution pack was chosen for load testing due to the resource-heavy
process of creating video derivatives and ingesting several potentially-massive files. To enable
and use it:

1. Make sure that the Testing module is enabled and that all prerequisites for derivative
creation are satisfied for the Video Solution Pack.

2.
Version 5
134
Start

2. Edit the islandora_video.info file in this folder, removing the ; and whitespace before the
linefiles[] = tests/islandora_video_load_test.test

3. Create a folder in the tests/fixtures/ called load, and place as many videos in that
folder as you would like to ingest. These files all must fit within the size specified by your
php.ini file's maximum post size, and they must have a file extension supported by the
Video Solution Pack, otherwise they will not be picked up by the load test.
4. Clear the Drupal cache.

The video load test should now be available to use by navigating tohttp://
path.to.your.site/admin/config/development/testing, checking 'Video Load Test'
in the Islandora Video section, and then clicking 'Run tests'. The test will compare the original
file to the file ingested into Fedora to see if they match.

THIS WILL NOT WORK ON OPERATING SYSTEMS THAT DO NOT SUPPORT THE
PHP GLOB_BRACE FLAG (E.G. SOLARIS).

3.2.15 Web Archive Solution Pack

Overview
The Web Archive Solution Pack adds all required Fedora objects to allow users to ingest and
retrieve web archives through the Islandora interface.

Dependencies
Islandora
Tuque
warctools

Downloads
Release Notes and Downloads

Configuration
The Web Archive Solution Pack configuration options can be accessed at http://
path.to.your.site/admin/islandora/solution_pack_config/web_archive. Set the paths for
warcindex and warcfilter here:

Version 5
135
Start

Content Models, Prescribed Datastreams and Forms


The Web Archive Solution Pack comes with the following objects in http:// path.to.your.site/
admin/islandora/solution_pack_config/solution_packs:
Islandora Web Archive Content Model (islandora:sp-audioCModel)
Web Archive Collection (islandora:audio_collection)
A file ingested using the Web Archive Solution Pack's content model and LAME will have the
following datastreams:

RELS-EXT Default Fedora relationship metadata

MODS MODS record filled out during ingest

DC Dublin Core record

OBJ Original WARC file uploaded

TN Default thumbnail icon for audio objects

The Web Archive Solution Pack comes with the Web Archive MODS form.

Version 5
136
Start

Solr Indexing
If you are using Solr 4+, the WARC_FILTERED datastream will automatically be indexed via
Apache Tika. You will need to add ds.WARC_FILTERED^1 to the Query fields form in
Adminstration » Islandora » Solr Index » Solr Settings (admin/islandora/search/islandora_solr/
settings).

3.2.16 Islandora Scholar

Introduction
Islandora Scholar is a suite of modules designed to help Islandora function as an Institutional
Repository. However, these modules can be helpful in other contexts.
Sample Features
Integrates with Sherpa/RoMEO.
Attach PDFs to citation/thesis records.
Objects or PDF datastream of object can be embargoed and embargoes can be
managed.
CSL for citation display and citation export.
Various citation batch ingest options (RIS, EndnoteXML, PMID, DOI, RefWorksXML).
Islandora Google Scholar module improves discovery.
Citations exposed via OAI-PMH using the Islandora OAI module.
Modules included in Islandora Scholar
bibliography
bibutils
citeproc
csl
doi
endnotexml
exporter
islandora_google_scholar
islandora_scholar_embargo
pmid

Version 5
137
Start

ris

Requirements
This module requires the following modules/libraries:
Islandora
Tuque

Installation
Install as usual, see this for further information.

Configuring Islandora Scholar


Islandora Scholar
Configure at /admin/islandora/solution_pack_config/scholar. You will see a
page like the one below, with options to enable RoMEO, Google Scholar Search,
and to override the default COinS display. You need to override the default COinS
display if you want to use the Islandora Solr Metadata Module to author your
metadata display.

Version 5
138
Start

At the top-right there should be three tabs:

The DOI Importer configuration page looks like the screenshot below, and contains options for
configuring the DOI importer.

The PDF Importer configuration page looks like the screenshot below, and contains options for
configuring the way PDFs work on the site:

Version 5
139
Start

RIS Importer - Creates citation objects from RIS files


CSL - Allow for the storage/retrieval/validation of CSL 1.0.1 styles
Add new CSL styles at admin/islandora/tools/csl

Pubmed Importer - Creates citation objects from Pubmed IDs


Endnote XML Importer - Creates citation objects from Endnote XML
Islandora Scholar Embargo - Supports embargo management
Configure at admin/islandora/solution_pack_config/embargo
On the main page, you can set the content models for objects to be embargoed. When a
content model is selected, users will be provided with the option of setting a date for the
embargo to be lifted, or to embargo an object indefinitely.

Version 5
140
Start

From a tab at the upper right tab you can manage embargoed objects:

On this tab a table will show you a list of objects that are currently embargoed:

Islandora Google Scholar - Provides meta tags to help indexing in Google Scholar and
Zotero
Islandora Bibliography - Allows user to build and export bibliographies
Requires the Islandora Bookmark Module
Citation Exporter - Exports a collection of citations to either an RIS/RTF/PDF file
DOI Importer - Creates citation objects from DOIs (requires registration with CrossRef)
Bibutils - Provides a PHP interface to the bibutils tools. Found here http://sourceforge.net
/p/bibutils/home/Bibutils/

Version 5
141
Start

3.2.17 Entities Solution Pack

Overview
This module allows you to add person, place, event, and organization entities to an Islandora
repository. Entities are small, metadata-based objects. A number of forms and additional
features are provided in this module for those building an institutional repository with Islandora.
Much of the functionality for batch ingest and autocomplete (to use entities as authority objects)
centres around the MADS forms provided with the module.
Custom thumbnails can be added via the manage tab to ingested Events, Places, and
Organizations. When creating People entities, a thumbnail can be added at time of object
creation. If the thumbnail is not added afterward for the Events, Places, and Organizations
Entities, the default icon is the folder icon used for collections.
Objects ingested under Events, Places, Organization and People content models are also
affiliated with the generic "Entity" content model provided with the solution pack. To use the
Entity content model, you must add it explicitly to the collection policy and associate an
appropriate form.

Additional features for use with the People Entity's MADS form:
Batch Ingest - Person Entities using the MADS form (Scholars) can be batch uploaded using
the submodule Islandora Entities CSV Import. Batch ingested entities have a default association
with the Person Entity Content model and create a metadata stream matching the default
MADS person form.
CSV's must be properly prepared. Any comma within a field must be replaced with a double
pipe ie - 'Nursing, Department of' must be replaced with 'Nursing|| Department of' If multiple
arguments are supplied within a single column, they must be separated with a ~ ie meat~
cheese~pickles If a column in a CSV is to be processed it must have a header from the
following list.
STATUS
POSITION
EMAIL
BUILDING ROOM_NUMBER
IDENTIFIER
TERM_OF_ADDRESS
GIVEN_NAME
FAMILY_NAME

Version 5
142
Start

FAX
PHONE
DISPLAY_NAME
DEPARTMENT
BUILDING
CAMPUS
NAME_DATE
STREET
CITY
STATE
COUNTRY
POSTCODE
START_DATE
END_DATE
ROOM_NUMBER
BUILDING
CAMPUS

Dependencies
Islandora
Islandora Basic Collection
Islandora Solr
Islandora Solr Metadata
Islandora Bookmark

Downloads
Release Notes and Downloads

Configuration
The autocomplete for the MADS forms requires solr values. A standard installation
should include the transformations in basic-solr-config (example config from
discoverygarden)

Version 5
143
Start

The link to the MADS transformation in foxmlToSolr.xslt must be uncommented. This will
be either or depending on your installation.
Islandora Solr Metadata must be chosen as the default metadata display. This can be set
at Administration » Islandora » Metadata Display (admin/islandora/metadata).
The Solr field for searching entities and the entity collection are configurable at Administration »
Islandora » Solution pack configuration » Entities (admin/islandora/solution_pack_config/entities
). These fields correspond to options for adding autcomplete fields to the MADS forms
packaged with the module. The following autocomplete paths will work using the basic
configuration:
islandora/entities/autocomplete/scholar (for people)
islandora/entities/autocomplete/department (for organizations)
islandora/entities/autocomplete/disambiguated (for people in the "disambiguated full
name" MADS field)
Configuration Panel:

By default, the solution pack creates a single collection for all entities. If entities are divided into
several collections, the PIDS for relevant collections can be added here.

Version 5
144
Start

View EACCPF Person


The default view for an EACCPF person record:

Version 5
145
Start

View MADS Person


The default view for a MADS person record (reflecting a "scholar" in an Institution)

Version 5
146
Start

Other Views
EACCPF Objects, Events, and Places (after a thumbnail has been affiliated) will look as below:

Version 5
147
Start

Content Models, Prescribed Datastreams and Forms


The Entities Solution Pack comes with the following objects in http://path.to.your.site/admin/
islandora/solution_pack_config/solution_packs:
Islandora Entity Content Model (islandora:entityCModel)
Islandora Place Content Model (islandora:placeCModel)
Islandora Person Content Model (islandora:personCModel)
Islandora Event Content Model (islandora:eventCModel)
Islandora Organization Content Model (islandora:organizationCModel)
Entity Collection (islandora:entity_collection)
Entity objects created using these content models will have the following datastreams:

RELS-EXT Default Fedora relationship metadata

MADS/EACCPF/MODS Descriptive metadata, in a format correlating to the form selected.

TN Thumbnail image, created at time of ingest

Version 5
148
Start

DC Dublin Core record

People entities comes with a default MADS and EACCPF form. Events, and Places have an
EACCPF form. Organization entities come with a Organization EAC-CPF form and a
Department MADS form.

3.2.18 Disk Image Solution Pack

Disk Image Solution Pack

Introduction
Adds all required Fedora objects to allow users to ingest and retrieve disk images through the
Islandora interface.

Requirements
This module requires the following modules/libraries:
* [Islandora](https://github.com/islandora/islandora)
* [Tuque](https://github.com/islandora/tuque)
* [sleuthkit](https://github.com/sleuthkit/sleuthkit)
* afflib-tools
* libafflib-dev
* libewf-dev
* ewf-tools

Installation
Sleuthkit install:
* sudo apt-get install libafflib-dev afflib-tools libewf-dev ewf-tools
* git clone https://github.com/sleuthkit/sleuthkit.git
* cd sleuthkit
* ./bootstrap
* ./configure (no need to declare --with-afflib=dir if you installed libafflib-dev and afflib-tools as
described above)
* make && sudo make install && sudo ldconfig
**Note**: If you're on Ubuntu 12.04, you will need to [build](https://github.com/libyal/libewf/wiki/
Building#using-debian-package-tools-deb) libewf from [source](https://github.com/libyal/libewf).

Version 5
149
Start

Configuration
Set the path for fiwalk in Administration » Islandora » Solution pack configuation » Disk image (
admin/islandora/solution_pack_config/disk_image).
If you would like to index the output of fiwalk in Solr, you can use [this](https://github.com/
yorkulibraries/basic-solr-config/blob/kappa/islandora_transforms/slurp_all_DFXML_to_solr.xslt)
xslt.

3.3 Islandora Viewers


Viewers can be developed as independent modules that plug in to one or more solution packs.

3.3.1 Islandora Internet Archive Bookreader

Overview
The Islandora Internet Archive Bookreader is an implementation of Open Library's Internet
Archive Bookreader web app. It is used by the Islandora Book Solution Pack to display a series
of pages as an entire book that can be accessed on the book's 'View' page.

Dependencies
Libraries API with the bookreader library installed
Islandora
Tuque
Djatoka
Islandora Solr Search should be used to organize the book via RELS-EXT and designate
an OCR data stream (Optional)
Libraries API
Colorbox

Provisions
Book Solution Pack

Downloads
The Islandora Internet Archive Bookreader module can be found on the Release Notes and
Downloads page.

Version 5
150
Start

Download/clone the Internet Archive BookReader to sites/all/libraries/bookreader.

The actual Bookreader library from Open Library can be found at their GitHub repository here:
https://github.com/openlibrary/bookreader
Internet Archive BookReader Developer documentation
This module requires that you set up Djatoka, please follow the steps outlined at here.
This module requires Colorbox and its dependant library Colorbox library. Depending on the
version of the Colorbox module and library you are using, there can be some issues with
Colorbox finding the library. This comment solves the issue.

Installation
Though the actual Bookreader module is installed the same way as any Drupal module is, the
Bookreader library needs to be downloaded and placed manually. This can be done in two
different ways:
If 'git' is installed on your server, you can navigate to your Drupal installation's sites/all/
libraries folder and run "git clone git://github.com/openlibrary/bookreader.git" to
automatically clone the repository. If 'git' isn't installed, you can often get it from standard
Linux package managers by running a command similar to 'apt-get install git' or 'yum
install git'.
If you wouldn't like to use GitHub's standard repository manager, you can navigate to the
repository's site in the Downloads section above, click the button to download the
repository as a ZIP file, and extract it to your Drupal installation's sites/all/libraries folder.
If you do this, you will need to rename the extracted folder from 'bookreader- branch' (e.g
. bookreader-master) to simply 'bookreader'.

Usage
Controls for the Islandora Internet Archive Bookreader are identical to the standard Internet
Archive Bookreader:

Version 5
151
Start

1. Link to the front page of the book

2. Another link to the cover

3. Search field that is able to look through the OCR datastream of the book object

4. Button to initiate an OCR search from the text field

5. Button to have the pages automatically and methodically flip to the next one after a short
period of time
6. Button showing basic MODS information

7.
Version 5
152
Start

7. Button to view the OCR output for the current page

8. Button to generate URL links to share the book

9. The actual book's viewing pane

10. A slider to quickly switch between pages

11. Button to view a single page at a time

12. Button to view two pages side by side, like a standard physical book

13. Button to view all pages in a grid layout

14. Zoom controls (in and out)

15. Button to hide the bottom-most navigation pane

16. Controls to move to the next or previous page

Configuration
Configuration options for the Islandora Internet Archive Bookreader can be found:
in the admin page for the Bookreader (http://path.to.your.site/admin/islandora/
islandora_viewers/internet_archive_bookreader)
in the admin page for Islandora OCR (http://path.to.your.site/admin/islandora/tools/ocr)
in the admin page for the Islandora Book Solution Pack (http:// path.to.your.site/admin/
islandora/solution_pack_config/book)
and in the admin page for the Paged Content Module (http:// path.to.your.site/admin/
islandora/solution_pack_config/paged_content).
Viewing http://path.to.your.site/admin/islandora/islandora_viewers/
internet_archive_bookreader contains the following configurations:

Troubleshooting/Issues
Version 5
153
Start

Troubleshooting/Issues
Having problems or solved a problem? Check out the Islandora google groups for a solution.
Islandora Group
Islandora Dev Group

3.3.2 Islandora JWPlayer

Overview
JWPlayer is an in-browser multimedia player made by Longtail Video. Islandora uses it to create
viewers for objects using the Audio Solution Pack and Video Solution Pack, so that they can be
streamed directly inside a user's browser instead of requiring them to download it to their own
computers first.

Dependencies
Islandora
Tuque
Libraries API
JW Player

Provisions
Audio Solution Pack
Video Solution Pack

Downloads
To download the JWPlayer files you need to create an account by clicking "GET JWPLAYER
FREE" button on page http://www.jwplayer.com/download. JWPlayer is free for non-commercial
use. Once your free account is set up, log into your account to locate the download link on "
Account Settings" page.
The Islandora JWPlayer Drupal module required for Islandora integration can be found at the
Release Notes and Downloads page.

Installation
The process of installing JWPlayer is broken up into the following steps:

1. Install, enable and set up the Libraries API. Check that page for more information on how
to do this.

Version 5
154
Start

2. Download and extract the JWPlayer .zip archive from longtailvideo.com

3. Place the 'jwplayer' folder from the .zip archive into your Drupal site's ' libraries' folder
created when the Libraries API was set up (e.g. sites/all/libraries)
4. Install and enable the Islandora JWPlayer Drupal module

Configuration
Check the Audio Solution Pack and Video Solution Pack pages' configuration sections for more
information on how to integrate JWPlayer into Islandora.

This module has been updated to use jwplayer6. If you are updating this module for
the first time since 22/01/2013 with an install predating that date your library will need
to be updated.

3.3.3 Islandora Video.js

Overview
An Islandora viewer module using Video.js.

Dependencies
Islandora
Tuque
Video.js

Configuration
Select the Video.js viewer at Administration » Islandora » Solution pack configuration » Video
Solution Pack (admin/islandora/solution_pack_config/video).

Version 5
155
Start

Troubleshooting/Issues
The Video.js directory must be installed as the directory name "video-js" in the Drupal library
directory. If you see HTTP 404 errors for "//video.js" that means Drupal has not found the "
video-js" folder.
HTTP 404 errors for "video.js.map" is a known issue (the JavaScript Source Map is not included
in the distribution). You can stop the video.js client from requesting the video.js.map by
removing "//@ sourceMappingURL=video.js.map" from the bottom of the video.js file.

3.3.4 Open Seadragon

Overview
SeaDragon is a viewer available for Book/Newspaper Pages and Large Images. The Djatoka
TileSource for Seadragon is based in spirit from the JS component of https://github.com/
ksclarke/freelib-djatoka. Instead of "synthesizing" the info for DZI this module creates the path
to access Djatoka directly and obtain different regions for the tiles.
Reverse proxy config: We make the assumption that we (reverse) proxy Djatoka, to fix the
same-origin issue.
For Apache, with Drupal running on the same box as Apache, a couple lines like:

ProxyPass /adore-djatoka http://localhost:8080/adore-djatoka


ProxyPassReverse /adore-djatoka http://localhost:8080/adore-djatoka

in the Apache config somewhere (either the main apache.conf, httpd.conf, or in and arbitrarily
named *.conf in your Apache's conf.d directory should suffice to establish the reverse proxy.
In Debian derived systems one will need to create location entries for each proxy or remove the
Deny from All in mod_proxy's conf file.

Dependencies
Islandora
Tuque
OpenSeadragon
Islandora Paged Content (Conditional: please see note below)
Drupal.org modules:
Libraries
OpenSeadragon:

Version 5
156
Start

It is assumed that the core OpenSeadragon Javascript is put into sites/all/libraries/


openseadragon. Openseadragon .9.129 is known to work well with Islandora. The most current
version breaks the Islandora integration, which will be addressed in the future. The correct
version for Islandora can be obtained from here: https://github.com/thatcher/openseadragon/
tarball/1c7f5839f90c28e97c96c169fdf23da24826605f

There is a conditional dependency on the islandora_paged_content module, but this


should not require any additional actions from the user as the solution packs that use
the feature requiring the islandora_paged_content module include it in their depency
lists.

Configuration
Set the paths for 'Djatoka server base URL' and configure OpenSeadradon in Administration »
Islandora » OpenSeadragon (admin/islandora/module).

Version 5
157
Start

Troubleshooting/Issues
Having problems or solved a problem? Check out the Islandora google groups for a solution.
Islandora Group
Islandora Dev Group

3.3.5 Islandora PDF.js

Introduction
An Islandora viewer module using Mozilla PDF.js.

Requirements
Islandora

Version 5
158
Start

Tuque
PDF.js

Installation
Install as usual, see this for further information.
Download and install PDF.js to your sites/libraries/pdfjs folder, or run drush pdfjs-plugin.

Note: If you use the Drush command, it is advisable to Move (not copy) the install script to
your.drush folder and run it.

Configuration
Currently the PDF.js viewer can be used as the viewer for:
the PDF Solution Pack
Administration » Islandora » Solution pack configuration » PDF Solution Pack (
admin/islandora/solution_pack_config/pdf).

This is how a PDF displays with the Islandora PDF.js viewer enabled.

Version 5
159
Start

the Book Solution Pack (both the book and the page object are options)
Administration » Islandora » Solution pack configuration » Book Solution Pack (
admin/islandora/solution_pack_config/book).

Troubleshooting/Issues
Ensure that the PDF.js library is installed in /sites/all/libraries/pdfjs

Version 5
160
Start

If enabled as the default viewer for the Book Solution Pack, you need to ensure that a
PDF file has been generated for the Book object.

The PDF.js site provides a list of supported browsers that implementers may want to
reference should there be rendering issues.

3.4 Islandora Utility Modules


Islandora's Utility Modules provide functions outside of the Solution Pack model. Tools can add
new options for ingesting, managing, and viewing objects.
Many tools integrate with other applications, meaning that you must install additional
dependencies for them to work. Information about our currently supported tools, how to install
them and their dependencies, and how to configure them is provided in this section.
Image Annotation
Islandora BagIt
Islandora Bookmark
Islandora Checksum
Islandora Checksum Checker
Islandora FITS
Islandora Importer
Islandora OAI
Islandora OCR
Islandora Pathauto
Islandora PREMIS
Islandora Solr Search
Islandora Solr Settings

Version 5
161
Start

Islandora Solr Metadata Display


Islandora Solr Facet Pages
Islandora Solr RSS Settings
Islandora Solr Views
Islandora XML Sitemap
MARCXML Module
Using the MARCXML Module
Simple Workflow
XACML Editor
Using the Object Policy tab to manage access restrictions with XACML
XML Form Builder
XML Forms

3.4.1 Image Annotation

Overview
The Islandora Image Annotation Solution Pack adds the ability to draw a shape over an image
and then add a textual annotation to that portion of the image. When the annotation solution
pack is enabled a new sub-tab is added to the View tab that includes the annotated view of the
image, its annotations (if any), and the toolset needed to add/edit annotations. Annotations
consist of three main parts including a category, title, and annotation and depending on
configuration may also include a color picker and/or a setting for the stroke width. Any solution
pack with an image datastream can be configured to use the image annotation solution pack;
however, it only functions with datastreams that are .png or .jpeg. Make sure roles have the
permission to create and view annotations.
Dependencies
This module depends on an image handling solution pack such as Basic Image Solution Pack
or Large Image Solution Pack.
This module relies on JQuery 1.8 and is not supported using JQuery 1.9.
This module requires the following modules/libraries:
Islandora
Tuque
Islandora Solr
Taxonomy

Version 5
162
Start

jQuery Update

Downloads
Release Notes and Downloads
Installation
Install as usual, see this for further information.

Configuration
There are a number of configuration panels available for the image annotation module.
To enable the annotation tab for a content model visit Administration » Islandora » Islandora
Utility Modules » Image Annotation (admin/islandora/tools/image_annotation). From there you
can configure the module for any available content model. The Taxonomy Column allows the
annotation tool to use Drupal's taxonomy terms for categories, if the appropriate radio button is
selected under the "Annotation Categories" section.
If you want users to annotate books, do not check the book content model on the admin page.
In order to annotate book pages, you must select a datastream in the paged content model.

Configure Content Models


Administration » Islandora » Islandora Utility Modules » Image Annotation
This panel allows the user to enable the image annotation module for a particular content
module. The user can specify the Datastream's DSID to use for annotation (currently this must
have the mimetype of png or jpg) and can alternately specify a Drupal based taxonomy to use
for an annotation’s category.

Version 5
163
Start

Configure Annotation Categories


Each annotation has an optional "category" field. An administrator can allow users to determine
their own categories at the time of annotation, or have the categories selected via a Drupal
taxonomy. Alternately administrators can define categories using an existing indexed solr field.
The Annotation Type Search Field contains the solr field to be used as for categories.

Configure Annotation Colors


Annotation Colors: By default the colors of annotations are randomly derived by a set of
standard colors (Optimized). If User defined is selected a color picker is displayed and a specific
color can be applied to the annotation.

Annotation Stroke Width: Administrators can define a list of stroke widths to be available to
site users.

Version 5
164
Start

Configure Controlled Vocabulary for Titles

Customization
Included is an xslt designed for gsearch. If this xslt is included in your existing gsearch index
xslt it will index the Annotation fields and make them searchable in solr. You will also need to
configure the Islandora Solr client so that it is aware of the new fields. If you are using custom
Solr request handlers you will have to update them as well.

If you have solr configured properly and have Annotation Categories set as user defined you will
have a type ahead for the Annotations categories section

FAQ
Q. Can I have annotations for a book?
A. If you want the annotations for book, do not check the book content model on the admin
page. In order to enable annotations for books, you check the paged content model.

3.4.2 Islandora BagIt

Overview
BagIt is a specification for packaging content and metadata about that content into a format that
can be shared between applications. This module provides a "Create Bag" option that allows
the packaging of the datastreams in Islandora objects. This module is a fork of BagIt.

Dependencies
Version 5
165
Start

Dependencies
This module requires the following modules/libraries:
Islandora
Tuque
Scholars' Lab BagItPHP library
Archive_Tar
Libraries

Downloads
Release Notes and Downloads

Installation
To install the Islandora BagIt module:

1. Install Archive_Tar. This package is required by PEAR so if you have PEAR installed on
your system, you won't need to install Archive_Tar separately.
2. Install the Libraries API contrib module.

3. Unzip this module into your site's modules directory as you would any other contrib
module.
4. Install the BagItPHP library by entering your site's sites/all/libraries directory and issuing
the following command:
git clone git://github.com/scholarslab/BagItPHP.git

5. Enable the Libraries and Islandora BagIt modules like you would any other contrib
modules.

Configuration
Set the location for the BagIt library, temporary directory for unserialized Bags, output directory
for serialized Bags, Bag name prefix, select Collection batch type, compression type, object
plugins, collection plugins, and set Bag Metadata in Administration » Islandora » Islandora BagIt
(admin/islandora/bagit).

Version 5
166
Start

Customization
Islandora BagIt uses two diffent types of plugins, object plugins and collection plugins.
Object plugins add files to an Islandora object's Bag. Object plugins 1) define the source path
for datastream files and their destination paths in the Bag relative to the Bag's 'data' directory,
and 2) optionally, rename datastream files or create new files for inclusion in the Bag.
The module comes with five object plugins: one that copies all the datastreams in an Islandora
object to the top level of the Bag's 'data' directory, one that illustrates how to create an arbitrary
file to add to the Bag, one that includes the FOXML for an Islandora object, one that creates an
Archivematica (http://archivematica.org) 'transfer' Bag, and one that includes a PREMIS
preservation metadata file generated by the Islandora PREMIS module (https://github.com/
ruebot/islandora_premis).
Multiple object plugins may be activated, but they all add files to the same Bag. This means you
can write a plugin that creates one specific file (for example) and activate it or deactivate it as
needed. Plugins are fired in the order in which their filenames sort.
If you have requirements not covered by the supplied object plugins, you can use the plugins
described above to base your own on. If you write your own plugins, follow these guidelines:

1. Begin plugin filenames with 'plugin_object_' and end in '.inc'.

2.
Version 5
167
Start

2. Every plugin has a function that is named the same as the filename prepended with '
islandora_bagit_', ending in '_init().' All init functions take $islandora_object and $
tmp_ds_directory parameters.

3. Plugins must complete all file writing and copying tasks before they return the file's source
and destination paths to the Bagit module.
4. Plugins return FALSE if there is an error in copying or writing files.

Collection plugins only apply to Bags that contain all the objects in a collection. Whereas object
plugins determine what goes in each object-level Bag, collection plugins determine how all the
objects that are in a collection-level Bag are arranged in the Bag's 'data' directory. Also, you can
only activate one collection plugin at a time, unlike object plugins.
The requirements for collection plugins are the same as those for object plugins except for the
requirement a) above: collection plugin filenames being with 'plugin_collection_' instead of '
plugin_object_'.
The module comes with two collection plugins, one that creates a subdirectory for each object in
the Bag's 'data' directory, and one that creates an 'odd' and 'even' subdirectory in the Bag's '
data' directory, and then organizes object-level Bags within those two subdirectories. The odd/
even plugin is intended to illustrate alternative ways to organize objects within a collection Bag.

Modifying a Bag from your own modules


This module provides a drupal_alter() hook, which allows other modules to use
hook_islandora_bagit_alter($bag, $islandora_object). Your module can modify the current Bag
using any of the methods provided by the BagItPHP library. Each implementation of this hook
must take $bag and $islandora_object as parameters; $islandora_object is provided so you can
access properties of the object in your module easily. A typical implementation looks like this:

/**
* Implementation of hook drupal_alter().
*
* @param object $bag
* A BagIt object instantiated in the BagIt module.
*
* @param object $islandora_object
* The current $islandora_object.
*/
function mymodule_islandora_bagit_alter($bag, $islandora_object) {
// Add some custom metadata to bag-info.txt.
$bag->bagInfoData('Some-Arbitrary-Field', 'Foo bar baz');
// Add a file that is not managed by a plugin. Note: extra files
// should be added by plugins if possible, since files that are
// added in drupal_alter() hooks are not counted in Payload-Oxum

Version 5
168
Start

// values generated by the Islandora BagIt module.


$bag->addFile('/path/to/file.txt', 'myfile.txt');
// Update the Bag (this is required).
$bag->update();
}

Note that implementations of hook_islandora_bagit_alter() must call $bag->update() themselves


, typically at the very end of the function.

Modifying a batch from your own modules


If you are running a collection-level batch to create a Bag for every object in a collection, or to
create a single Bag containing all objects in a collection, you can define filters on which objects
get included using hook_islandora_bagit_filter_batch(). If you want an object to be excluded
from the batch, have your instance of this hook return TRUE; if you want an object to be
included, return FALSE (or don't issue an explicit 'return' at all). This example instance excludes
objects with either of two specific PIDs:

/**
* Implementation of hook_islandora_bagit_filter_batch().
*
* @param string $pid
* A BagIt object instantiated in the BagIt module.
*
* @return bool
*/
function mymodule_islandora_bagit_filter_batch($pid) {
if ($pid == 'islandora:87' || $pid == 'islandora:91') {
return TRUE;
}
}

If you want to test other attributes of the object, you need to use Islandora's
islandora_object_load($pid) function to load the object so you can access the attributes.

Post-Bag-creation hook
Islandora BagIt provides an additional hook, islandora_bagit_post_create, that allows other
modules to get notifications that a Bag has just been created. A basic implementation is:

/**
* Implements hook_islandora_bagit_post_create().
*
* @param string $pid
* The PID of the Islandora object that the Bag was just created for.

Version 5
169
Start

*
* @param string $bag_path
* The path to the Bag, relative to the Drupal installation directory.
*/
function mymodule_islandora_bagit_post_create($pid, $bag_path) {
// Do something interesting.
}

This hook can be used to send notification emails after a Bag has been created, to add the Bag
to a queue for further processing, or to copy the Bag to a different server.

Drush integration
Bags can be created for individual Islandora objects or for all objects in a given collection using
Drush:
drush --user=UID create-islandora-bag [object|collection] PID

where UID is the user ID or user name of the fedoraAdmin user (or equivalent), 'object' or '
collection' indicates whether you want to create a Bag for a single object or a Bag for every
member of a collection, and PID is the PID of the Islandora object or collection.

Permissions and security


This module is intended for users who have a fairly high level of permissions on a Drupal site.
Because the goal is to package up all or some of the datastreams in an Islandora object, users
who can create and download Bags should have access to those datastreams. However, the
module does check the current users' access to a datastream before adding it to the Bag.

3.4.3 Islandora Bookmark

Overview
The Islandora Bookmark module allows users to build, manage, share, and export lists of
Islandora objects. The module includes the following components:

1. A page at /islandora_bookmark for users to manage their bookmark lists.

2. A bookmark tool that appears on every object page.

3. A Solr display profile for generating bookmarks from Islandora search results.

Dependencies
Islandora Core Module

Version 5
170
Start

Tuque
Islandora Solr Search (optional)

Downloads
Release Notes and Downloads

Installation
Unzip this module into your site's modules directory as you would any other contrib module. See
this for further information.

Configuration
After you have installed and enabled the Islandora Bookmark module, go to Administration »
Islandora » Islandora Utility Modules » Bookmark (admin/islandora/tools/islandora-bookmark) to
configure the module.

Version 5
171
Start

Select "Create a default list for users?" and click Save Configuration. After you log out and back
in, a default bookmark list will be created for your user account.

Users cannot delete their default bookmark list.

Permissions
Set the permissions for the Bookmark module in Administration » People (admin/people/
permissions).
Administer Islandora Bookmark - This is the permission for changing the module
configuration settings, and should only be granted to administrators.

Version 5
172
Start

Use Islandora Bookmark - Create, manage, and add new bookmarks to bookmark lists.
Grant to any role that needs to be able to add bookmarks to a list, including anonymous
users (users without an account).

Share bookmarks - Share bookmarks with other users. Anonymous users can never
share bookmarks.
Export bookmarks - Export bookmark lists.

Bookmark Tool Display


Add the Islandora Bookmark tool to a block that is used on object pages (admin/structure/block)
such as the Content or First Sidebar blocks.

Screenshot of the Islandora Bookmark tool appearing at the bottom of the Content Block

The Bookmark Tool will not display until at least one list exists for bookmarks to be
added to.

Bookmark Search Results


To create a display of objects that can be bookmarked based on the results of an Islandora
search:

1. Enable the 'Bookmark' Display Profile in Administration » Islandora » Solr index » Solr
Settings (admin/islandora/search/islandora_solr/settings).

2.
Version 5
173
Start

2. Add the 'Islandora Displays' block to the First Sidebar or Second Sidebar on search
results pages (admin/structure/block).

Using Bookmarks and Lists

Bookmarking an object from the object page


1. On an Islandora object page, use the Islandora bookmark tool to select a bookmark list.

2. Click Add Bookmark.

Once you have bookmarked an object, the Islandora Bookmark tool will show a link to the
bookmark list that contains that object.

Bookmarking an object from search results


1. Search in the Islandora simple search or advanced search.

2. In the "Islandora Displays" block, click "Bookmark."

a. You can also access the Solr bookmark display by adding ?display=bookmark to
the end of any Solr query URL.
3. Use the Bookmark Solr display to export all results or create a new bookmark list from
some or all of the search results.

Managing Bookmarks and Lists


When logged in, users can view their bookmark lists and create new lists at http://
path.to.your.site/islandora-bookmark.

Version 5
174
Start

Add a new bookmark list


1. Click on the 'Add' tab

2. Enter a list name and description.

3. Click Add list.

View the bookmarks in a list


On the 'Overview' tab, click a list name. The 'Detailed list' view shows a list of all the objects that
you have bookmarked. From the detailed list, you can remove one or all bookmarks, export
some or all bookmarks, or share the list with other users. Clicking on the label takes you to the
bookmarked object.

Customization

Theme customizations
Table cells referencing the bookmarked objects in both bookmark lists and bookmark Solr
results can be modified in one of the following ways:
Overriding the default template file located at theme/
islandora-bookmark-object-display.tpl.php.
Using hook_islandora_bookmark_object_markup() to let another module define the
content and markup.

3.4.4 Islandora Checksum

Overview
A simple module to allow repository managers to enable the creation of a checksum for objects.
If enabled, the following checksum algorithms are available: MD5, SHA-1, SHA-256, SHA-384,
SHA-512.

This will checksum all datastreams.

Dependencies
Islandora Core Module

Version 5
175
Start

Tuque

Downloads
Release Notes and Downloads

Installation
Unzip this module into your site's modules directory as you would any other contrib module. See
this for further information.

Configuration
Enable and set checksum type in Administration » Islandora » Islandora Utility Modules »
Checksum (admin/islandora/tools/checksum). To retroactively enable checksums on existing
objects, enable and set checksum type if you have not already done so, and choose a collection
and click on the 'Enable' button.

Version 5
176
Start

3.4.5 Islandora Checksum Checker

Overview
This module verifies the checksums derived from Islandora object datastreams and adds a
PREMIS 'fixity check' entry to the object's audit log for each datastream checked. Please note
that adding this entry updates the object (specifically, it changes the object's lastModifiedDate).
Islandora Checksum Checker needs to be periodically triggered using Drupal's cron functionality
(or an alternative like Elysia Cron, or using an operating-system-level scheduler like Linux's
crontab to run a drush command (documented below).
With each run, the module performs checksum verification on a configurable list of object
datastreams. When it has checked the datastreams of all objects (from oldest to newest), it will
start from the beginning (i.e. with the oldest object in your repository) and repeat the verification
cycle.

Dependencies
This module requires the following modules/libraries:
Islandora
Tuque
Islandora Checksum (Optional)
This module is only useful if you use Fedora Commons to generate checksums on datastreams.
The easiest way to have Fedora Commons generate checksums is to install and enable the
Islandora Checksum module.

Downloads
Release Notes and Downloads

Installation
Install as usual, see this for further information.

Configuration
Set the cron method, number of objects to check per cron run, datastream to check, who to sent
report to in Administration » Islandora » Checksum checker (admin/islandora/
checksum_checker).

Version 5
177
Start

The two most common options for scheduling the verification are:

1. choose 'Drupal cron' in the module's admin settings and make sure that you have cron
running on your site, and
2. choose 'drush script' in the module's admin settings and set up a scheduled job using a
utility like Linux's cron to trigger the verification via drush.

Option 1 is simplest because it requires no additional configuration but only works if all of the
objects in your Islandora repository are viewable by the Drupal 'anonymous' user (since Drupal
7's cron runs as anonymous).
Option 2 is necessary if any of your objects are not viewable by anonymous. It also has the
advantage of running the verification process independently from other tasks initiated be
Drupal's built-in cron.
The drush command you need to run is drush run-islandora-checksum-queue. You
should include drush's --root and --user options to define the path to your Drupal installation's
root, and an Islandora user account that has privileges to view all datastreams, respectively. A
typical Linux crontab entry (in this case, to run every hour) is:

0 * * * * /usr/bin/drush --root=/path/to/drupal --user=fedoraAdmin


run-islandora-checksum-queue

Version 5
178
Start

Frequency of verification
How often you should run this command will depend on several factors, including how many
objects you have in your Islandora repository and how many days or months you will tolerate
between reverification of the same object's datastream checksums.
Assuming that you configure this module to check 50 objects every time it runs and that you
have 10,000 objects in your Islandora repository, all objects will be checked every 8 days if you
configure it to run every hour. If you configure this module to run every 6 hours, all objects will
be checked every 50 days.
Also, since the results of the verification are recorded in each object's audit log, the more often
you verify checksums, the larger the audit logs (and therefore the objects themselves) become.
Each time a datastream is checked, the object's audit log grows by about 450 bytes. An object
that has five datastreams that are all being checked will grow by about 4.5 kB/month if it is
checked twice a month. A 10,000-object repository will use about 43 MB of disk every month
just to store the results of routine checksum verification in the objects' audit logs.
In addition, each time a datastream's checksum is verified, about twice as much data is written
to your fedora.log as is stored in the object's audit log, so a more realistic estimate of how much
disk space is consumed by routine checksum verification is three times the figures calculated
above.

3.4.6 Islandora FITS

Overview
A simple module to extend islandora solution pack install processes by adding technical
metadata extraction via the File Information Tool Set (FITS).
Behind the scenes, the module tries to get as much metadata as possible from your file by
running:

fits.sh -i infile -xc -o outfile

The -xc command can sometimes cause problems, so if that fails, the module tries:

fits.sh -i infile -x -o outfile

Should that fail, technical metadata extraction is aborted and the error is logged in the watchdog
(see Troubleshooting the Enterprise Setup).

Version 5
179
Start

An error my be produced and logged in the apache error.log file even if TECHMD DS extraction
is successfull, as the first attempt may fail and log an error while subsequent attempts may
succeed.
The most common error printed out to the error.log file that is safe to ignore is as follows: "
Exception in thread "main" java.lang.NullPointerException at
edu.harvard.hul.ois.fits.FitsOutput.addStandardCombinedFormat(FitsOutput.java:310) at
edu.harvard.hul.ois.fits.Fits.outputStandardCombinedFormat(Fits.java:294) at
edu.harvard.hul.ois.fits.Fits.outputResults(Fits.java:275) at edu.harvard.hul.ois.fits.Fits.main(
Fits.java:186) Error: output cannot be converted to a standard schema format for this file"
Watchdog will be updated when TECHMD DS fail's to generate.

Dependencies
This module requires the following modules/libraries:
Islandora
Tuque
The File Information Tool Set
Clone the fits tool which can be found here. Make sure it is in a location where the apache user
can get access. Navigate to the fits folder and make sure fits.sh has executable permissions
so the apache user can run the script.

Downloads
Release Notes and Downloads

Installation
Install as usual, see this for further information.

Configuration
Set the path for fits.sh and create a name for the Technical metadata stream ID in
Administration » Islandora » Islandora Utility Modules » FITS Tool (admin/islandora/tools/fits).

Troubleshooting
If you run an ingest and you don't get any technical metadata, check to make sure the
permissions on the fits folder and the fits.sh script are correct and the apache user can run the
script.

Version 5
180
Start

Some images and audio files will cause problems during metadata extraction. These are not
fatal errors, but appear to be formats the fits script can't understand. In these cases, you will get
some error reporting in the technical metadata datastream that may help determine what
happened.

If you ingest an object but don't get any technical metadata, you may have forgotten to
update the permissions on the fits.sh script. If that is not the case, make sure your
configuration points to the correct file.

FAQ
Q. Why didn't I get any technical metatadata?
A. If you run an ingest and you don't get any technical metadata, check to make sure the
permissions on the fits folder and the fits.sh script are correct and the apache user can run
the script.
Q. Why am I getting weird errors in the log?
A. Some images and audio files will cause problems during metadata extraction. These are not
fatal errors, but appear to be formats the fits script can't understand. In these cases, you will get
some error reporting in the technical metadata datastream that may help determine what
happened.

3.4.7 Islandora Importer

Overview
The Islandora Importer supports the import of a large number of objects simultaneously. It is
intended primarily for ingesting objects described by MODS (and DC).

Dependencies
This module requires the following modules/libraries:
Islandora
Tuque
Basic Collection Solution Pack
Additional Modules Installed

Version 5
181
Start

Zip Importer, a sub-module included in the Importer module. When you download the
main module, it comes with it.

Downloads
Release Notes and Downloads

Installation
Install as usual, see this for further information.

Usage
More information on how to use the Batch Importer module can be found in the section How to
Batch Ingest Files.

XML Form Builder forms are not used when batch ingesting via the ZIP importer.
Importer looks for metadata XML files and runs XSLTs as required. The module
currently supports metadata in MODS, MARCXML, Dublin Core, and Darwin Core
formats.To batch import metadata records using other schemas you can do so using
the Islandora Batch module, which will allow the creation of any datastreams you like.
However, this module does not yet have a user interface within Islandora and must be
accessed via Drush on the command line. Instructions are in the README.

Configuration
Select whether or not to 'Use filename as Datastream label' in Administration » Islandora » Zip
Importer (admin/islandora/zipimporter).

Troubleshooting/Issues
The zip importer is unstable with large files (~2GB). Consider alternative methods such as
unzipping your Zip file and using Islandora Batch's `--directory` option.
Having problems or solved a problem? Check out the Islandora google groups for a solution.
Islandora Group
Islandora Dev Group

Version 5
182
Start

3.4.8 Islandora OAI

Overview
The Islandora OAI module (based on the oai2forcck Drupal module) provides support for a site
to be visible via the Open Archives Initiative Protocol for Metadata Harvesting (OAI-PMH). In
short, a site properly configured using this module has its Solr index - and accompanying
metadata - visible to other sites that harvest OAI-compatible metadata. These harvesters make
various types of requests at a URL that you can specify, and your site responds with metadata
information that they in turn can add to massive archival indices. This makes it much easier for
researchers to find objects on your site.
For more information on the OAI-PMH, you may consult the official documentation at http://
www.openarchives.org/OAI/openarchivesprotocol.html.

Dependencies
Islandora Solr Search
Islandora Core Module
Tuque

Besides installing the Islandora Solr modules, you will also need to correctly configure
Solr and GSearch in order for Islandora OAI to work. The OAI module passes
information to metadata harvesters based on results it finds from your Solr index; if
Solr is not properly configured, OAI won't function either.

Downloads
Release Notes and Downloads

Usage
Islandora OAI works mostly autonomously. It gets requests from metadata harvesters in the
form of HTTP POST keys that come after your OAI URL. Your site then sends back information,
in XML format, based on the values of the keys that were given. You can check that your
configuration is correct by manually entering these keys in your browser's address bar, and
seeing what comes back.
A simple check you can run involves asking your OAI URL for a list of information about your
repository. To do this, you will need to know a few of your site's OAI configuration options. More
information on this can be found in the next section of this page.

Version 5
183
Start

To check for the first few records, use your browser to access the following site:
http://path.to.your.site/repository?verb=Identify
Where:
path.to.your.site/repository is the URL found on the Islandora OAI configuration page,
in the Configuration section, under 'The path of the Repository'
Identify is a verb that is designated by the OAI-PMH to return basic configuration
information about your OAI metadata repository.
If your Solr Index is set up correctly, and you entered the URL properly, you should see an XML
file containing information about your OAI setup.

Configuration
Configuration options for the Islandora OAI module can be found at http:// path.to.your.site/
admin/islandora/tools/islandora-oai and include the following options:

Configuration
Repository Name - The name that harvesters will attach to metadata pulled from your
repository.
The path of the Repository - The URL that harvesters will make requests at.
Repository unique identifier - The middle section of the identifier used when metadata
harvesters pass the identifier= key. With this in place, an identifier for each of your
objects' metadata will be generated as oai:unique_identifier:namespace_pid.
Admin Email - An optional email address to be attached to harvested metadata
Maximum Response Size - The maximum number of records that will be issued per
response. If the number of records requested exceeds this number, Islandora OAI will
also issue a 'resumption token', which the harvester can use to issue another request
from the point they stopped at. This method is used to control flow and prevent servers
from diverting too much resources to metadata harvesters.
Expiration Time - The amount of time, in seconds, before a resumption token should
expire.
OAI Request Handlers - Handlers available to be configured

If you select "configure" you see the following screens.


Solr date field - A datestamp to be appended to the metadata via the Solr index.
Solr RELS-EXT collection field - Fields entered here establish the object relationship of
metadata to be passed on to the harvester.

Version 5
184
Start

Solr XACML role field - The site's Solr fields defining viewing permissions.
Solr hasModel field - The site's Solr field defining an object's content model.
Exclude Content Models - A list of content models, defined by their PID, to exclude
from harvests.

Below this is the "Metadata Format" section:

Metadata Format
This section allows you to configure the settings for the OAI-PMH'smetadata_prefix verb;
Islandora uses XSL files to define the method for transforming your site's metadata datastreams
into a format compatible with the OAI-PMH. Islandora OAI comes with two XSL files; they
convert the MODS datastream of an object to either Electronic Thesis and Dissertation
Metadata Standard format or Dublin Core format, which then can be served up to a harvester.
Metadata Format - The metadata format you would like to use. This will change the next
three fields.
Metadata Prefix - The default variable for the metadata_prefix verb.
Metadata Namespace - The URL that contains XSD files defining the Metadata Format
Schema Location - The actual XSD file in the Metadata Namespace that defines the
Metadata Format.
Transformations - This section allows you to configure the way Islandora converts your
metadata datastreams into a format compatible with the OAI-PMH.

Version 5
185
Start

Metadata Datastream ID - The datastream ID where object metadata is stored (MODS


by default).
File to use for transforming ______ - The XSL file used to convert that datastream into
a metadata format OAI will recognize and use.
Upload a file - If you want to run custom conversions from a different datastream or to a
different Metadata Format, you can upload these here.

After you have exposed content types and some fields, your repository is available at /oai2
Some example requests are as follows:
*/oai2?verb=Identify

*/oai2?verb=ListMetadataFormats

*/oai2?verb=ListIdentifiers&metadataPrefix=oai_dc

*/oai2?verb=ListRecords&metadataPrefix=oai_dc

Services like WorldCat expect links back to the object such as a Handle URL. If your metadata
doesn't have this there are two approaches that can be used. Self transforming XSLTs can be
used to add specific elements tailored to individual needs. However, there is options in
configuration to append on URL values to the XML output of OAI. Each metadata prefix has an
individual set of configuration. If selected, a user can define where the object URL will get
appended in the output returned.

Version 5
186
Start

Similarily, OCLC's Digital Collection Gateway can take advatange of thumbnail URLs for
rendering. This option is only currently available for oai_dc requests. If selected, a URL to the
object's thumbnail will be added as a dc:identifier.thumbnail if the object has a thumbnail.
If existing content has already been harvested and/or the url and thumbnail are not mapping in
Digital Collection Gateway, you will need to map those manually in the 'Metadata Map' for a
given collection/set.
If the XACML module is present you will need to configure the rels.isViewableBy fields in
the admin page such that the OAI requests respect these object restrictions.
The responses generated by this module have been validated against Open Archives'
Validation.

Customization
By default the vanilla islandora_oai module provides a very basic output. It is possible to add
additional content to the description field of the repository. This includes pointing at other
harvesters and repositories, branding information etc. An example of how to implement these
can be referenced in the 6.x version of the module.

Notes
The original 6.x version of this module was based off of the OAI2ForCCK module located here.

3.4.9 Islandora OCR

Overview
This module acts a Toolkit for generating OCR and word coordinate information (stored in an
HOCR datastream) that is required for on-page highlighting. The module relies on Tesseract to
generate this information.
Tesseract
Tesseract is an OCR engine that was developed at HP Labs from 1985 and by Google from
1995. Recognized as one of the most accurate open source OCR engines available, Tesseract
will read binary, grey, or colour images and output text.
A TIFF reader that will read uncompressed TIFF images is also included. Islandora Book
Solution Pack requires at least Tesseract version 3.2.2, which can be obtained from the project
home page.

Dependencies
Islandora

Version 5
187
Start

Tuque
Tesseract (3.02.02 or later)
ImageMagic (Optional, Required for OCR preprocessing)
Islandora Paged Content (Optional)
Tesseract installation will differ depending on your operating system; please see the Tesseract
README Wiki for detailed instructions.

Downloads
Release Notes and Downloads

Installation
Install as usual, see this for further information.

Configuration
In Administration » Islandora » Islandora Utility Modules » OCR Tool (admin/islandora/tools/ocr)
, you can do the following:
Set the path for Tesseract
Select languages available for OCR from your Tesseract installation
Enable/disable Solr Fast Vector Highlighting
Set Solr field containing OCR text and the maximum number of results to return in a Solr
query

Version 5
188
Start

Version 5
189
Start

Solr result highlighting


To have Islandora viewers recognize Solr search results and highlight them, one will need to
configure Solr to index the HOCR (coordinate data) in a particular fashion.
The field that the HOCR is stored in must have the following attributes: indexed="true"
stored="true" termVectors="true" termPositions="true" termOffsets="
true"

Each text node of each element in the HOCR datastream must be placed in order in a single
value for the Solr field with all whitespace sub strings normalized to a single space.
Any objects that were previously ingested but require this functionality will need to be re-indexed
.
Reference Implementation

Tesseract
Tesseract provides many languages which can be downloaded from here.
To install just unzip them in your tessdata directory, typically located at /usr/local/share/
tessdata

If you want to add your own languages or train your Tesseract for your specific needs please
review the documentation here
It is recommended to check the Tesseract page for more information on these options.

3.4.10 Islandora Pathauto

Overview
Exposes Islandora objects to the alias-creating tools of Drupal's Pathauto.

Dependencies
Islandora
Pathauto
Token

Downloads
Release Notes and Downloads

Installation
Version 5
190
Start

Installation
Install as usual, see this for further information.

Configuration
In Administration » Islandora » Islandora Utility Modules » Pathauto (admin/islandora/tools/
islandora-pathauto), configure which content models are subject to Islandora Pathauto:

Configure how Pathauto creates aliases at Administration » Configuration » Search and


Metadata » URL Aliases » Patterns (admin/config/search/path/patterns):

Aliases can include the object's pid ([fedora:pid]), the Fedora label ([fedora:label]),
the namespace ([fedora:namespace]), and/or the pid without the namespace ([fedora:
shortpid]). See the documentation for Pathauto for more information on creating aliases.

FAQ
Q. Why don't the datastreams also follow the alias of the object?

Version 5
191
Start

A. With pathauto alone, datastreams are NOT accessible at [object alias]/datastream/DSID. To


get this functionality, enable the Drupal moodule Sub-pathauto and configure the maximum
depth of sub-paths to be at least 3.
Q. Why is my object still visible at /islandora/object/PID?
A. Drupal aliases don't negate internal paths like islandora/object/PID. If you want the original
islandora URLs to resolve (i.e. redirect) to the aliases, then enable Global Redirect.
Q. Where'd the colon in my PID go?
A. By default, Pathauto removes punctuation such as the colon (:) from paths before creating
aliases. This will result in PIDs that look like islandora123; if this is undesirable then configure
the Pathauto setting under "punctuation" at admin/config/search/path/settings to not remove the
colon.
Q. What if I have multiple content models for the same object? Can I give it multiple
aliases?
A. No. Multiple aliases for the same object are not supported. All objects should have at most
one of their content models enabled for pathauto.

3.4.11 Islandora PREMIS

Overview
This module produces XML and HTML representations of PREMIS metadata for objects in your
repository. Currently, it documents all fixity checks performed on datastreams, includes 'agent'
entries for your insitution and for the Fedora Commons software and, maps contents of each
object's "rights" elements in DC datastreams to equivalent PREMIS "rightsExtension" elements.
PREMIS XML describing all the datastreams in an object looks like this, and a HTML rendering
looks like this.

Dependencies
This module requires the following modules/libraries:
Islandora
Tuque
Recommended modules:
Islandora Checksum: create checksums.
Islandora Checksum Checker: periodically verifies checksums on datastreams and will
populate your Islandora objects' audit logs with fixity checking 'events' that map to
PREMIS.

Version 5
192
Start

Downloads
Release Notes and Downloads

Installation
Install as usual, see this for further information.

Configuration
Set your institution's 'agent' settings Administration » Islandora » Islandora Utility Modules »
PREMIS (admin/islandora/tools/premis).

Set your permissions for 'View PREMIS metadata' and 'Download PREMIS metadata' at
Administration » People » Permissions (admin/people/permissions).

Version 5
193
Start

3.4.12 Islandora Solr Search

Overview
The Islandora Solr module provides a way to configure the Islandora search functions, the
search results display, and the display of metadata on object pages.

Islandora Solr and the Islandora search results search the metadata, full text, and
OCR of objects in the Fedora Commons repository. In a default Islandora installation,
the Islandora search does not search Drupal nodes or other Drupal-only content.

Tutorials
In order to use the Islandora Solr module, Solr and GSearch must already be installed and
working. See the tutorials below for instructions.
Search & Discovery in Islandora
milestone 6 - Installing Solr and GSearch
Customizing GSearch and Solr
Upgrading From Older Versions of Solr and GSearch

Dependencies
Islandora
Tuque
Apache Solr (1.4 or higher)

Installation
Install as usual, see this for further information.

Configuration
Configuration settings for the Islandora Solr Module are in Administration > Islandora > Solr
index (admin/islandora/search/islandora_solr).

1. Set the Solr URL to http://path.to.your.site:8080/solr.

2. Leave the Request handler as "Let Solr decide" unless you have defined a different
request handler in the solrconfig.xml file.

3.
Version 5
194
Start

3. Click "Save Solr configuration."

After you have successfully set up the Solr URL on the Solr Index tab, you can configure search
results and metadata display on these tabs:

1. Solr settings - Configure the Islandora search results display, including fields to display
in the search results, sort and facet settings, query settings, required fields, and the
Advanced Search block.
2. Metadata display - Configure which metadata fields display on Islandora object pages for
each solution pack when the "Details" option is expanded.
3. Facet pages - Create alphabetical browsing pages based on a facet from Solr (for
example, an alphabetical browse of results by author name or topic).
4. RSS settings - Configure the fields included in the RSS display of search results.

5. Table profile settings

Islandora Solr Settings

Overview
The Islandora Solr Settings page has configuration options for searching and displaying
metadata, full text, and OCR data that is indexed in Solr.

Version 5
195
Start

Configuration

Display Profiles
Display profiles control how the Solr search results are displayed to users who search Islandora
.

Screenshot of the Solr display profiles

Primary Display Profiles

Bookmark - this is used by the Islandora Bookmark module to display search results as a
list of items that can be bookmarked.
List - this is the default Islandora display profile.
Grid - this is generally not used by default Islandora installations.
Table - this profile can be configured under the "Table Profile Settings" tab.
Secondary Display Profiles

CSV - this creates an option to export the search results as a comma-separated file
RSS - enable this profile to make search results available as an RSS feed. This profile is
configured in the "RSS Settings" tab.

Default display settings


The Solr default display settings section has options for how search results display in the "List"
view.

Version 5
196
Start

Display fields

Add indexed metadata fields from Solr to the list of Solr fields that will display for each item in
the search results.

1. In the "Add another item" box, begin typing a Solr field name (the box will provide
suggestions as you type). See Appendix D for a list of Solr field names.
2. Click Add to add the field to the display.

3. Once a field has been added, click Configure for more options. Different field types will
have different options for configuration.
a. Label: Enter a label for the field in the search results.

b. Linking: Link this field to the object it describes (use for fairly unique values, like
titles or identifiers), or to a new search based on the value of the field (use for
author names, subject terms, or series titles for a "related items" search).
c. Highlight: check this box to highlight the search term within the field. Only works
on tokenized fields.
d. Maximum length: Truncate field values in the search results display. Use for
longer fields such as notes, descriptions, or full text.
e. Permissions: Display this search field only to users logged in with a certain Drupal
role.

Limit Results

Check this box to limit the search results field to only the fields entered in "Display fields."
Results per page

Enter a number for how many objects should appear on each page of search results.
Enable search navigation block

Version 5
197
Start

Check this box to enable a block that gives users a previous/next browse through search results
after selecting an item, as well as an option to return to the main list of search results.
If you enable this block, you will also have to add the "Islandora search navigation" block to a
region (such as the First Sidebar or Second Sidebar) in admin/structure/block.

Sort settings
Sort fields allow users to re-order the search results based on certain criteria such as relevancy
or the date objects were added to the repository.
Sort fields must not be multivalued fields.
If you use sort fields, you will also have to add the "Islandora sort" block to a region (such as a
sidebar) in admin/structure/block.

Screenshot of Solr sort fields configuration

Facet settings
Facets are search terms that users can use to refine search results. For example, searchers
can use facets to show only results that match a specific subject heading, were created by a
specific author, or have a certain date range.
Facet fields from Solr should be non-tokenized strings. These fields are indicated in Islandora
Solr with (string) in the "Add another item" box.
If you use facet fields, you will also have to add the "Islandora facet" block to a region (such as
a sidebar) in admin/structure/block.

Version 5
198
Start

Minimum limit: There must be at least this number of values in the search results before
the facet displays on the search results page. A higher minimum limit will result in fewer
facets displaying.
Soft limit: The number of facet values to display above the "Show more" link. If you
enter 0, all facet values between the minimum and maximum limits will be displayed.
Maximum limit: The maximum number of values to display for each facet. Entering 20
would display the 20 most frequently occurring entries in each facet.

Advanced search block


Advanced search is a way to build search queries that search within specific Solr fields (as
opposed to the "simple" search box, which searches across the indexed values of all fields in
Solr).
Advanced search fields in Solr should be tokenized fields.

Version 5
199
Start

Screenshot of Solr advanced search configuration

Default boolean operator - An option for whether search results must contain all terms entered
in the advanced search (AND) or any term entered in the advanced search (OR) in order to
display.
For example:
(Title = report) AND (Creator = Department of Communications) will return only objects that
have "report" in the title and were created by the Department of Communications
(Title = report) OR (Creator = Department of Communications) will return all objects that have "
report" in the title as well as all objects created by the Department of Communications
(Title = report) NOT (Creator = Department of Communications) will return all objects that have "
report" in the title, excluding objects that were created by the Department of Communications
To use the advanced search, you will also have to add the "Islandora advanced search" block to
a theme region in admin/structure/block.
One way to present the advanced search block is to add it to the content theme region (the
main section on a page) and set the advanced search block to display only on a specific node (
an "advanced search" page node created in Drupal.)

Query defaults
This section contains additional default settings for all Solr queries in Islandora. Installations of
Islandora that have namespace restrictions must enter the namespaces in this section to restrict
the search results to only the relevant namespaces.

Required Solr fields


These Solr fields are required by Islandora in order to create a repository browse interface and
manage Fedora objects. These fields are populated with default values.

Version 5
200
Start

Other (debugging Solr)


This section contains a checkbox to turn "debug mode" on or off. Debug mode for Solr will show
the text of Solr queries in the Drupal display, and generally should not be used in a production
site.

Islandora Solr Metadata Display

Overview
The Islandora Solr metadata display module displays Solr indexed metadata from one or more
schemas on the Islandora data object pages.

Dependencies
This module requires the following modules/libraries:
Islandora
Tuque
Islandora Solr Search

Downloads
Release Notes and Downloads

Code Repository
https://github.com/islandora/islandora_solr_metadata

Installation
Install as usual, see this for further information.

Configuration
To use Solr indexed metadata in the display, go to Administration > Islandora > Metadata
Display (admin/islandora/metadata) and select "Islandora Solr Metadata." Click Save
Configuration.

Version 5
201
Start

To set up a display, go to Administration > Islandora > Solr Index » Metadata Display (admin/
islandora/search/islandora_solr/metadata).

Create a custom display


1. In the Metadata Display tab, select the Field Configuration tab.

2. Enter a configuration name (this will only be displayed to administrators.)

3. Create a machine name for this custom display (this can be the same as the configuration
name).
4. Click Add Configuration.

Add metadata fields and labels to a custom display


1. After you have created a custom display, click the linked configuration name to add fields
to that display.
2. Select the content models that will use this display.

3.
Version 5
202
Start

3. Add fields to the display by entering Solr field names with type "string." As you type in the
Add Field box, field names will be suggested from the index.

4. After you add fields, you can create custom labels and choose whether to hyperlink the
field values in the display. A hyperlinked field value will launch a new Solr search for other
records with that same value.

5. The "Description" field that shows up directly under an object's viewing derivative is
configured separately from the other display fields. Enter the field and an optional label in
the Description settings.

6. Click Save Configuration.

Content models with multiple metadata displays


A content model can have more than one metadata display configuration associated with it. In
this case, all fields present in both configurations are displayed, and the order of fields is
determined by Solr field weightings.

Version 5
203
Start

Islandora Solr Facet Pages

Overview
The Islandora Solr facet pages module creates an alphabetical "A to Z" browse from metadata
indexed in Solr. The "facets" are the fields that Solr will search in to build the A-to-Z browse.
You can set up multiple A-to-Z pages.

Dependencies
This module requires the following modules/libraries:
Islandora
Tuque
Islandora Solr Search

Downloads
Release Notes and Downloads

Code Repository
https://github.com/Islandora/islandora_solr_facet_pages

Installation
Install as usual, see this for further information.

Configuration
Configuration for this module is located in Administration > Islandora > Solr Index > Facet
Pages (admin/islandora/search/islandora_solr/facet_pages)

Version 5
204
Start

To set up an A-to-Z browse page for any Solr field:

1. Enter the name of an indexed Solr field of type "string" into Solr Field.

a. See Appendix D for a list of Solr fields.

2. Enter a label for the browse page for this Solr field.

3. Enter a unique path ending for this browse page.

a. The browse page will be automatically created at http://path.to.your.site/browse/[


path]
4. Click Save.

The example in the above image creates an A-to-Z subject browse:

Version 5
205
Start

Islandora Solr RSS Settings

Overview
Islandora Solr RSS Settings is included with the Islandora Solr module. The purpose of
Islandora Solr RSS Settings is to make Islandora search results from Solr available as an RSS
feed.

Version 5
206
Start

Configuration
Once the Islandora Solr module is installed and enabled, users with administrator permissions
can configure RSS feeds of Solr search results.

Set up the Islandora Solr RSS feed display


1. Go to admin/islandora/search/islandora_solr/settings and check the box to enable RSS as
a secondary display profile.
2. Click Save Solr Configuration.

Add fields from Solr to the RSS feed


1. Go to admin/islandora/search/islandora_solr/rss

2. Enter a Solr field name in each of the Item Settings fields. See Appendix D: Solr Schema
(Search Term) Reference for a list of Solr fields.
3. Enter RSS-specific information in the Channel Settings fields.

Using Islandora RSS


1. Search using the Islandora simple search or advanced search.

2. An RSS icon is included at the top of the search results page.

Screenshot of Islandora Solr search results showing RSS icon

3. Click the RSS icon to open the RSS feed of the search results.

You can also see the RSS version of any Solr query by adding &solr_profile=
rss to the end of the query URL.

Version 5
207
Start

3.4.13 Islandora Solr Views

Overview
The Islandora Solr Views module adds Islandora Solr as an option when creating or editing
views with the Drupal Views module. This means you can author Drupal Views that pull
metadata from Solr documents, and makes it possible to construct new types of visualizations
and access points for collections, and new ways of authoring Views blocks using things like
contextual filters. This module is most useful to those with some experience with Drupal Views
in 7.x and its features. In short, anything one could do with Drupal Views - e.g. create pages
that contain the OCR output of books, or create blocks with short at-a-glance lists of new
objects added to a particular collection - can be done with Islandora's Solr index.

Dependencies
A functioning, properly-indexed Islandora Solr Search installation
Drupal Views module
The Drupal Views UI module (part of the above Drupal Views module) should be enabled
if you would like to create views from inside Drupal itself

Downloads
Release Notes and Downloads

Usage
Upon enabling the Drupal Views, Drupal Views UI and Islandora Solr Search modules, the
Views configuration screen should be available at http://path.to.your.site/admin/structure/views
. From here, you can click 'Add new view' to start creating a Solr View.

On the next screen, enter a name for your view, and from the 'Show' drop-down menu, select '
Islandora Solr'. You can now click the 'Continue & Edit' button if you'd like to manipulate the
view now, or 'Save & Exit' if you would like to edit it later.

Version 5
208
Start

From here, most of the configuration and setup for your view is exactly the same as for any
other view, with a few significant differences. Islandora Solr Views adds Solr indices to the
FIELDS, FILTER CRITERIA and SORT CRITERIA sections.

Tutorial: Creating a block that contains the latest objects in a collection

This tutorial assumes a fresh installation of Islandora with the default Solr and Gsearch
setups, and that the Basic Image Solution Pack has been installed and contains
images.

1. Create a new block view


When creating a new view, the option to add a page will be checked, and the option to add a
block as well will be unchecked. Give the view a name, select 'Islandora Solr' from the Show
drop-down menu, uncheck 'Create a page' and check 'Create a block'.
By default, a block will be created that contains no more than five items in an unformatted list.
For this tutorial, these settings will be fine. Click 'Continue & Edit' to continue.

2. Remove the 'Islandora Solr: Score' field

Under 'Block details', you will see the basic settings for your block. By default, 'Islandora Solr:
Score' is added as a field to new views. We will need to remove it. Click on it, and then click the
'Remove' button.

Version 5
209
Start

3. Add the 'dc.title' field to FIELDS


Titles of objects created with an XML form are given the 'dc.title' field. This is what we are going
to want our block to display. Click the 'add' button beside the Fields section, and on the overlay
that comes up, select 'Islandora Solr: dc.title' from the list. Click 'Apply (all displays)'.
For a small block, we probably don't want a label showing up for every object listed, so uncheck
'Create a label'. Check the 'Link field to object' button to make sure each object is being linked
to from the block. Click 'Apply (all displays)' again to close the overlay.

4. Add the 'RELS_EXT_isMemberOfCollection_uri_ms' field to FILTER


CRITERIA
We want our objects to be filtered from a certain collection. RELS-EXT datastreams define this
collection with the format 'info:fedora/namespace:collection_pid'. In the case of a standard
installation of Islandora, the Basic Image Solution Pack will have the RELS-EXT
isMemberOfCollection_uri_ms field 'info:fedora/islandora:sp_basic_image_collection'. At any
time, you can check a collection's namespace:collection_pid by clicking the 'Manage' tab on
that collection, and then clicking the 'Datastreams' button. The collection's namespace:
collection_pid will be above the list of datastreams.
Beside 'FILTER CRITERIA', click the 'add' button. Check off 'Islandora Solr:
RELS_EXT_isMemberOfCOllection_uri_ms' from the list, and click 'Apply (all displays)'. On
the next screen, under the 'RELS_EXT_isMemberOfCOllection_uri_ms' field, add 'info:
fedora/islandora:sp_basic_image_collection'. Click 'Apply (all displays)' again to close the
overlay.

5. Add the 'fgs_createdDate_dt' field to SORT CRITERIA


We would like to view only the latest objects created in our list, and if there are more than five
objects total in the collection, we will need to have them sorted. The 'Islandora Solr:
fgs_createdDate_dt' field will allow us to display only the five latest objects in our list.
Beside 'SORT CRITERIA', click the 'add' button. Check off 'Islandora Solr:
fgs_createdDate_dt' from the list, and click 'Apply (all displays)'.
In order for the latest objects to show up on the top, we will need to sort them 'descending'
instead of 'ascending', so on the next page, click the radio button beside 'Sort descending'. Click
'Apply (all displays)' again to close the overlay.

Version 5
210
Start

6. Save the block and add it to part of the structure


Click the 'Save' button at the top of the view editing page. This will add it to the list of blocks in
your site's 'structure' section. You can add it to part of the structure by going to http://
path.to.your.site/admin/structure/block, scrolling down to the 'Disabled' block section at the
bottom, and adding it to one of the block regions.
Your new view will now show up in that region, listing all new images ingested into the Basic
Image collection and providing links to those images. The below example is of a view block
given the above setup, with the view name 'Image Feed', and a single image in that collection
called 'Sample Image'.

Configuration
The Islandora Solr Views module has no configuration options of its own, but pulls entries from
the Solr index. Check the Islandora Solr Search section for more information on setting up
Islandora Solr.

3.4.14 Islandora XML Sitemap

Overview
The Drupal XML Sitemap module does not include links to Islandora repository objects by
default. By using the Drupal XML Sitemap Custom module together with the Islandora XML
Sitemap module, URLs for Islandora objects will be automatically added to the XML sitemap
module database as custom links. Including Islandora objects in the Drupal sitemap makes
them more likely to be correctly indexed by search engines.

Dependencies
This module requires the following modules/libraries:
Islandora
Tuque
xmlsitemap_custom (Part of XML Sitemap)
Islandora Solr Search

Downloads
Version 5
211
Start

Downloads
Release Notes and Downloads

Installation
Install as usual, see this for further information.

Configuration
Set 'Last Modified Solr Field' and 'Maximum number of Islandora links to process at once' in
Administration » Islandora » XML Sitemap Integration (admin/islandora/xmlsitemap).

Notes
Administrators can configure the number of objects to add to the sitemap at once, as well as the
field to use to track when objects were last added to the sitemap.
In the administration tools for the Drupal XML sitemap module, the Custom Links tab (admin/
config/search/xmlsitemap/custom) provides a list of Islandora links in your sitemap. You can edit
or delete Islandora links from your sitemap in this tab.
The following hooks will create an update to the list of Islandora sitemap custom links:
hook_islandora_object_purged()

hook_islandora_object_ingested()

hook_islandora_object_modified()

hook_islandora_datastream_purged()

hook_islandora_datastream_ingested()

hook_islandora_datastream_modified()

3.4.15 MARCXML Module

Overview
The MARCXML Module is a plugin that works with all solution packs to add options to ingest
and view metadata in MARC (MAchine Readable Cataloging) format. When this module is
enabled:
On Single-Item Ingest - An optional step is added to the ingest process to browse your local
machine for MARC XML metadata instead of filling out the ingest form. This MARC XML file is
crosswalked and stored as a MODS record. The uploaded MARC XML is discarded after ingest
and is not attached to the Fedora object.

Version 5
212
Start

The ZIP batch importer can ingest MARCXML even if the MARCXML Module is not
installed. The ZIP importer transforms MARCXML to MODS using a different crosswalk
file than the one included in the MARCXML Module.

On Viewing - A new tab is added to all objects to view the MODS datastream as a MARC
record using an on-the-fly transformation. Click Download MARCXML to download a version of
the MODS metadata that has been transformed to MARC XML. Any object with a MODS
datastream can be viewed as a MARC record, whether or not it was ingested using the MARC
XML option.

The MARC XML record is never stored in Fedora - it is always generated on-the-fly by
the module from the data available in the MODS record stored in Fedora.

Dependencies
Information about dependencies can be found in the MARCXML module GitHub documentation.
The module uses Library of Congress XSL transformations to crosswalk MARCXML to MODS,
crosswalk MODS to MARCXML, and to display MODS as MARCXML online. The XSLs used in
this version of Islandora can be found in the GitHub repository.

Configuration
There are no configuration options available for the MARCXML module in Drupal. Enabling the
module adds the MARCXML tab to all solution packs for all users with permissions to view
Fedora objects, and makes the MARCXML upload option available for all content models during
ingest.

Tutorials
Using the MARCXML Module

Using the MARCXML Module


Enabling the MARCXML Module will add new options on ingesting or viewing an object.

Using MARCXML on Single-Item Ingest


1. Add an object to a collection.
2. After selecting a Content Model and Form, the next step will present the option to browse for
a MARCXML record to associate with your object:

Version 5
213
Start

To skip uploading a MARCXML file and fill out the ingest form instead, click Next
instead of browsing for a MARCXML file.

3. The MODS ingest form you selected will be pre-populated with data from your MARC record.
You can add or edit information as desired. All data will be saved as a MODS record, and the
MARCXML file you uploaded will be discarded.

Viewing MARC and Downloading MARCXML


All objects with a MODS datastream will also be viewable as a MARC record. This record can
be downloaded as MARC XML.

Version 5
214
Start

3.4.16 Simple Workflow

Overview
The Islandora Simple Workflow module causes a basic editorial workflow to be applied to the
ingest process.
When the module is enabled, objects ingested by most users are given an inactive state until
another user with proper permissions activates them. If a user has the permission "Bypass
default inactive object state" the default behaviour (object with active state) will persist. The "
Drupal Super User" (uid = 1) will always bypass the inactive state.

Dependencies
This module requires the following modules/libraries:
Islandora
Tuque

Downloads
Release Notes and Downloads

Installation
Install as usual, see this for further information.

Usage
Once the module is active, Simple Workflow causes Islandora to react differently to certain
users' permissions upon ingest of an object. Most users' uploads will be set to 'inactive' upon
ingest, and will be invisible to anyone without permission to view inactive objects. The following
permissions can be set up for particular groups at htttp://path.to.your.site/admin/people/
permissions, under the Islandora Simple Workflow section:
Bypass default inactive object state - Groups with this permission ingest objects as '
active' instead of 'inactive'.
Manage inactive objects - Groups with this permission are able to view and manage a
list of inactive objects at http://path.to.your.site/admin/islandora/simple_workflow/list;
this page contains links to the 'Properties' page of the 'Manage' tab for each object
whose state is set to Inactive.

Version 5
215
Start

Beyond this, any user wishing to upload objects needs to be part of a group with appropriate
uploading permissions, i.e. 'Create new repository objects' and 'View repository objects' at http://
path.to.your.site/admin/people/permissions.

It is important to check your Fedora installation's XACML policies to make sure that
nothing is preventing your user from uploading objects with an inactive state. For
example, your Fedora installation may include the policy file '
deny-inactive-or-deleted-objects-or-datastreams-if-not-administrator.xml', which
would prevent Simple Workflow from functioning as intended. You can check the
XACML policies on your server at $FEDORA_HOME/data/fedora-xacml-policies/
repository-policies/; in a standard installation they will be located in the ' default'
directory at the end of that path. After making changes to XACML policies, you will
need to restart Fedora.

Configuration
Simple Workflow objects can be managed at Administration » Islandora » Islandora Utility
Modules » Simple Workflow objects (admin/islandora/tools/simple_workflow/list).

3.4.17 XACML Editor

Overview
The Islandora XACML Editor provides a graphical user interface to edit XACML policies for
objects in a repository or collection. It adds a new section in the Manage tab for each object and
collection called Object Policy where permissions can be granted to Drupal users or roles for
the following:
Object Management: Controls ability to view the options on the Manage tab for objects
or collections.
Object Viewing: Controls ability to view the object or collection in Islandora browse and
search results.
Datastreams and MIME types: Controls ability to view specific datastreams by ID or
MIME type.

Dependencies
Version 5
216
Start

Dependencies
Islandora
Tuque
Islandora XACML API
Drupal.org modules:
ImageAPI
jQuery Update
jQuery UI

Installation
Install as usual, see this for further information.

Usage
Using the Object Policy tab to manage access restrictions with XACML

Configuration

Fedora Configuration
It may be desirable--and in fact necessary for some modules--to disable/remove ene of the
default XACML policies which denies any interactions with the POLICY datastream to users
without the "administrator" role.
This policy is located here: $FEDORA_HOME/data/fedora-xacml-policies/
repository-policies/default/
deny-policy-management-if-not-administrator.xml

Solr Searching Hook


In order to comply with XACML restrictions placed on objects, a hook is used to filter results that
do not conform to a searching user's roles and name. This hook will not function correctly if the
Solr fields for ViewableByUser and ViewableByRole are not defined correctly as they are
set in the XSLT. These values can be set through the admin page for the module.

Module Configuration
Configuration options for the Islandora XACML Editor and Islandora XACML API are available
at admin/islandora/tools/xacml

Version 5
217
Start

Islandora XACML API - Define which fields in the RELS-EXT hold access restriction
information so they can be indexed by Solr

Islandora XACML Editor - Configure default settings and options in the XACML editor for
collections and objects

Notes
When an object is added to a collection through the interface, the collection's POLICY
will be automatically applied to the new object.
Editing XACML policies outside of Islandora and adding them through the interface or
directly to Fedora objects may result in POLICY datastreams that can't be used by
Islandora. Use the XACML editor in the interface to make changes to XACML policies
whenever possible.

Setting up Drupal Roles and Permissions


Access restrictions to collections, objects, or datastreams in Islandora are controlled by a
combination of Drupal roles and permissions and XACML policies stored in Fedora. Drupal roles
and permissions control the type of access granted (access to view, manage, or delete) and
XACML restrictions control which specific collections, objects, or files users with those
permissions can access.
Here is an example procedure for making a collection (the History collection) that is viewable
only by a certain department (the Department of History):

1. Create a Drupal role for members of the Department of History.

2. In the Drupal permissions (admin/people/permissions), give the Department of History


role permission to "view repository objects."
This allows users with this role to view all public objects and all objects that are viewable
only by their role.
3. Assign Drupal users to the Department of History role.

4. Go to the History collection and click on the Manage tab.

5. Click on Object Policy.

6. Check the box for "Enable XACML restrictions on Object Viewing"

7. In the Object Viewing menu, select "Department of History."

Version 5
218
7.

Start

Select multiple roles or users with CTRL + click (Windows) or Command +click (
Mac) to avoid unselecting previously highlighted items in the list.

8. Click Set Permissions. This adds a POLICY datastream that restricts the collection
object itself, and any new objects added to this collection will automatically receive the
same POLICY.

Below are more detailed instructions on using the Object Policy tab together with Drupal roles
and permissions to restrict access to collections, objects, and files.

Object Management
Object Management policies restrict access to the Manage tab on objects or collections to only
the users and roles who are highlighted. These users and roles must also have Drupal
permissions to perform management functions on repository objects.
Users and roles who have object management permissions also have object viewing
permissions, regardless of the settings in Object Viewing. Drupal users with the "administrator"
role also have access to manage and view all Islandora collections, regardless of Object Policy
settings.

Version 5
219
Start

In order to prevent accidentally locking yourself out of an object or collection, the


XACML Editor will prompt you to always select your account and that of the admin
user (user 1). To remove a XACML policy completely, delete the POLICY datastream
under the Object Details tab rather than deselecting members in the XACML Editor.

Object Viewing
Object Viewing policies control who can view an object. If this option is not enabled, regular
Drupal permissions will apply.
When enabled, this option will grant viewing access only to users and roles who have the
necessary Drupal permissions and who are selected in the list of allowed users under Object
Viewing. Object viewing permissions also affect all Solr views and search results.

Version 5
220
Start

Datastreams and MIME types


Datastream (DSID) and MIME type restrictions control user access to individual datastreams on
an object or collection. If this option is enabled, only the selected users will be able to view
certain datastreams or file types attached to an object or collection. An example use of this
functionality is to restrict the master copy (OBJ) of a file to administrators, but make an access
copy or the metadata available to more users.
Viewing restrictions can be added by DSID (Fedora datastream ID, shown in the Manage >
Datastreams tab under ID) or by MIME type (shown in the Manage > Datastreams tab under
MIME TYPE).
DSID: Restrict a particular datastream on the object.
DSID Regex: Create a rule to restrict all data streams fitting a certain pattern or in a
certain class, i.e, POLICY/*
MIME type: Restrict access to a particular MIME type on an object.
MIME type Regex: Create a rule to restrict all MIME types fitting a certain pattern or in a
certain class, i.e, text/*

Version 5
221
Start

Collection Children
When editing the Object Policy at the collection level, an additional menu is available to
determine how the policies will be applied to children of the collection (objects and child
collections).

Version 5
222
Start

The options are:


New children of this object: XACML policies will only be applied to newly added objects
; existing objects will not be changed.
All children of this collection and collections within this collection (existing and
new)
All immediate children of this collection (shallow traversal)

Applying an XACML policy to a large number of existing objects requires updates to


the RELS-EXT and Solr index, and can be a time-intensive and resource-intensive
process. Treat this option as you would a batch ingest.

3.4.18 XML Form Builder

Overview
The Islandora Form Builder (part of the XML Forms package) makes it possible for users to
create, copy, and edit ingest forms, and to affiliate them with Content Models in the repository.
The form definitions are defined in XML and stored in the Drupal Database.

Version 5
223
Start

Dependencies
Same as XML Forms package
Islandora Core Module
Tuque
PHP Lib
Objective Forms
Downloads
Part of XML Forms
Install
The module is installed as part of the XML Forms package
Usage
The form builder can be reached by going to Islandora > Form Builder (admin/islandora/
xmlform).
From the main interface, users can:
Create a new form
Import a form
Copy a form
Edit a form
View a form
Export a form as an XML Form Definition
Delete a custom form
Associate the form with a content model

Version 5
224
Start

XML Form Edit GUI


This GUI models the XML Definition, allowing the user to add/remove/edit form elements, as
well as change their order.
Common Form Elements
Implemented by all elements.
XML CRUD Actions (Create, Read, Update, Delete)
Advanced Form Elements
Only implemented by some elements.
In most cases they will not be modified
XML CRUD Actions are very important. They define how to create/read/update/delete XML
nodes using the form elements value and properties.
All actions define the Path and Path Context properties. These define where approximately in
the XML document will the action be performed.

Version 5
225
Start

Path is an XPath that defines where the action will take place.
Path Context defines what context the path can be executed in. It can be one of three values:

1. Document: The XPath is executed at the root of the document.

2. Parent: The XPath is executed at its parents context. This is only valid if the form element
is embedded in another form element like a tab panel or fieldset, and that tab panel or
fieldsets Read action selected an XML node.
3. Self: The XPath is executed in the context selected by the Read action. This can be a bit
tricky to understand. Read is the first action performed on the form element before
rendering the element. Its used to populate the form element with a value. The node in
which it gets its value from is set to be the Self context.

XML Node Actions


Create
Path: XPath to the parent node where this new element will be inserted
Path Context: The context in which Path is executed.
Schema: The XPath to this elements to create’s definition.
Type: One of three values: Element, Attribute, XML. This is the type of XML node that
will be created. XML stands for a XML snippet.
Element
Value: The name of the type to create if it is Element orAttribute. If it is XML then it will
be a XML snippet where the form fields submitted value will replace %value% in the
snippet.
Read
Path: XPath to the element we want to use to populate this form field.
Path Context: The context in which Path is executed.
Update
Path: XPath to the element to update. This will often be self::node().
Path Context: The context in which Path is executed, this is often self which means it
refers to the node selected by Read.
Schema: Schema path to the elements definition, this is used for validating the
submitted form values.
Delete
Path: XPath to the element to delete. This will often be self::node().

Version 5
226
Start

Path Context: The context in which Path is executed. This is often self which means it
refers to the node selected by Read.

Tutorials
How to Edit/Create Ingest Forms

3.4.19 XML Forms

Overview
XML Forms is a collection of Drupal modules that allow for the manipulation of XML documents
though Drupal forms. The Islandora Form Builder (XML_Forms modules) makes it possible for
users to create, copy, and edit ingest forms, and to affiliate them with Content Models in the
repository.
The following Modules are installed as part of the XML Forms package. See inline
documentation for additional details.
Objective Forms
Islandora XML Form API
Islandora XML Schema API
Islandora XML Form Elements
Islandora XML Form Builder
Islandora XML Forms

Objective Forms
This module allows for the creation of Object Based Drupal Forms. It provides a number of
functions and class for processing/populating forms.
Some important notes.
Each Form Element is assigned a unique hash Form Property to identify it, #hash.
Each Form Element that is created is stored in a registry and it will persist though out the
lifetime of the form even if it's removed from the form. Ancestry of Form Elements is
stored so if a Form Element is cloned we will be able to determine the Form Element that
it was cloned from.
Form Properties can be objects. To define new Form Properties implement the hook
objectify_properties.
Forms will be auto-populated from $form_states[‘values’].

Version 5
227
Start

There is a FormStorage class that can be used to store any persistent data.

Islandora XML Form API


The core of the library this module provides functions for processing XML files through forms.
In essence this module models
The form to be processed.
The Form Properties needed to manipulate XML
The XML document to be manipulated
The actions required to generate repeating Form Elements (tabs,tags) from the XML
document
The schema needed to determine the insert locations of elements and the validation
requirements. (included via the Islandora XML Schema API)

Islandora XML Schema API


This module provides functions for processing Schema files. It's used to determine where to
insert XML Nodes, and how to validate them.

Islandora XML Form Elements


This module defines custom Drupal Form Elements along with AHAH callbacks.

Elements
tabs/tabpanels
These Form Elements are used to model XML Nodes that can repeat and contain other XML
Nodes.
Example:

<cntaddr> <!-- tabpanel one -->


<addrtype>undefined</addrtype>
<city>undefined</city>
<!-- ... -->
</cntaddr>
<cntaddr> <!-- tabpanel two -->
<addrtype>one</addrtype>
<!-- ... -->
</cntaddr>

tags/tag

Version 5
228
Start

These Form Elements are used to model XML Nodes that can repeat and contain only
character data.
Example:

<origin>test</origin> <!-- tag #1 --> <origin>undefined</origin> <


!-- tag #2 --> <origin>testing</origin> <!-- tag #3 -->

Dependencies
Islandora
Tuque
PHP Lib
Objective Forms

Installation
Install as usual, see this for further information.

Configuration
Create and import forms at Administration » Form Builder (admin/islandora/xmlform).

FAQ
Q. Can I convert an existing field to any form element type listed in the "Type" options under the
"Common Form Controls" tab (or create new form elements using any form element type)?
A. No. The following element types are not supported for full CRUD (create/read/update/delete)
operations:
checkbox
checkboxes
date
file
managed_file
password_confirm
radio
radios
tableselect

Version 5
229
Start

vertical_tabs
weight
button
image_button
submit

3.5 Dependencies
Dependencies are Drupal modules or server-side applications that other modules and
applications depend on to function. Dependencies are required before installing related modules
. Each section of the documentation describing a module describes its dependencies. If you find
that there is an undocumented dependency, please let us know via any community channel so
that we can update this documentation.
Dependencies in this section may themselves have additional dependencies that require
installation. We cannot provide instructions on how to install every sub-dependency required by
dependencies here; links are provided, however, to sub-dependencies' websites for further
instruction.
For many dependencies, a list of provisions are given - in this context, a provision will refer to
any module or application for which the dependency provides functionality.
Drupal Modules
ImageMagick
Libraries API
Objective Forms
PHP Lib
Packages
ffmpeg and ffmpeg2Theora
Ghostscript
LAME Encoder
pdftotext
Tesseract
Djatoka

Version 5
230
Start

3.5.1 Drupal Modules


These modules are generally part of the drupal project and provide enhancements to Islandora
Solution Packs.
ImageMagick
Libraries API
Objective Forms
PHP Lib

ImageMagick

Overview
ImageMagick is an extremely featureful image manipulation and conversion program that has
the added benefit of being able to be run from the command line. Islandora uses ImageMagick
to manipulate PDFs, as well as to create derivatives of large images.

Dependencies
ImageMagick is made up of two components:
The ImageMagick binaries, which need to be downloaded and installed on the server
The Drupal ImageMagick module, which needs to be downloaded and enabled in your
Drupal site.
Download links for both are provided below.

Provisions
Book Solution Pack
Newspaper Solution Pack
Large Image Solution Pack
PDF Solution Pack

Downloads
Binary releases for ImageMagick are available from the official site here: http://
www.imagemagick.org/script/binary-releases.php
Please consult the ImageMagick documentation for installation instructions.

Version 5
231
Start

The Drupal ImageMagick module can be found at the project page, here: http://drupal.org/
project/imagemagick

Configuration
The ImageMagick module needs to be installed and configured before it can be used with
Islandora. Specifically, you need to know where ImageMagick's 'convert' binary is found on
your server. Please consult the ImageMagick module's page for further instructions.
The ImageMagick configuration page can be found at http:// path.to.your.site/admin/config/
media/image-toolkit

Libraries API

Overview
The Libraries API module is a Drupal plugin that connects other Drupal modules to a repository
of user-defined libraries that can be downloaded and installed into a folder located at sites/all/
libraries or sites/name.of.site/libraries. It allows Drupal modules to draw on files that are not
necessarily Drupal modules themselves.

Provisions
OpenSeadragon
JWPlayer
Tuque
Islandora Internet Archive Bookreader

Downloads
The Libraries API module can be found on their project page on the Drupal site, at http://
drupal.org/project/libraries.

Usage
Any module that requires the Libraries API as a dependency will also require a 'libraries' folder
to be created in the same part of the Drupal directory structure as the Libraries module is found,
and a dependent library to be placed in that folder. For example, if the folder containing the
Libraries module is found at http://path.to.drupal/sites/all/modules/libraries, then you will
need to create a folder called http://path.to.drupal/sites/all/libraries, and place any
dependent libraries in there.
Please check the Libraries module's page on drupal.org for more information.

Version 5
232
Start

Objective Forms

Overview
The Objective Forms module contains a series of functions and classes that allow Drupal forms
to be treated as Fedora objects. It provides back-end support to XML Forms so that Drupal's
built-in form functions and classes can be used when filling out metadata.

Dependencies
PHP Lib

Provisions
XML Forms and its sub-modules

Downloads
Objective Forms is part of the Islandora Forms package, downloadable at the https://github.com
/Islandora/objective_forms page

Usage
Some important notes:
Each form element is assigned a unique hash Form Property to identify it, as #hash.
Each form element that is created and stored in a registry, and it will persist though out
the lifetime of the form even if it's removed from the form. Ancestry of Form Elements is
stored, so if a Form Element is cloned we will be able to determine the Form Element
that is was cloned from.
Form Properties can be objects. To define new Form Properties, implement the hook
objectify_properties.
Forms will be auto-populated from $form_states[‘values’].
There is a FormStorage class that can be used to store any persistent data.

Configuration
The Objective Forms module requires no configuration, and functions as soon as it is activated
and installed as a Drupal module.

Version 5
233
Start

PHP Lib
PHP Lib is a collection (or 'library') of interfaces, classes and functions that are used by a
variety of Islandora modules, most notably the Forms modules. It is used primarily to create
pages that convert records in XML formats to a more human-readable version that is also able
to be easily manipulated. This is done by a series of PHP files that Drupal includes when
loading these pages.

Dependencies
PHP Lib has no dependencies, but also has no functionality as a standalone module.

Provisions
XML Forms and its sub-modules
Objective Forms

Downloads
PHP Lib is part of the Islandora Forms package, downloadable at the https://github.com/
islandora/php_lib page.

Configuration
PHP Lib requires no configuration, and functions as soon as it is activated and installed as a
Drupal module.

3.5.2 Packages
This category includes standalone packages that are installed on the server itself as opposed to
your Islandora installation. This means that you will likely need administrator access to the
server before installing these components. Because of the nature of installing software, and the
differences between operating systems, it is unlikely that we will be able to give more than basic
support instructions for these dependencies. Please check each dependency's website for
details on how add them to your server.
ffmpeg and ffmpeg2Theora
Ghostscript
LAME Encoder
pdftotext
Tesseract

ffmpeg and ffmpeg2Theora


Version 5
234
Start

ffmpeg and ffmpeg2Theora

Overview
ffmpeg and ffmpeg2theora are video converters used by Islandora to perform conversion and
playback of different video types. The ffmpeg tool itself is a shell that can be set up to support
different video and audio codecs, depending on the needs of the Islandora installation.
ffmpeg2Theora is used to add functionality to ffmpeg, particularly in creating an OGG Vorbis
copy of the video's audio stream. The installation process for these tools will vary deeply
depending on the needs of your site.

Dependencies
ffmpeg needs to be compiled and installed with additional libraries in order for Islandora
to support multiple codecs
ffmpeg2Theora has multiple dependencies that will need to be resolved; check the site
for installation instructions

Provisions
Video Solution Pack

Downloads
ffmpeg is found on the official ffmpeg site's download page, http://ffmpeg.org/download.html
ffmpeg2theora is found at http://v2v.cc/~j/ffmpeg2theora/download.html

Installation

ffmpeg
ffmpeg's downloads page includes links to its source code for installation; however, in order for
Islandora to support additional codecs, additional libraries will have to be installed and enabled
during compilation. For additional information, check ffmpeg's compilation guide on how to
include additional codecs for your operating system and compile ffmpeg.

ffmpeg2Theora
ffmpeg2Theora's downloads page includes both the source code and binaries for installation;
you may be able to install from the binaries, or for Linux installations, ffmpeg2Theora may be
included in your distribution's package manager. For Debian- or Ubuntu-based systems, you
can use:

Version 5
235
Start

sudo apt-get install ffmpeg2theora

Configuration
Check the configuration section for the Video Solution Pack for more information on how to
integrate these converters into Islandora.

Ghostscript

Overview
Ghostscript is a program specifically designed to take a PDF file and convert it using one of
several 'devices' as a method for creating output. These devices can vary from TIFF encoders
of various type, to JPEG and PNG, and even back to PDF. Islandora uses Ghostscript to take
the individual PDF datastreams of each page of a Paged Content collection and concatenate
them into a complete PDF that can then be appended to the Paged Content collection itself as a
PDF datastream.

Provisions
Ghostscript provides additional support for Islandora Paged Content

Downloads
The latest version of Ghostscript can be downloaded at the official site: http://
www.ghostscript.com/download/gsdnld.html

Installation
Ghostscript can be compiled from source, or the binary from the download page can be
installed and run. Islandora's Paged Content module simply requires the path to Ghostscript to
run, so in most cases, that binary is all that is needed.
For many Linux installations, Ghostscript is either included with the operating system or can be
installed from a package manager. For example, on Debian- and Ubuntu-based distributions,
Ghostscript can be installed by running:

sudo apt-get install gs

Version 5
236
Start

Configuration
Check the Islandora Paged Content page for more information on how to integrate Ghostscript
into Islandora.

LAME Encoder

Overview
LAME is an encoder designed to convert various digital audio formats to MP3. It is used by
Islandora to create MP3 datastreams when ingesting audio objects.

Encoding and playing MP3s is restricted by patent and copyright laws that vary from
country to country. You will need to determine this for your own installation.

Provisions
Audio Solution Pack

Downloads
The LAME Encoder can be found at http://lame.sourceforge.net/download.php, and includes
source code for compilation. For Linux installations, some package managers include LAME as
part of the standard repositories; for example, on Debian- and Ubuntu-based distributions, it can
be installed with:

sudo apt-get install lame

Ubuntu-based systems have the option to install LAME when the operating system is
being installed as part of the ubuntu-restricted-extras package.

Configuration
Check the Audio Solution Pack page for more information on how to integrate the LAME
Encoder with Islandora.

Version 5
237
Start

pdftotext

Overview
pdftotext is a utility that comes as part of the Foolabs Xpdf package. It is used by the PDF
Solution Pack to extract text from text-based PDFs so that it can be appended to the object as a
FULL_TEXT datastream.

Provisions
PDF Solution Pack

Downloads
pdftotext is installed as part of Xpdf, which can be found at Foolabs' official site, http://
www.foolabs.com/xpdf/download.html. For Windows and Mac installations, a binary installer
exists there; for Linux installations, however, you may compile it from source, use the binaries
from the site, or much more simply use your distribution's package manager to install it
automatically; on Debian- and Ubuntu-based systems, this can be accomplished by running:

sudo apt-get install xpdf-utils


or
sudo apt-get install poppler-utils

Usage
More information on how to integrate pdftotext with Islandora can be found on the PDF Solution
Pack page.

Tesseract

Overview
Tesseract is an Optical Character Recognition program that Islandora uses to extract text from
images to files that can then be appended to an object as datastreams. It supports HOCR
standards, and when invoked, Islandora will use it to create both HOCR and raw OCR output.
Tesseract supports multiple languages, the installation of which are recognized by the Islandora
OCR module. Tesseract is recognized as one of the most accurate open source OCR engines
available, Tesseract will read binary, grey, or colour images and output text. A TIFF reader that
will read uncompressed TIFF images is also included.

Dependencies
Version 5
238
Start

Dependencies
Autotools (Make, etc.)
Leptonica image processing library

Provisions
Islandora OCR

Installation

For Linux installations: While it is likely that your distribution's package manager may
contain Tesseract in one of its repositories, it is EXTREMELY unlikely that it will be the
correct version. For the Islandora OCR module to create OCR derivatives, Tesseract
3.02.02 or higher is required. At the time of writing, this is the latest stable version.
THIS MEANS THAT IT IS LIKELY THAT YOU WILL HAVE TO COMPILE IT FROM
SOURCE.

Tesseract an OCR engine that was developed at HP Labs between 1985 and 1995 - it is
currently managed by a team at Google; the latest stable release can be found on the
downloads page of their website, https://code.google.com/p/tesseract-ocr/downloads/list. A
binary installer exists for Windows, and specific instructions for installing on a Mac through
MacPorts can be found in the Tesseract readme here: https://code.google.com/p/tesseract-ocr/
wiki/ReadMe. For Linux users, or any others compiling it from source, you will need to make
sure that you also have the Leptonica library installed, and that you have appropriate source
building tools.

Configuration

Additional Language Support


Tesseract requires little configuration out of the box; that being said, Islandora supports the
installation of multiple languages for OCR processing, and may even require English language
support. These additional languages can be found on Tesseract's download page.
To install additional languages into Islandora, you will need to know the path to your Tesseract
installation's 'tessdata' folder. On Windows, this will tend to be C:\Program Files (x86)\Tesseract
OCR\tessdata, if you've used the Tesseract website's own installation case. On Mac, a ny
language can be installed with MacPorts by sudo port install tesseract-<langcode> . List of
available langcodes can be found on MacPorts tesseract page . On Linux, the path will vary
from distribution to distribution, but will often be /usr/local/share/tessdata or /usr/share/tessdata.
Once you have found the correct folder,

Version 5
239
Start

Download one of the language tarballs from the website


Extract it
Copy the contents of the 'tessdata' folder inside the tarball to the 'tessdata' folder on your
computer
With the Islandora OCR module installed in your site, navigate to http:// path.to.your.site/
admin/islandora/tools/ocr and check off the new language
Click 'Save configuration'
Your new language should now be available to perform OCR on Paged Content.

3.5.3 Djatoka

Overview
The Djatoka JPEG 2000 Image Server is a plug-in image server that images can be sent to for
processing. It can function with an installation of Apache Tomcat as a web app. Islandora uses
Djatoka to prepare TIFF images for viewing, particularly with the Internet Archive Bookreader

Dependencies
A working web app server to install it to (Tomcat - bundled with Fedora - in a default
installation)

Provisions
Islandora Internet Archive Bookreader
Large Image Solution Pack
Open Seadragon

Downloads
Djatoka can be downloaded from the project's Sourceforge page at http://sourceforge.net/
projects/djatoka/files/djatoka/.

Installation
Installation Steps:

1. Download and install Djatoka on your Fedora server by following the installation
instructions at: http://sourceforge.net/p/djatoka/code/HEAD/tree/INSTALL.txt.

2.
Version 5
240
Start

2. For this example, we have installed Djatoka in /opt/adore-djatoka-1.1. Once Djatoka has
been verified and installed, you will need to change the environment variables in the $
CATALINA_HOME/bin/startup.sh script. At the very end of the file, insert the following:

. /opt/adore-djatoka-1.1/bin/env.sh
export JAVA_OPTS
echo $JAVA_OPTS
exec "$PRGDIR"/"$EXECUTABLE" start "$@"

3. Then, modify the env.sh file found in /opt/adore-djatoka-1.1/bin/

a) At the top of the file:

Change this: To this:

#!/bin/sh #!/bin/sh
# setup environment variables for shell # setup environment variables for shell
script script
CURRENTDIR=$PWD
# Define DJATOKA_HOME dynamically # Define DJATOKA_HOME dynamically
LAUNCHDIR=$PWD LAUNCHDIR=/opt/adore-djatoka-1.1/bin
cd .. #cd ..

DJATOKA_HOME=`pwd` DJATOKA_HOME=/opt/adore-djatoka-1.1
LIBPATH=$DJATOKA_HOME/lib LIBPATH=$DJATOKA_HOME/lib

b) Then, at the bottom of the file:

Change this: To this:

KAKADU_HOME=$DJATOKA_HOME/bin/$ KAKADU_HOME=$DJATOKA_HOME/
PLATFORM bin/$PLATFORM
export KAKADU_HOME #cd $LAUNCHDIR
cd $LAUNCHDIR

for line in `ls -1 $LIBPATH | grep '.jar'` #for line in `ls -1 $LIBPATH | grep '.jar'`
do # do
classpath="$classpath:$LIBPATH/$line" # classpath="$classpath:$LIBPATH/$
done line"
#done
#go back to tomcat dir

Version 5
241
Start

#cd $CURRENTDIR
#DEBUG="-Xdebug -Xrunjdwp:transport=
dt_socket,address=8000,server=y,suspend= #DEBUG="-Xdebug -Xrunjdwp:transport
n" =dt_socket,address=8000,server=y,
CLASSPATH=.:../build/:$classpath suspend=n"
JAVA_OPTS="$DEBUG - #CLASSPATH=.:../build/:$classpath
Djava.awt.headless=true -Xmx512M - JAVA_OPTS="$JAVA_OPTS -
Xms64M -Dkakadu.home=$ Djava.awt.headless=true -
KAKADU_HOME -Djava.library.path=$ Dkakadu.home=$KAKADU_HOME -
LIBPATH/$PLATFORM $ Djava.library.path=$LIBPATH/$
KAKADU_LIBRARY_PATH" PLATFORM $
KAKADU_LIBRARY_PATH"

4. Restart Fedora and test the Djatoka application by going to: http://\[fedora-server\]:8080/
adore-djatoka
To test your installation, click the 'Update Image' button. If you do not see part of an
image from the Library of Congress there is a problem with your Djatoka installation. Go
back and review the installation instructions to make sure that they were followed
correctly.

Though not required, it is a good idea to set the path for Djatoka log files. You
can do this by adding a line to the log4j.properties file. For example:
log.dir=/usr/local/fedora/server/logs/

Accommodating Viewing Restrictions for Djatoka


The Djatoka image viewer must send authentication credentials to Fedora in order to get titles
back. For most set-ups, this communication between Djatoka and Fedora will be direct.
However, if you wish to put Djatoka behind an authentication wall to restrict the view of objects
to certain users in Fedora, you will need to make some additional configurations.
The islandora-servlet-filter.jar, which is part of the earlier Drupal Server Filter download, is
required to facilitate this communication. The islandora-servlet-filter.jar should resides in $
CATALINA_HOME/webapps/fedora/WEB-INF/lib
Installation Steps:

1. Make the following change to the web.xml located in $CATALINA_HOME/webapps/


fedora/WEB-INF/

Version 5
242
1.

Start

<filter>
<filter-name>DrupalFilter</filter-name>
<filter-class>ca.upei.roblib.fedora.servletfilter.FilterDrupal
</filter-class>
</filter>
<filter>
<filter-name>IslandoraAuthFilter</filter-name>
<filter-class>
ca.upei.roblib.fedora.servletfilter.FilterIslandoraAuth</
filter-class>
</filter>
<filter>
<filter-name>RestApiAuthnFilter</filter-name>
<filter-class>
fedora.server.security.servletfilters.FilterRestApiAuthn</
filter-class>
</filter>
...
<filter-mapping>
<filter-name>DrupalFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>IslandoraAuthFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>EnforceAuthnFilter</filter-name>
<servlet-name>AxisServlet</servlet-name>
</filter-mapping>

2. Then, modify the $FEDORA_HOME/server/config/filter-drupal.xml file by adding the


following the bottom of the file, just before </FilterDrupal_Connection>

<service_requests>
<service name="djatoka">
<\!-\- space-separated list of allowed ips. use 'local' to
allow requests from same ip as fedora \-->
<allowed_ips>local</allowed_ips>
<\!-\- request uri must match this regex to be eligible for
service access \-->
<allowed_uri_pattern>^.*/(JP2\|TEI)$</allowed_uri_pattern>
<\!-\- <allowed_uri_pattern>^.*$</allowed_uri_pattern> \-->
<\!-\- space-separated list of roles granted to service
requests \-->
<roles>administrator fedora_anonymous</roles>
</service>
</service_requests>

Version 5
243
Start

3. Restart Fedora to apply the changes.

4. To test the filter, access a Fedora with large image objects that have restricted security
policies.

Version 5
244
Start

4 Installation
In this section, you will find installation instructions for Islandora, aimed at different use cases:

4.1 Virtual Machine


Suitable for new users who want explore or experiment with Islandora, requiring minimal time
and set-up. Aimed at a general audience.

4.2 Enterprise
Suitable for full installations of Islandora in a development or production environment. Aimed at
users with some technical experience.

4.3 Migration/Upgrade
For existing Islandora installations, covering the migration or upgrade of each major component
of an Islandora site: Drupal, Islandora Modules, and Fedora.

4.4 Release Notes and Downloads


Notes on known issues and improvements in the latest release and canonical links to download
each module.
Virtual Machine
Enterprise
Option 1: Installing the Minimum Islandora Stack
milestone 1 - Installing Fedora
Installing Java SE 7 jdk
Setting up a MySQL Database for Fedora
milestone 2 - Installing Drupal
milestone 3 - Installing & Configuring Drupal Filter
milestone 4 - Installing The "Tuque" library
milestone 5 - Installing the Islandora Essential Modules

Version 5
245
Start

milestone 6 - Installing Solr and GSearch


Search & Discovery in Islandora
Customizing GSearch and Solr
Index Drupal Content in Islandora's Solr index
Upgrading From Older Versions of Solr and GSearch
Troubleshooting the Minimum Stack Installation
Option 2: automated installations (islandora_chef)
Installing the Islandora Enhancement Modules
Notes on Solution Pack & Tool Dependencies
Customizing Islandora
Troubleshooting the Enterprise Setup
Migration/Upgrade
Update Drupal from version 7.31 to version 7.36
Update Islandora from version 7.x-1.3 to version 7.x-1.5RC1
Update Fedora from version 3.7.0 to version 3.8.0
3rd Party Integrations
Archidora
Digital Humanities
DuraCloud
iRods
ModeShape
Pydio
Taverna
Release Notes and Downloads

4.5 Virtual Machine


This section outlines how to run a local version of Islandora as a virtual machine (VM) image.
The Islandora VM is a virtual instance of Ubuntu Linux that comes with all of the components of
the Islandora stack already installed and configured properly, resulting in a minimal Islandora
instance (similar to the Islandora Sandbox ). Due to the generic way that the Islandora VM is
configured, it should not be used as a production instance (for a production Islandora, see the

Version 5
246
Start

Enterprise installation section ). The Islandora VM is best used as a disposable isolated


environment for testing and experimentation with Islandora’s internals. Users who are new to
Islandora are encouraged to use the VM to explore the backend of a working Islandora instance
and try out new modules without lasting consequences.
The primary way to use the Islandora VM is by downloading a .ova file (which stands for Open
Virtual Application, a type of file format for VMs) from the http://islandora.ca/downloads and
running it with VirtualBox . Every time a new version of Islandora is released, you will find it on
the Islandora website for download. Release candidates (betas of new Islandora versions) are
also sometimes made available for testing before a release.
Another option is to use Vagrant a command line utility that provides an alternate interface to
VirtualBox as well as an alternate way of packaging and distributing virtual machines for others
to use as a Vagrantfile (and associated provisioning scripts ). Vagrant is popular with Islandora
developers because it allows them to quickly destroy and rebuild VMs from the command line,
as well as create customized virtual Islandora instances featuring new modules and/or different
components and easily share them with others for review.
Both of the above methods for running the Islandora VM are described in greater detail below,
and require administrative access to a machine with at least 4GB of RAM. Running an operating
system inside of an operating system consumes a relatively large amount of memory, so at
least 4GB is recommended in order to avoid slow-running VMs.

4.5.1 Using VirtualBox


The easiest way to use the Islandora VM is by running it with VirtualBox. See chapter 2 of the
VirtualBox documentation for instructions on how to install VirtualBox for your operating system
. Once VirtualBox has been installed on your machine, download the virtual machine image of
the latest stable Islandora release from http://islandora.ca/downloads under “Virtual Machine
Image”, or download past versions of Islandora from the list at the bottom of the page under “
Virtual Machine Archive”. All of these links lead to .ova files which are fairly large and may take
a while to download.
Once the .ova file has finished downloading, double click on it or open it with VirtualBox. This
will open up VirtualBox’s import menu where it allows you to override some of the preset
configurations; don’t do this unless you have a good reason. Click the “Import” button at the
bottom of the window to start the import process (this may take a few minutes). When
VirtualBox is done importing, select the Islandora VM from the list of all imported virtual
machines (if you have installed VirtualBox from scratch, the Islandora VM should be the only
one) and then select the green “Start” arrow at the top of the window to run the Islandora VM.
This will open up a console in a new window giving you command line access to the Islandora
VM. Once the VM is done loading, it will prompt you for a username and password: both are ‘
vagrant’. After logging in, you will be in the home directory of the running Islandora VM. You can
find the VM’s Drupal instance by navigating to ‘ /var/www/drupal/htdocs/ ’, Fedora, Solr and

Version 5
247
Start

Tomcat are at ‘ /usr/share/fedora ’, ‘ /usr/share/solr ’ and ‘ /usr/share/tomcat6 ’, respectively.


Access the web interface by opening a browser and going to http://localhost:8181/ . If you have
SSH available on your local machine, you can log in to the virtual machine directly with ‘ssh -p
2222 vagrant@localhost’ and entering the password ‘vagrant’ (this is helpful if you dislike the
black and white VirtualBox shell interface, or prefer to use your own terminal emulator).

4.5.2 Using Vagrant


If you prefer to work from the command line or your want to easily create customized virtual
Islandora instances to share with the community, consider using Vagrant. Vagrant requires
VirtualBox to run, so after installing VirtualBox download and install Vagrant and learn the basic
commands . You can find the latest Islandora Vagrantfile and provisioning scripts at https://
github.com/Islandora-Labs/islandora_vagrant ; follow the instructions in the README.md file to
get it up and running. Downloading and installing all Islandora’s components will take some time
. Grab a coffee while you wait!
Once you have the Islandora Vagrant VM running, you will find Drupal at ‘ /var/www/html/drupal
’. Fedora, Solr and Tomcat are at ‘ /usr/local/fedora ’, ‘ /usr/local/solr ’ and ‘ /var/lib/tomcat7 ’,
respectively. Individual components of the Islandora stack are installed with shell scripts in the
repo’s scripts folder .
If you would like to create your own customized instance of Islandora to share with others and/
or test a specific use case, make a fork of the islandora_vagrant repo, modify the scripts and
Vagrantfile to accommodate whatever customizations you require and share the new repo’s
GitHub URL with others. If you make changes to a customized Islandora Vagrant repo and
would like to contribute those changes back to the original author, be a good neighbor and
submit them with a pull request .

4.6 Enterprise
In this section you will find details instructions for installing Islandora on a server. Please note
that while these instructions attempt to be as general as possible, the wide variation in server
environments may require some adjustments for your particular installation. For further help,
please visit our general and developer user groups.
Option 1: Installing the Minimum Islandora Stack
milestone 1 - Installing Fedora
Installing Java SE 7 jdk
Setting up a MySQL Database for Fedora
milestone 2 - Installing Drupal
milestone 3 - Installing & Configuring Drupal Filter

Version 5
248
Start

milestone 4 - Installing The "Tuque" library


milestone 5 - Installing the Islandora Essential Modules
milestone 6 - Installing Solr and GSearch
Search & Discovery in Islandora
Customizing GSearch and Solr
Index Drupal Content in Islandora's Solr index
Upgrading From Older Versions of Solr and GSearch
Troubleshooting the Minimum Stack Installation
Option 2: automated installations (islandora_chef)
Installing the Islandora Enhancement Modules
Notes on Solution Pack & Tool Dependencies
Customizing Islandora
Troubleshooting the Enterprise Setup

4.6.1 Option 1: Installing the Minimum Islandora Stack


In this section (Option 1) we divided the installation into a very specific sequence of milestones,
which enable the Islandora Minimum Viable Functionality, which is the core set of modules and
dependencies needed to have a functional installation of Islandora.
These milestones help ensure that pre-requisites for subsequent steps are always met and
tested before hand.

Other Installation Options


Sandbox : not really an install, but more ready to use Islandora space on the
web that you can use to test Islandora
Virtual Machine : pre-packaged virtual computer system that runs on your local
machine. You need to have a Virtualization Software to "host" / "run" the Virtual
Machine.
Local install : download an install the individual pieces required to use Islandora
on your local machine. Requires various degrees of System Administration
experience, depending on your operating system.
Drush : a command line shell and scripting interface for Drupal that we highly
recommend for installation and development for Islandora. Installations
instructions for multiple platforms are provided on the Drush github page.

Version 5
249
Start

"Local install" - Pre-installation Software Checklist

Server Dependencies
The following resources must be present on the server where you plan to install Islandora. Each
of these items is detailed in the relevant section of the installation process; this is merely meant
as a quick checklist to review the overall set of resources you may have to install on your server
:
PHP 5.3 (minimum)
PHP5-curl
PHP-soap
PHP5-xsl
Apache web server.
A relational database management system (MySQL recommended)
Java SE Development Kit (JDK) 6/7
A storage applic ation server. Fedora includes the Tomcat Application Server.

"LAMP" stack
As a point of reference, having the combined installation of Apache, MySQL,
and PHP under Linux, is called a "LAMP" stack. You should consider this
one-step-install-all procedure on Ubuntu 12.04LTS:

sudo tasksel install lamp-server

This will prompt you for a MySQL password for root. Enter it twice.

Components and Module Versions


Please see the Supported Versions section of the Release Notes and Downloads page.

Do not mix and match different versions of modules or components.

Version 5
250
Start

"Local install" - Installation Instructions Overview


An important aspect of the installation is for the person doing it to understand how all the
moving parts fix together. The illustration below shows all the typical Islandora developed
components in red . The other supporting components/applications are represented in other
colors. However we overload the term "Islandora" to represent the whole repository solution
stack.

The next few sections will lead you through the installation of Dependencies, Drupal, Fedora,
and the Islandora Module. These instructions assume an *nix environment. Our current
Windows support status is available here. The arrangement in Milestones is designed so that
you are advised to perform a snapshot backup at the end of each milestone. This way if the
step you are working on fails to install and test properly you'll have something to fall back on,
without having to restart from scratch. You may do the snapshot backup just by stooping all the
services and creating a tarball of the directory trees target of the installation (more details on
each milestone).

milestone 1 - Installing Fedora

milestone 2 - Installing Drupal

milestone 3 - Installing & Configuring Drupal Filter

milestone 4 - Installing The "Tuque" library

Version 5
251
Start

milestone 5 - Installing the Islandora Essential Modules

milestone 6 - Installing Solr and GSearch

Islandora Diagram

milestone 1 - Installing Fedora


Version 5
252
Start

milestone 1 - Installing Fedora

On This Page
Pre-installation Software Checklist
MySQL Database
Installation Steps
Checking Fedora Commons Installation
Setting XACML Policies
Adjusting access for more than "localhost"
Create a milestone 1 snapshot backup:
Fedora, along with Drupal, MySQL, Solr and GSearch, is one of the core technologies behind
Islandora. This chapter will cover the basic steps for installing Fedora - for more information,
please see the FedoraCommons documentation.
Fedora is available under the terms of the Apache License and has a very active open source
community producing additional tools, applications and utilities. Islandora currently uses Fedora
version 3.7.0 (version 3.8.x series is still under testing)

Pre-installation Software Checklist


Fedora must have the following to be set-up and running prior to beginning your installation:
Java SE Development Kit (JDK) 6/7.
You can also see Installing Java SE 7 jdk for a quick installation instruction.
A database: This is typically some version of MySQL. Consult the Fedora installation and
configuration page for notes on running other databases.

MySQL Database
See Setting up a MySQL Database for Fedora for information on configuring the
database for Fedora.

Installation Steps
1. Download the latest release of Fedora from Fedora Commons (3.5, 3.6.2, 3.7.0 have
been tested for use with Islandora).
2. Read through Fedora's Installation and Configuration page to ensure the pre-installation
system pre-requisites are met. Actually running the installer is done later.

3.
Version 5
253
Start

3. Prepare your local environment variables by modifying the .bash_profile or .profile file in
the home directory of the superuser performing the fedora installation ; instead of
modifying the superuser .bash_profile, you may create a file with the environment
variables, and source it each time you open a new superuser shell to do the installation.
Fedora will need to be given variables to find the main fedora directory, the main tomcat
directory, and the location of your Java installation (JDK 6/7). An example set of [Unix/
Linux] environment variables are given here.

The following example assumes Java is installed in /usr/lib/jvm/java-7-oracle and Fedora


is installed in /usr/local/fedora.

PATH=/opt/java/bin:$PATH:$HOME/bin
export FEDORA_HOME=/usr/local/fedora
export CATALINA_HOME=/usr/local/fedora/tomcat
export JAVA_OPTS="-Xms1024m -Xmx1024m -XX:MaxPermSize=128m -
Djavax.net.ssl.trustStore=/usr/local/fedora/server/truststore
-Djavax.net.ssl.trustStorePassword=tomcat"
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
export JRE_HOME=/usr/lib/jvm/java-7-oracle/jre
export KAKADU_LIBRARY_PATH=/usr/local/djatoka/lib/Linux-x86-64

4. Before beginning your Fedora installation, create a database for Fedora to use. This is
not the same database that used for your Drupal installation.
5. Start the installer, navigate to the directory where you downloaded the install file (for
Fedora 3.7.0, the installer is called: fcrepo-installer-3.7.0.jar) and do one of the following
methods:
a. CUSTOM INSTALL - Manually:

i. Run the following command:

Command Line for "CUSTOM INSTALL - Manually" of Fedora


Commons

$ java -jar ./fcrepo-installer-3.7.0.jar

ii. Select the CUSTOM INSTALL.

Selecting "CUSTOM INSTALL"


It is important to select the Custom Install as it will enable the
resource index by default, which is the backbone of Islandora's
collection views and other functionality.

Version 5
254
Start

iii. The Fedora installer will prompt you for responses to a series of questions.
Answer these questions according to the following "install.properties":

Example "install.properties" for an OS X Environment

Installation type - custom


home directory - /usr/local/fedora (default)
Password - [fedora_password]
server host - localhost (default) [could be a domain
name etc depending on your environment]
app server context - (default)
API-A - false (default)
ssl avail - true
ssl required for api-a - false (default)
ssl required for api-m - false
servlet included - included (default)
tomcat home -(default)
tomcat http port - 8080 (default)
tomcat shutdown - 8005 (default)
tomcat ssl - 8443 (default)
keystore file - included
databse - mysql
mysql driver - (default)
database username - fedoraAdmin
database password - [password]
jdbc url - (default)
jdbc class- (default)
Enable FESL authn - true
Enable FESL authz - false
policy enforcement - true
low level storage - akubra-fs (default)
resource index - true
messaging - true
messaging provider - (default)
deploy local services - true

Details about the CUSTOM INSTALL questions


(Source: Installation and Configuration Guide - Fedora 3.7 Documentation)
Servlet Container

Version 5
255
Start

The installer will automatically configure and deploy to Tomcat 6.0.x and 7.0.
x servlet containers. However, if an existing Tomcat installation (as opposed
to the Tomcat bundled with the installer) was selected, the installer will not
overwrite your existing server.xml, but rather, place a modified copy at
FEDORA_HOME/install so that you may review it before before installing it
yourself.
Other servlet containers will require manual deployment of the war files
located at FEDORA_HOME/install.

Application Server Context


The installer provides the option to enter an application server context name
under which Fedora will be deployed. The context name defaults to Fedora (
resulting in http[s]://host:port/fedora), however any other valid context name
can be supplied. The installer will name the resulting war file according to the
supplied context name (defaults to fedora.war). Please ensure that the
servlet container configuration reflects the name of the Fedora context name
in case it needs to be configured explicitly. For further details see Alternative
Webapp Context Configuration.
SSL
Configuring SSL support for Fedora's API-M interface is an optional feature. It
strongly recommended for production environments if Fedora is exposed to
unsecured application and users. However, if your installation is within a
managed data center with firewall services, you may choose to provide SSL
using a software or hardware front-end instead. For example, a reverse proxy
implemented using the Apache HTTP Server and hiding Fedora generally
provides better SSL performance.
If the Tomcat servlet container is selected, the installer will configure
server.xml for you. However, as noted above, if an existing Tomcat
installation was selected, the installer will not overwrite your existing
server.xml.

Please consult your servlet container's documentation for certificate


generation and installation. (In particular, the example certificate provided by
the installer for Tomcat should not be used in a production environment).
If Fedora is configured to use SSL, the JAVA_OPTS environment variable
must include the javax.net.ssl.trustStore and
javax.net.ssl.trustStorePassword properties. The value of

Version 5
256
Start

javax.net.ssl.trustStore should be the location of the truststore file


and the value of javax.net.ssl.trustStorePassword is the password
for the keystore. The following values may be used with the sample keystore
included with the installer:

-Djavax.net.ssl.trustStore=$FEDORA_HOME/server/
truststore -Djavax.net.ssl.trustStorePassword=tomcat

FeSL
The Fedora Security Layer is an experimental feature introduced from Fedora
3.3. FeSL consists of two separate components, which can be selected
independently during the installation: FeSL Authentication and FeSL
Authorisation.
FeSL Authentication is now the default authentication mechanism, however
Fesl Authorization is still considered experimental. FeSL Authorization is a
replacement for the legacy XACML policy enforcement, so you should not
enable XACML policy enforcement if you are going to use FeSL Authorization
, as this will provide an alternative XACML policy enforcement engine. See
FeSL Installation for more information about FeSL requirements that must be
satisfied prior to installation.
Resource Index
If the Resource Index is enabled, Fedora will use Mulgara as its underlying
triplestore, with full-text indexing disabled.
Messaging
If Messaging is enabled, Fedora will create and send a message via JMS
whenever an API-M method is called.
Once the script has collected your answers and configured Fedora on your
system, the values are written to the "install.properties" file and will have a
final location in $FEDORA_HOME/install.

b. CUSTOM INSTALL - Automated

i. Create an "install.properties" file, similar to the 'Example "install.properties"'


referenced above.
To create this file:
1. copy the full contents of the textbox above into a text editor

2.
Version 5
257
Start

2. where applicable change the database name, database user, database


password and database port number, and server host to match your
database configuration (these items are noted in square brackets)

3. save the edited file as install.properties to the same directory where the
fcrepo ".jar" is stored.

ii. Install Fedora by entering:

Command Line for "CUSTOM INSTALL - Automated" of Fedora


Commons

java -jar fcrepo-installer-[version number].jar


install.properties
[note: 'version number' will vary depending on the
version you've downloaded]

Checking Fedora Commons Installation


Once the installation script has completed and Fedora is installed, you need to: start your
Fedora instance by running:

Command Line for starting Fedora Commons

# $FEDORA_HOME/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/fedora/tomcat
Using CATALINA_HOME: /usr/local/fedora/tomcat
Using CATALINA_TMPDIR: /usr/local/fedora/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/fedora/tomcat/bin/bootstrap.jar

To verify that Fedora has successfully started:

1. $FEDORA_HOME/tomcat/logs/catalina.out should contain no errors.

2. View your Fedora instance through a web browser:

http://localhost:8080/fedora/
or
https://[yourdomain]:8443/fedora
3. You should see something like this:
Repository Information View

Version 5
258
Start

Repository Name: Fedora Repository

Base URL: http://localhost:8080/fedora

Version: 3.7.0

PID Namespace: changeme

PID Delimiter: :

Sample PID: changeme:100

Retain PID Namespace: *

OAI Namespace: example.org

OAI Delimiter: :

Sample OAI Identifier: oai:example.org:changeme:100

Sample Search URL: http://localhost:8080/fedora/objects

Sample Access URL: http://localhost:8080/fedora/objects/demo:5

Sample OAI URL: http://localhost:8080/fedora/oai?verb=Identify

Admin Email: bob@example.org

Admin Email: sally@example.org

Setting XACML Policies


Install required polices, remove some restrictive policies.

1. First stop your Fedora instance by running:$FEDORA_HOME/tomcat/bin/shutdown.sh

2. Remove they deny-purge policies:

Command Line to remove "deny-purge" policies

Version 5
259
2.

Start

$ rm -v /usr/local/fedora/data/fedora-xacml-policies/
repository-policies/default/deny-purge-*

3. Navigate to the Fedora "repository-policies" directory:

Command Line to create islandora specific policies

$ cd /usr/local/fedora/data/fedora-xacml-policies/
repository-policies/

4. Download / Clone the Islandora specific XACML policies from the Islandora GitHub
XACML Policies repo

$ git clone https://github.com/Islandora/


islandora-xacml-policies.git islandora

The Islandora XACML policies should now be located in "/usr/local/fedora/data/


fedora-xacml-policies/repository-policies/islandora". There should be at least these 4 policies:
permit-apim-to-authenticated-user.xml
permit-getDatastream-unrestricted.xml
permit-getDatastreamHistory-unrestricted.xml
permit-upload-to-authenticated-user.xml
A standard installation's XACML policy directory structure should look like this:

/usr/local/fedora/data/fedora-xacml-policies/repository-policies/
default
deny-apim-if-not-localhost.xml
deny-inactive-or-deleted-objects-or-datastreams-if-
not-administrator.xml
deny-policy-management-if-not-administrator.xml
deny-reloadPolicies-if-not-localhost.xml
deny-unallowed-file-resolution.xml
permit-anything-to-administrator.xml
permit-apia-unrestricted.xml
permit-dsstate-check-unrestricted.xml
permit-oai-unrestricted.xml
permit-serverStatus-unrestricted.xml
readme.txt
islandora
permit-apim-to-authenticated-user.xml

Version 5
260
Start

permit-getDatastreamHistory-unrestricted.xml
permit-getDatastream-unrestricted.xml
permit-upload-to-authenticated-user.xml

Adjusting access for more than "localhost"


Install required polices, remove some restrictive policies.

1. Open the $FEDORA_HOME/data/fedora-xacml-policies/repository-policies/default/


deny-apim-if-not-localhost.xml in your favorite editor
2. Locate the text:

<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#
string">127.0.0.1</AttributeValue>

3. Duplicate this line for every IP address you wish to access Fedora from (i.e. your
Islandora Drupal server, your desktop computer, etc).
For example

<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#
string">127.0.0.1</AttributeValue>
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#
string">192.168.56.1</AttributeValue>

The Fedora default XACML policies can be restored to their default state at any
time by simply removing the 'default' directory, and stopping/starting Fedora.
Always backup your polices first before doing this!

4. Start up Fedora by using the startup command from step 8:

$FEDORA_HOME/tomcat/bin/startup.sh

5. Access the Fedora Web Administrator: http://localhost:8080/fedora/admin and ensure you


can ingest and purge objects.

Version 5
261
Start

NOTE: If you can not access the above link for ingestion then something went wrong
with your installation. Please retrace your steps carefully, and be sure not to miss
anything.

Create a milestone 1 snapshot backup:

# $FEDORA_HOME/tomcat/bin/shutdown.sh
# /etc/init.d/mysql stop
# /usr/local
# tar -cvzf fedora-milestone1.tar.gz fedora
# cd /var/lib
# tar -cvzf mysql-milestone1.tar.gz mysql
# /etc/init.d/mysql start
# $FEDORA_HOME/tomcat/bin/startup.sh

For information on using Fedora, make use of the tutorials at the Fedora Commons site.

Install Java SE 7 jdk (Oracle) via "apt"


Open a command line interface and enter the following (Ubuntu):

Installation instructions for Java SE 7 on Ubuntu

$ sudo add-apt-repository ppa:webupd8team/java


$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer
$ sudo apt-get install oracle-java7-set-default

For other *nix variants you may have to add other repos or manually download and install Java.

To setup the MySQL Database for Fedora...


Assuming MySQL database software is currently installed, execute the following:

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 68
Server version: 5.5.38-0ubuntu0.12.04.1 (Ubuntu)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights
reserved.

Version 5
262
Start

Oracle is a registered trademark of Oracle Corporation and/or its


affiliates.
Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current
input statement.
mysql> create database fedora3;
Query OK, 1 row affected (0.00 sec)
mysql> create user 'fedoraAdmin'@'%' identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on fedora3.* to 'fedoraAdmin'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> alter database fedora3 default character set utf8;
Query OK, 1 row affected (0.01 sec)
mysql> alter database fedora3 default collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
mysql> flush privileges;
mysql> exit

milestone 2 - Installing Drupal

Pre-installation software checklist


Drupal requires the following to be set-up and running prior to beginning your installation:
Apache web server.
MySQL 5.0.15 or higher with PDO, PostgreSQL 8.3 or higher with PDO, SQLite 3.3.7 or
higher
PHP 5.2.5 or higher (5.3 recommended for use with Islandora) ( http://www.php.net/).

Installation Steps
These steps make up the quick “get-up-and-running” installation of Drupal, targeted at an
audience comfortable using a command line interface. A more comprehensive installation guide
is available from Drupal.org.
Note: As of this writing the default ubuntu of distribution of Drupal is too old, at version 7.12 -
that will not work.

Download and place drupal files


1. Obtain the latest Drupal release and extract the contents of the compressed file (as of this
writing it was 7.34)

# cd /opt/downloads

Version 5
263
1.

Start

# wget http://ftp.drupal.org/files/projects/drupal-x.x.tar.gz
# tar -xzvf drupal-x.x.tar.gz

Remember: the "x.x" is in reference to whatever Drupal version you would


download. This version of Islandora is currently only compatible with Drupal 7.x.x
If you're intending to use a version of Islandora other than 7.x.x, please
reference previously documentation that can be found here.

2. Change directory ("cd") to the location where you wish to install Drupal. For example, a
very common Apache web directory is "/var/www/

# mkdir /var/www/drupal

3. Move the contents of the drupal-x.x directory into a directory within your web server's
document root or public HTML directory (ensure that the .htaccess file, a hidden file, is
successfully moved into the destination directory as well).

# mv -v /opt/downloads/drupal-x.x/* /var/www/drupal

Please note:
Your Apache config will need to so reflect the path to your Islandora
install. Apache site/virtual host configuration files are ideal.

Configuring the Drupal install

Information concerning "settings.php" file


NOTE:
Some web hosting environments have PHP and Apache run by the same user. In
these instances, Drupal 7.x may attempt to execute the copy and privilege adjustments
of the "settings.php" file. If this happens, skip directly to creating a database for Drupal.
If you get errors about your "settings.php" file when you "run the install script" in your
browser, you will need to manually copy and adjust priviledges of the " settings.php" file
.

Version 5
264
Start

1. Make a copy of the default.settings.php file in the sites/default directory and name the
copy settings.php.

$ cp sites/default/default.settings.php sites/default/settings
.php

2. Give the web server write privileges to sites/default/settings.php and the sites/default/
directory:

$ chmod a+w sites/default/settings.php


$ chmod a+w sites/default

3. Manually configure the MySQL database for Drupal. Make note of your username and
password as you will need it when the Drupal install script runs.

$ mysql -u root -p
mysql> create database drupal;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, IND
EX, ALTER, CREATE TEMPORARY TABLES ON drupal.* TO 'drupalAdmin
'@'localhost' IDENTIFIED BY 'password';
mysql> flush privileges;
mysql> exit

4. Run the install script by pointing your browser to the base URL of your website (e.g. http://
www.example.com/).
5. Work through the on-screen steps to complete the Drupal site installation.

6. When the install script succeeds, you will be directed to the "Welcome" page, and you will
be logged in as the administrator.
7. Proceed with the initial configuration steps suggested on the "Welcome" page.

Extra Apache configuration options


If you plan on uploading large files via Islandora you may want to increase the
maximum file size settings in Drupal.
You can do this by creating a custom INI file in "/etc/php5.d/conf.d" with the
following settings:

upload_max_filesize = 2048M
post_max_size = 2048M

Version 5
265
Start

memory_limit = 256M

You must then restart Apache using one of the following commands:

/etc/init.d/apache reload

OR

/etc/init.d/httpd restart

NOTE: If you can not access the base URL of your website (e.g. http://
www.example.com/ ) then something went wrong with your installation.
Please retrace your steps carefully, and be sure not to miss anything.

Create a milestone 2 snapshot backup:

# $FEDORA_HOME/tomcat/bin/shutdown.sh
# /etc/init.d/mysql stop
# /etc/init.d/apache stop
# cd /usr/local

Version 5
266
Start

# tar -cvzf fedora-milestone2.tar.gz fedora


# cd /var/lib
# tar -cvzf mysql-milestone2.tar.gz mysql
# cd /var/www
# tar -cvzf drupal-milestone2.tar.gz drupal
# /etc/init.d/mysql start
# $FEDORA_HOME/tomcat/bin/startup.sh
# /etc/init.d/apache start

For a good introduction to Drupal and to learn how to harness its power and potential to create
a site that meets your needs, access Drupal’s extensive online documentation. Drupal’s active
open source community is another valuable source of information.

milestone 3 - Installing & Configuring Drupal Filter

About the Drupal Filter


The Drupal Filter is a library package that gets installed in the in the Fedora Web-App
on the Tomcat Application Server. It is the Fedora side of the communication between
Islandora's Tuque library and the Fedora repository system.

1. Download the Latest Version of the Islandora Drupal Filter


Download the appropriate Drupal Filter file, and copy it to $FEDORA_HOME/tomcat/webapps/
fedora/WEB-INF/lib
Place the file in:

$ wget https://github.com/Islandora/islandora_drupal_filter/
releases/download/v7.1.3/fcrepo-drupalauthfilter-3.7.0.jar
$ cp -v fcrepo-drupalauthfilter-3.7.0.jar $FEDORA_HOME/tomcat/
webapps/fedora/WEB-INF/lib

2. Make the Fedora Repository Aware of the New Filter


Navigate to $FEDORA_HOME/server/config and open the file jaas.conf in a text editor.

To allow the Drupal Servlet Filter to authenticate against Drupal’s database, replace the "
fedora-auth" entry with the following lines that reference the DrupalServlet filters class files:

fedora-auth
{

Version 5
267
Start

org.fcrepo.server.security.jaas.auth.module.XmlUsersFileModule
required
debug=true;
ca.upei.roblib.fedora.servletfilter.DrupalAuthModule required
debug=true;
};

3. Configure the new filter to connect to Drupal (filter-drupal.xml)


Create the file filter-drupal.xml in $FEDORA_HOME/server/config using the following text as a
template (or download a sample file from https://raw.github.com/Islandora/
islandora_drupal_filter/master/filter-drupal.xml), then modify the attributes of the <connection>
tag to match the server, port, database name, username and password of your site's Drupal
database.

Fedora requires a separate <connection> entry for each connecting Drupal site.

The Drupal Filter does not currently escape the database url before attempting to
connect to the Mysql database, which can cause problems if the user name or
password has '%' symbol within it.

<!--File to hold drupal connection info for the FilterDrupal


servlet filter. For multisite drupal installs you can include
multiple
connection elements. We will query all the databases and assume
any user in any drupal db with the same username and password are
the same
user. We will gather all roles for that user from all databases.
This is a potential security risk if a user in one drupal db has
the same
username and password as another user in a separate drupaldb. We
are also assuming all drupal dbs to be mysql. This file should be
located
in the same directory as the fedora.cfcg file-->
<FilterDrupal_Connection>
<connection server="localhost" dbname="[drupal_database]" user="
[drupal_db_user]" password="[drupla_db_password]" port="3306">
<sql>

Version 5
268
Start

<!--Different sql statement for each connection.


This is for drupal multisites that are setup using one database
with
table prefixes. We don't do this but some
people might.-->
SELECT DISTINCT u.uid AS userid, u.name AS Name,
u.pass AS Pass, r.name AS Role FROM (users u LEFT JOIN users_roles
ON
u.uid=users_roles.uid) LEFT JOIN role r ON r.rid
=users_roles.rid WHERE u.name=? AND u.pass=?;
</sql>
</connection>
</FilterDrupal_Connection>

Now change the owner to the user that runs the web server, as Islandora needs to modify the
file:

# chown www-data:www-data filter-drupal.xml

If you use the Drupal servlet filter to connect to multiple Drupal databases there is
potential for users with the same username in each database to access each others
private objects. To avoid this, use the Drupal LDAP module. A Drupal multi-site
environment utilizing the LDAP module for all sites ensures a unique username/site
configuration.

4. Stop and Restart tomcat to load the filter


This will enable the Drupal Servlet Filter.

# $FEDORA_HOME/tomcat/bin/shutdown.sh
# $FEDORA_HOME/tomcat/bin/startup.sh

5. Test the Drupal Servlet Filter

For now we're still working on getting some sort of a command line script that would
allow us to test this filter independently of Islandora being already installed, so that we
would eliminate this circular reference, however that is not yet available. Keep one eye
on this Google Groups thread for updates: testing the Drupal Servlet Filter?

Version 5
269
Start

In the meantime please skip this test until the end of milestone 5 - Installing the
Islandora Essential Modules, then return to this point and perform the test.

Islandora will test your Fedora connection for you. To verify that the servlet filter is working
properly, go to the Islandora configuration page (admin/islandora/configure) and look for the
green checkmark. A successful installation will look like this:

An unsuccessful installation will look like this:

If you see this error, there are two possible sources for the failure:
You do not have the correct fcrepo-drupalauthfilter-xxxx.jar

Your filter-drupal.xml is incorrect or missing

The islandora_drupal_filter passes the username of 'anonymous' through to Fedora for


unauthenticated Drupal Users. A user with the name of 'anonymous' may have XACML
policies applied to them that are meant to be applied to Drupal users that are not
logged in or vice-versa. This is a potential security issue that can be plugged by
creating a user named 'anonymous' and restricting access to the account.

Create a milestone 3 snapshot backup:

# $FEDORA_HOME/tomcat/bin/shutdown.sh
# /etc/init.d/mysql stop
# /etc/init.d/apache stop
# cd /usr/local
# tar -cvzf fedora-milestone3.tar.gz fedora
# cd /var/lib
# tar -cvzf mysql-milestone3.tar.gz mysql

Version 5
270
Start

# cd /var/www
# tar -cvzf drupal-milestone3.tar.gz drupal
# /etc/init.d/mysql start
# $FEDORA_HOME/tomcat/bin/startup.sh
# /etc/init.d/apache start

milestone 4 - Installing The "Tuque" library

On This Page
Pre-Installation Software Checklist
About the "Tuque" library
Installing the Tuque library
Testing the Tuque installation
Advanced Tuque Topics

Pre-Installation Software Checklist


You must have the following installed before you install the Tuque library:
Fedora Respository Software
Drupal Web CMS System

About the "Tuque" library


The Tuque library is a bundle of code that acts as the conduit between Islandora and Fedora
Commons. In order for Islandora to properly communicate with Fedora Commons, you must
have the Tuque library installed. For more information on the Tuque library, please see the
documentation on github [https://github.com/islandora/tuque].

Installing the Tuque library

NOTE
You must have:
Fedora Commons installed and properly configured in order to properly test
Tuque
Drupal installed and properly configured in order to install Tuque.

To install the Tuque library, run the following on your command line where Drupal is installed:

Version 5
271
Start

# mkdir -p /var/www/drupal/sites/all /var/www/drupal/sites/all/


libraries
# cd /var/www/drupal/sites/all/libraries
# wget https://github.com/islandora/tuque/archive/1.5.zip
# unzip 1.5.zip
# mv tuque-1.5 tuque

Testing the Tuque installation


You will require phpunit, which in turn has changed the installation method with ubuntu
12.04. You can find more information on how to install phpunit with composer here: https:
//coderwall.com/p/88x20g/installing-phpunit-on-ubuntu-with-composer
Download and modify https://github.com/Islandora/tuque/blob/1.x/tests/phpunit.xml to
have the credentials and URL of your Fedora: /var/www/sites/all/libraries/tuque/tests/
phpunit.xml (don't forget the FEDORAPASS value)

<phpunit>
<php>
<const name="FEDORAURL" value="http://localhost:8080/
fedora"/>
<const name="FEDORAUSER" value="fedoraAdmin"/>
<const name="FEDORAPASS" value="wei9bo0eethooD"/>
</php>
<logging>
<log type="coverage-html" target="../build/coverage"
title="Tuque"
charset="UTF-8" yui="true" highlight="true"
lowUpperBound="35" highLowerBound="70"/>
<log type="coverage-clover" target="../build/logs/
clover.xml"/>
<log type="junit" target="../build/logs/junit.xml"
logIncompleteSkipped="false"/>
</logging>
</phpunit>

From your Tuque install directory run the test:

# cd /var/www/sites/all/libraries/tuque
# phpunit -c tests/phpunit.xml tests/

Version 5
272
Start

NOTE: Tuque should pass the majority of the tests. If you see partial failure
your installation may still work for most part, however you may want to contact
the support community for help so to ensure you get 100% pass.

Advanced Tuque Topics


For advanced usage of Tuque you can consult the All About Tuque Appendix.

milestone 5 - Installing the Islandora Essential Modules


There are 2 essential modules, and they are part of the Islandora Minimum Viable Functionality.
Islandora Core Module
Islandora Basic Collection Solution Pack

Pre-installation software checklist


The Islandora framework relies upon a number of other open source applications. Before
beginning the installation of any Islandora modules, ensure:
1. You have Fedora installed and properly configured:
Ensure you can use the admin tools in Fedora to ingest and purge (e.g. http://localhost:8080/
fedora/admin).
2. You have Drupal installed and properly configured with:
Clean URLs enabled (admin/config/search/clean-urls) - requires the Apache mod_rewrite
module to be enabled.
The Drupal file system set to public (admin/config/media/file-system)
3. You have the Tuque library properly installed:

Solution Pack Dependencies


Any Islandora Module or Solution Pack may come with a specific set of requirements
and dependencies outside of the scope of the Islandora Essential Functionality
Installation. You will need to install any dependencies specific to a Module or Solution
Pack in order for them to function properly.

Installing the Islandora Core Module for Drupal


To install the module, use the standard Drupal module installation structure:

Version 5
273
Start

Place the unpackaged module in your site's 'modules' folder, with the name stripped out of the
version. For single-site installations, this should almost always be in /var/www/drupal/sites/all/
modules. This can be done using one of two methods:
Method 1: Manually via the Release Notes and Downloads page:

Unzip method 1

Save the downloaded islandora-7.x-1.5.zip file into /opt/downloads


# cd /var/www/drupal/sites/all/modules
# unzip /opt/downloads/islandora-7.x-1.5.zip
# mv islandora-7.x-1.5 islandora
# chown -R www-data:www-data islandora

Method 2: Manually via the command line with git download:

Unzip method 2

# cd /opt/downloads
# git clone -b 7.x https://github.com/Islandora/islandora.git
# cp -R /opt/downloads/islandora /var/www/drupal/sites/all/modules
# cd /var/www/drupal/sites/all/modules
# chown -R www-data:www-data islandora

Method 3: From within Drupal: navigate to base-site-url/admin/modules/install. From


here, either upload the zipped module, or enter https://github.com/Islandora/islandora/
archive/7.x.zip into the text box there. Note that this method is less reliable, as it
requires the correct permissions to have been previously set up using your web server
Change the permissions on Drupal sub-directories to match the webserver daemon:

fix permissions

# cd /var/www/drupal/sites/all
# chown -R www-data:www-data *

Set up the policies to allow Islandora to connect to Fedora. This is done by making
changes in /usr/local/fedora/data/fedora-xacml-policies/repository-policies:

fix Fedora policies

First remove the deny-purge policies in the default directory:


# rm /usr/local/fedora/data/fedora-xacml-policies/
repository-policies/default/deny-purge-*

Version 5
274
Start

Then, create the islandora directory for the Islandora policy


files, and copy the files from the islandora
# mkdir /usr/local/fedora/data/fedora-xacml-policies/
repository-policies/islandora
# cd /usr/local/fedora/data/fedora-xacml-policies/
repository-policies/islandora
# cp /var/www/drupal/sites/all/modules/islandora/policies/* .
Now, restart Tomcat.
# $FEDORA_HOME/tomcat/bin/shutdown.sh
# $FEDORA_HOME/tomcat/bin/startup.sh

Enable the uploaded module by navigating to base-site-url/admin/modules, scrolling down to


the Islandora Core Module (in the 'Islandora' category), checking the box to the left of it, and
then scrolling to the bottom of the page and clicking the 'Save configuration' button.

Configuration
Once installed, configuration options for the Islandora module can be found on your site at http:/
/path.to.your.site/admin/islandora/configure. The configuration panel is depicted in the
screenshot below.

The three tabs to the left of the screen provide the following areas for configuration:

Test the Islandora Core Module installation:


Once Islandora Core is enabled, you should be able to test. Ensure that the 'testing'
module is enabled in Drupal (it is not by default), then go to Configuration > Development
> Testing and click the link.

Version 5
275
Start

This will pop up a new window with a list of tests to run. Scroll down to Islandora, then
click the checkbox. Scroll down to the bottom and click "Run Tests". This will take about
30 minutes to run, so go grab a coffee.

Installing the Islandora Basic Collection Solution Pack


Download the Basic Collection Solution Pack from the Release Notes and Downloads
page. Unzip the contents and rename the directory such that the version number is
stripped out, then copy it to /var/www/drupal/sites/all/modules and change the owner to
www-data.

Install Basic Collection Solution Packs

# cd /opt/downloads
# unzip islandora_solution_pack_collection-7.x-1.5.zip
...
# mv islandora_solution_pack_collection-7.x-1.5
islandora_solution_pack_collection
# cd /var/www/drupal/sites/all/modules
# cp -R /opt/downloads/islandora_solution_pack_collection .
# chown -R www-data:www-data islandora_solution_pack_collection

Now, go into the Drupal modules menu. At the bottom, turn on Basic Collection Solution
pack, and save the configuration. Make sure the package is enabled without error.
Then go to the main page of the Drupal site. Click the link on the bottom left of the screen
that says Islandora Repository. You should see a "Islandora Repository" link on the
Navigation Pane and a window titled "Top-level Collection".

Version 5
276
Start

Test the Basic Collection Solution Pack installation:


Once Basic Collection is enabled, you should be able to test. Go to Configuration >
Development > Testing and click the link.
This will pop up a new window with a list of tests to run. Scroll down to Islandora, then
click the checkbox. Scroll down to the bottom and click "Run Tests".

Installing the Starter Kit


The Starter Kit is a way to add some very basic functionality to your Islandora repository,
so that you can ingest some material and test your installation. For that we choose the
Islandora Basic Image Solution Pack and the Islandora PDF Solution Pack . They are
very easy to install and have no dependencies.
Download the Islandora Basic Image Solution Pack and the Islandora PDF Solution
Pack from the Release Notes and Downloads page. Unzip the contents and rename
them without the version numbers, then copy them to /var/www/drupal/sites/all/modules
and change the owner to www-data.

Install the Starter Kit

# cd /opt/downloads
# unzip islandora_solution_pack_image-7.x-1.5.zip
...
# unzip islandora_solution_pack_pdf-7.x-1.5.zip
...
# mv islandora_solution_pack_image-7.x-1.5
islandora_solution_pack_image
# mv islandora_solution_pack_pdf-7.x-1.5
islandora_solution_pack_pdf
# cd /var/www/drupal/sites/all/modules
# cp -R /opt/downloads/islandora_solution_pack_image .
# cp -R /opt/downloads/islandora_solution_pack_pdf .
# chown -R www-data:www-data islandora_solution_pack*

Now, go into the Drupal modules menu. At the bottom, turn on Basic Image and and PDF
solution packs, and save the configuration. Make sure the packages are enabled without
error.
Go to the main page of the Drupal site. Click the link on the bottom left of the screen that
says Islandora Repository. You should see in the "Top-level Collection" pane the two
folders titled "Basic Image Collection" and "PDF Collection Collection

Version 5
277
Start

Test the Starter Kit installation


As with the Islandora Core, you should be able to test both the Basic Image and PDF
Collection solution packs.

At the end of this installation, you will be ready to populate your site with some digital
assets (images or PDF files) for testing purposes. Your root Islandora repository can
be found at base-site-url/islandora (Check How to Add an Item to a Digital Collection)
. If you can not see the Basic Image Collection or the PDF Collection folders on your
Islandora repository then something is wrong with the installation. Please retrace your
steps.

Create a milestone 5 snapshot backup:

# $FEDORA_HOME/tomcat/bin/shutdown.sh
# /etc/init.d/mysql stop
# /etc/init.d/apache stop
# cd /usr/local
# tar -cvzf fedora-milestone5.tar.gz fedora
# cd /var/lib
# tar -cvzf mysql-milestone5.tar.gz mysql
# cd /var/www
# tar -cvzf drupal-milestone5.tar.gz drupal
# /etc/init.d/mysql start

Version 5
278
Start

# $FEDORA_HOME/tomcat/bin/startup.sh
# /etc/init.d/apache start

milestone 6 - Installing Solr and GSearch


Islandora utilizes the Solr open source search platform to enable flexible and configurable
indexing and searching. Solr uses the Lucene Java search library at its core for full-text indexing
and search and offers hit highlighting, faceted search, dynamic clustering, database integration,
and rich document (e.g., Word, PDF) handling as additional features.
The Fedora Generic Search Service, or GSearch, is a search service installed with Fedora that
allows for automatic updating of the Lucene/Solr index. GSearch relies on JMS to receive
messages that are sent when Fedora objects are ingested, modified or purged. This keeps the
Lucene index in sync with the Fedora repository.

How Islandora uses Solr/Lucene and Gsearch


Islandora makes it possible to use the power of Solr/Lucene for discovery. Gsearch is used as a
method for keeping indexes current. When an item is ingested, the FOXML is transformed by an
XSLT file stored in Gsearch into a format that can be read by Solr's schema and returned based
on the request handlers in our custom solrconfig.xml.
The Islandora Solr Search module is packaged with files that will support Islandora solution
packs, but these can be modified if you are familiar with Solr. Specifically the Solr schema and
corresponding Gsearch XSLT are a good starting point even if you do not use the Solr Search
module. Additional information about Solr is presented in Chapter 4: Search and Discovery in
Islandora (The Solr Module).
While Solr is not required to run Islandora, it is recommended.

Installing Solr and GSearch


1. Download GSearch 2.6, unzip and copy fedoragsearch.war to the Tomcat webapps folder ($
CATALINA_HOME/webapps).

# cd /opt/downloads
# wget http://downloads.sourceforge.net/fedora-commons/
fedoragsearch-2.6.zip
# unzip fedoragsearch-2.6.zip
# cd fedoragsearch-2.6
# cp -v fedoragsearch.war /usr/local/fedora/tomcat/webapps

2. Download Solr 4.2.0 and unpack.

Version 5
279
Start

# cd /opt/downloads
# wget https://archive.apache.org/dist/lucene/solr/4.2.0/solr-
4.2.0.tgz
# tar -xzvf solr-4.2.0.tgz

3. Create a directory for Solr, and copy the contents of solr-4.2.0/example/solr. These
instructions presume that it will be installed at /usr/local/fedora/solr:

# mkdir -p /usr/local/fedora/solr
# cp -Rv solr-4.2.0/example/solr/* /usr/local/fedora/solr

4. Copy (and rename) solr-4.2.0.war to $CATALINA_HOME/webapps.

# cp -v solr-4.2.0/dist/solr-4.2.0.war /usr/local/fedora/tomcat/
webapps/solr.war

5. Edit the file $FEDORA_HOME /server/config/fedora-users.xml to add an additional user:

<user name="fgsAdmin" password="[password]">


<attribute name="fedoraRole">
<value>administrator</value>
</attribute>
</user>

6. Restart Fedora to deploy GSearch and Solr

# /usr/local/fedora/tomcat/bin/shutdown.sh
# /usr/local/fedora/tomcat/bin/startup.sh

This will deploy solr and fedora


7. Now we need to edit the configuration for gsearch.
Edit the file $FEDORA_HOME /tomcat/webapps/fedoragsearch/FgsConfig/
fgsconfig-basic-for-islandora.properties. The entries below are of an example setup.

configDisplayName=configProductionSolr
gsearchBase=http://localhost:8080
gsearchAppName=fedoragsearch

gsearchUser=fgsAdmin

Version 5
280
Start

gsearchPass=[password]
finalConfigPath=/usr/local/fedora/tomcat/webapps/fedoragsearch/
WEB-INF/classes

logFilePath=/usr/local/fedora/server/logs
logLevel=DEBUG
namesOfRepositories=FgsRepos

namesOfIndexes=FgsIndex
fedoraBase=http://localhost:8080
fedoraAppName=fedora

fedoraUser=fedoraAdmin
fedoraPass=[password]
fedoraVersion=3.7.0

objectStoreBase=/usr/local/fedora/data/objectStore
indexEngine=Solr
indexBase=http://localhost:8080/solr

indexDir=/usr/local/fedora/solr/collection1/data/index
indexingDocXslt=foxmlToSolr

This Gsearch properties file is extremely sensitive to whitespace. Ensure there are no
extra characters/space at the end of each line!

8. Edit $FEDORA_HOME/tomcat/webapps/fedoragsearch/FgsConfig/ fgsconfig-basic.xml (


replace 'fgsconfig-basic.properties' with 'fgsconfig-basic-for-islandora.properties'):

-- <property file="fgsconfig-basic.properties" />


-- <copy file="fgsconfig-basic.properties" tofile="fgsconfig-basic
-${configDisplayName}.properties" preservelastmodified="true" />
-- <copy file="fgsconfig-basic.properties" tofile="${
templateConfigPath}/${configDisplayName}/${finalConfigName}/
fgsconfig-basic-${configDisplayName}.properties"
preservelastmodified="true" />
++ <property file="fgsconfig-basic-for-islandora.properties" />
++ <copy file="fgsconfig-basic-for-islandora.properties" tofile="
fgsconfig-basic-${configDisplayName}.properties"
preservelastmodified="true" />
++ <copy file="fgsconfig-basic-for-islandora.properties" tofile="$
{templateConfigPath}/${configDisplayName}/${finalConfigName}/
fgsconfig-basic-${configDisplayName}.properties"
preservelastmodified="true" />

Version 5
281
Start

9. Navigate to $FEDORA_HOME/tomcat/webapps/fedoragsearch/FgsConfig/ and run Apache


ant on fgsconfig-basic.xml

# cd /usr/local/fedora/tomcat/webapps/fedoragsearch/FgsConfig/
# ant -f fgsconfig-basic.xml

10. Set up solr to use the newly generated schema. Start by backing up the existing schema:

# mv -v /usr/local/fedora/solr/collection1/conf/schema.xml $
FEDORA_HOME/solr/collection1/conf/schema.bak

11. Copy the new, ant-generated Solr schema into place as schema.xml

# cp -v /usr/local/fedora/tomcat/webapps/fedoragsearch/WEB-INF/
classes/fgsconfigFinal/index/FgsIndex/conf/schema-4.2.0-for-fgs-
2.6.xml $FEDORA_HOME/solr/collection1/conf/schema.xml

12. Create a context file for Solr at /usr/local/fedora/tomcat/conf/Catalina/localhost/solr.xml

<?xml version="1.0" encoding="UTF-8"?>


<Context docBase="/usr/local/fedora/tomcat/webapps/solr.war" debug
="0" crossContext="true">
<Environment name="solr/home" type="java.lang.String" value="/
usr/local/fedora/solr" override="true"/>
</Context>

13. Restart Fedora.

# /usr/local/fedora/tomcat/bin/shutdown.sh
# /usr/local/fedora/tomcat/bin/startup.sh

Test your GSearch installation


Go to http://localhost:8080/fedoragsearch/rest
Login using fedoraAdmin
Click on updateindex
Click on updateIndex fromFoxmlFiles

Version 5
282
Start

If you can not access the rest page please retrace your steps. Be sure to not have
extra characters or white space in the /fgsconfig-basic-for-islandora.properties files as
emphasized on step 7.

GSearch and Solr may need to be further configured to index specific datastreams,
depending on the enhancement modules you install. Sample GSearch and Solr
configurations can be found here and here .

Installing & Configuring the Solr Search Module


The Islandora Solr search module allows you to search the Solr index. The Islandora Solr
Sample Configuration module provides default display profiles to the module. The module
makes four new blocks available; two for search and two for display. The other block is called
the Advanced Search Block and does fielded searches against the Solr index. Both blocks
would use whatever request handler is configured in the module settings. For information on
how to configure the Solr module, see Islandora Solr Search.
Installation Steps:

1. Verify that fedoraGSearch and Solr are both installed and running.

Version 5
283
1.

Start

2. Download the Islandora Solr Search Module and install as a Drupal module, as you did in
the Starter Kit modules
3. Log in to your Drupal site to enable the islandora_solr_search module. Administer >
Modules and enable Islandora Solr Search
4. Replace the original Drupal search block with the one from Islandora on the sidebar

5. You should now be able to see the Islandora search box in the on the sidebar.

Version 5
284
5.

Start

Testing the Solr installation


Just entry a keyword in the Islandora search field related to some of the test objects you ingest
in the Starter Kit collections. If they come up on the list everything is working as it should

If nothing comes back please retrace your steps. Make sure you're using the Islandora
search block, and not the original one from Drupal.

From this point on you should be in good shape for the enhanced features of Islandora
, by installing other solution packs in modules.

Search & Discovery in Islandora

On this page:

What is Solr? And why does Islandora use it?


Solr “Out of the Box”
Solr Configuration
Solr Blocks

Version 5
285
Start

Initial Solr Set Up


1. Navigate to Solr Configuration Panel
2. Verify the Solr URL and Request Handler
3. Set the Default and Secondary Display Profiles
4. Choose Search Terms in Advanced Search Block
5. Choose Facet Fields
6. Choose Sort Fields
7. Set Query Defaults
Accessing Solr outside of the Islandora User Interface

Islandora uses Solr, in combination with Fedora's GSearch, to provide search functions to users
on your site. This chapter assumes either:
a) You are using the Virtual Machine Image, or are exploring Islandora via Sandbox (where Solr
is already installed and configured)
b) Solr and Gsearch are installed (following the instructions in milestone 6 - Installing Solr and
GSearch), and you have installed and activated the Solr module. The xslt and solrschema.xml
documents that come packaged with GSearch should be used in configuration. These files are
designed to work with our solution packs. Guidance for creating customizations to Solr are
provided in the Customizing GSearch and Solr section.

What is Solr? And why does Islandora use it?


Solr makes it easy to create advanced search features in Islandora, like faceting (arranging
search results in columns with numerical counts of key terms). The following comes from the
Solr guide; a link to the guide is provided in the Selected Reading section of this guide:

Solr builds on another open source search technology - Lucene, a Java library that
provides indexing and search technology, as well as spell-checking, hit highlighting and
advanced analysis/tokenization capabilities. Both Solr and Lucene are managed by the
Apache Software Foundation (www.apache.org).
The Lucene search library currently ranks among the top 15 open source projects and is
one of the top 5 Apache projects, with installations at over 4,000 companies. Lucene/
Solr downloads have grown nearly 10x over the past three years, with a current run-rate
of over 6,000 downloads a day.

Version 5
286
Start

Islandora uses Solr to make objects in your Islandora installation discoverable. The Solr search
module uses an xslt in Gsearch to index the FOXML documents in your repository, and allows
you to configure search fields for searching and faceting. Whenever you add a new object in
Fedora, the Solr module updates your index, and makes those results available to your users.

To Recap:

Solr makes digital assets in your Islandora installation discoverable. Solr helps to
enable the display/searching of your digital assets' metadata.
To index Fedora content in Solr, Islandora currently relies on Fedora's Gsearch.
When going through the Islandora installation process, there is an xslt and
solrschema.xml document that come packaged with GSearch that can be used
out-of-the-box or customized to suit your repository's needs.
GSearch uses the xslt to transform a Fedora FOXML document into a Solr xml
document.
solrchema.xml controls how Solr indexes xml files.
FOXML files are simple xml files that directly expresses the Fedora Digital Object
Model. FOXML is similar to METS as it is basically an xml container.

Solr “Out of the Box”


The Solr module comes with support for simple Dublin Core and simple MODS (i.e. no qualified
fields!) searching and faceting to support our solution packs.

Solr Configuration
Solr Blocks

When Solr is installed, six additional blocks appear under your site's Structure>Blocks section:

Version 5
287
Start

Islandora simple search - provides a simple full-text search of all items in the repository. A term will
appear, no matter where it appears in the metadata.

Islandora advanced search - provides a configurable search for users, where specific
metadata fields can be searched and combined with boolean operators.
Islandora query - when a user is viewing a set of search results by facet, this block will show
the current filters being applied in the search.
Islandora facets - this block will show users the facets they can use to browse and refine
search results.
Islandora displays - displays current search query
Islandora sort - displays sorting options for search results.
By placing these blocks in regions of your site and configuring the Solr module under Islandora>
Solr client, you can facilitate both full-text searching and faceted searching of items ingested
using Solution Packs. The basic configuration of Solr can be modified to change the weight of
search fields, and extend the out-of-the-box functionality.
Initial Solr Set Up

In order for Solr to work for your collections, you will have to activate the blocks that you want (
see above), and configure them to display your desired results.
The following instructions will show you how to configure the initial Solr set up in your Islandora
instance. Additional information about installing Solr and how Islandora uses Solr is provided in
milestone 6 - Installing Solr and GSearch.
1. Navigate to Solr Configuration Panel

Start by going to the ‘Islandora’ page in the admin panel and click on the ‘Solr Index’ link.

Version 5
288
Start

2. Verify the Solr URL and Request Handler

The Solr URL should be ip.address.of.site:port /solr. So, for example, if you’re using the
Islandora Virtual Machine Image or another a local installation it should be localhost:8080 /solr.
If the URL is correct you will see a green check mark.

Make sure the request handler is set to ‘standard’. You can customize the request handler by
editing solrconfig.xml to make other request handlers available. This assumes that you are
using the default request handler, which will support all the metadata in our solution packs.
3. Set the Default and Secondary Display Profiles

You can modify the way search results are displayed by configuring the Display Profiles. You
can choose from List, Bookmark, Grid (set to Default in the screenshot below), and Table.
Secondary display profiles provide optional secondary outputs for search results. Switching

Version 5
289
Start

back and forth between different display profiles is simple, so feel free to experiment and see
which default display profile best suits your site. The display profiles appear on your site through
the "Islandora displays" block, mentioned above.
Out-of-the-box, support for RSS and CSV output is also provided. Selecting these options will
place an RSS feed and CSV button next to your search results.

4. Choose Search Terms in Advanced Search Block

Here you can choose the search terms that will appear in the drop-down menus on the
advanced search block. Terms must be entered by their field names (in most cases this will be
Dublin Core, but you can also use MODS), though you can optionally specify a more
human-readable label with the configure option. To determine the appropriate syntax for your
search terms, simply edit the metadata on any object in your repository (for instructions, see
How to Edit an Object’s Metadata in Getting Started with Islandora ). Each field label will display
the proper syntax for adding it to your Solr search configuration. A full list of the terms made
available by the schema provided in the module package is provided in APPENDIX D - SOLR
SCHEMA (SEARCH) Term Reference .
Note that you will want to use fields that have been indexed as “text” in the advanced
search block. Read APPENDIX D - SOLR SCHEMA (SEARCH) Term Reference for more
information.

Version 5
290
Start

Types of Indexing

You may notice when setting up your Solr instance that some fields contain qualifiers like _t
, _s, _mt, or _ms at the end of the field name. These indicate how the values of these fields
are stored in Solr. Read APPENDIX D - SOLR SCHEMA (SEARCH) Term Reference for
more information.

Version 5
291
Start

You also have the option of setting permissions on a per-field basis, allowing only certain
subsets of users access to search across different facets. These permissions, and the
human-readable label for each Solr field, can be configured by clicking configure to open a
new options window:

Version 5
292
Start

Solr field permissions are dependent on a role having Drupal permissions to search the
Solr index. Roles without this permissions may appear in this list, but they will not be
selectable.

5. Choose Facet Fields

Solr uses faceting to filter search results. Here, you can choose which fields you wish to allow
faceting on. The format is the same as the search terms described above. You can also use this
screen to configure:

1. Minimum Limit - The minimum number of search results returned for a particular facet
before that facet will be displayed. For instance, if the limit was set to '3' and a search for "
fish" returned only two results for 'Bass', 'Bass' would not be included as a facet.
2. Soft Limit - The number of facets to show when a search is first returned. This setting will
return the most populous facets first, and include a button to expose more available
facets.
3. Maximum Limit - Similar to a Soft Limit, but without the option to expand to show more
terms beyond the limit set here.

Version 5
293
Start

Note that you will want to use terms here that have been indexed as “strings”. Read
APPENDIX D - SOLR SCHEMA (SEARCH) Term Reference for more information.
6. Choose Sort Fields

Using the same field formatting as Advanced Search and Faceting fields, you can select fields
to make available to the user to sort their search results in the Sort block.

Version 5
294
Start

The field for a relevance based sort is "score".

7. Set Query Defaults

This section of the configuration panel provides advanced Solr query customization options:
Limit results to specific namespaces- restrict your search results to a particular
namespace. This is useful if there are multiple sites using the same repository and you
want to block search results from the other sites. Remember that the namespace is the
first half of the PID – everything before the colon.
Solr Default Query - This option allows you to specify a default query used to browse
results when no explicit query has been entered. For example, if a user runs a search
and then deletes their search term from the breadcrumbs, this default query will be
applied in its place.
Solr Base Filter - You can use this option as a blanket way to filter all Solr search
queries. For example, you can apply date-based or collection-based restrictions - such as
removing page objects from search results by entering -RELS_EXT_hasModel_uri_ms:"
info:fedora/islandora:pageCModel" in the Solr Base Filter field.

Version 5
295
Start

After setting up all of the above sections, you will have successfully configured your Solr
client!
You may wish to now use the Islandora Solr Metadata module to configure your site's
Metadata Display - find out more in Islandora Solr Metadata Display.

Read more about Solr


Consult the Solr Reference Guide to read more about Solr: https://cwiki.apache.org/
confluence/display/solr/Apache+Solr+Reference+Guide

Accessing Solr outside of the Islandora User Interface


You may find it useful to know that you can access Solr, and GSearch in your browser, as well
as through your server.
In a browser:
GSearch - http://url.of.your.site:8080 /fedoragsearch/rest
Useful for browsing or searching the GSearch index directly

Version 5
296
Start

Can also be used to update the index


Solr - http://url.of.your.site:8080 /solr/admin
From here you can view (but not edit) the schema.xml file and also view all
currently indexed fields.
On your server:
GSearch - /usr/local/fedora/tomcat/webapps/fedoragsearch/WEB-INF/classes/
fgsconfigFinal
Most interesting files are:
fedoragsearch/properties
index/FgsIndex/index.properties
index/FgsIndex/foxmlToSolr.xslt and it's included files
updater/BasicUpdaters/updater.properties
repository/BasicRepos/repository.properties
Solr - usr/local/fedora/solr
access schema.xml at usr/local/fedora/solr/conf/schema.xml

Customizing GSearch and Solr


The out-of-the box functions will allow you to support all of our current solution packs, and the
MODS and DC metadata streams associated with them. Once you have GSearch installed and
running there is very little you need to do. However, you may wish to customize Solr to index a
new metadata schema (if you are creating a custom content model) or if you want to modify
existing fields. To do this, you would modify the foxmlToSolr.xslt located in the GSearch
webapps directory. If you followed the instructions for installing GSearch in Chapter 9 - Enabling
Indexing & Searching with Solr, the file would be located here:

/usr/local/fedora/tomcat/webapps/fedoragsearch/WEB-INF/classes/
config/index/gsearch_solr

For example, to add the Darwin Core to the index you can add the following lines to the xslt:

<xsl:for-each select="foxml:datastream/foxml:datastreamVersion\[
last()\]/foxml:xmlContent/dwc:SimpleDarwinRecordSet/dwc:
SimpleDarwinRecord/*">

Version 5
297
Start

<xsl:if test="text() \[normalize-space(.) \]"><\!\--don't bother


with empty space-\->
<field >
<xsl:attribute name="name">
<xsl:value-of select="concat('dwc.', substring-after(name(),':'))"
/>
</xsl:attribute>
<xsl:value-of select="normalize-space(text())"/>
</field>
</xsl:if>
</xsl:for-each>

The xsl above will index most Darwin Core fields. Once GSearch is aware of the new schema,
you can make Solr aware of it by modifying the schema.xml. Quite often, it makes sense to
assign the same content to two fields:
one analyzed (tokenized, lower cased etc.) for searching
one unanalyzed (stored exactly as is) for displaying in facets, etc.
The xsl above will create many fields one of which would be dwc.language. In the Solr Schema
we would add a declaration for this field:

<field name="dwc.language" type="text" indexed="true" stored="true


" multiValued="true"/>

Here, we have given it a type = “text”, which in the default schema is analyzed.

<fieldType name="text" class="solr.TextField" positionIncrementGap


="100"><analyzer type="index"><tokenizer class="
solr.WhitespaceTokenizerFactory"/><!-- in this example, we will
only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="
index_synonyms.txt" ignoreCase="true" expand="false"/>
--><filter class="solr.StopFilterFactory" ignoreCase="true
" words="stopwords.txt"/><filter class="
solr.WordDelimiterFilterFactory" generateWordParts="1"
generateNumberParts="1" catenateWords="1" catenateNumbers="1"
catenateAll="0"/><filter class="solr.LowerCaseFilterFactory"/><
filter class="solr.EnglishPorterFilterFactory" protected="
protwords.txt"/><filter class="
solr.RemoveDuplicatesTokenFilterFactory"/></analyzer><analyzer
type="query"><tokenizer class="solr.WhitespaceTokenizerFactory"/><
filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
ignoreCase="true" expand="true"/><filter class="
solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/><
filter class="solr.WordDelimiterFilterFactory" generateWordParts="

Version 5
298
Start

1" generateNumberParts="1" catenateWords="0" catenateNumbers="0"


catenateAll="0"/><filter class="solr.LowerCaseFilterFactory"/><
filter class="solr.EnglishPorterFilterFactory" protected="
protwords.txt"/><filter class="
solr.RemoveDuplicatesTokenFilterFactory"/></analyzer></fieldType>>

The types are also defined in the schema.xml. If we want to use this in a filter, it makes sense to
also store it unanalyzed under a different name. This requires two more entries in the
schema.xml:

<field name="language" type="string" maxChars="300" indexed="true"


stored="true" multiValued="true"/>
<copyField source="dwc.language" dest="language"/>

Once we have created a field named language to store the unanalyzed data in, we’ll use
copyField to copy the dwc.language field into the language field which will happen during
indexing before it is analyzed. Notice the type is now defined as a string. We can now use these
fields in solr request handlers. Request handlers determine what fields to search and what to
return, and you can assign certain fields more weight than others.
A request handler may look like this:

<requestHandler name="herbarium" class="solr.SearchHandler" defaul


t="true">
<\!-\- default values for query parameters -->
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="qf">dwc.type^2.0 dwc.language^2.0 dwc.rightsHolder^2.0
dwc.accessRights^2.0 dwc.rights^2.0 dwc.basisOfRecord^2.0
dwc.scientificName^2.0 dwc.vernacularName^2.0 dwc.kingdom^2.0
dwc.phylum^2.0 dwc.class^2.0 dwc.order^2.0 dwc.family^2.0
dwc.genus^2.0dwc.specificEpithet^2.0 dwc.continent^2.0 dwc.country
^2.0 dwc.countryCode^2.0 dwc.stateProvince^2.0 dwc.county^2.0
dwc.municipality^2.0 dwc.verbatimLocality^2.0 dwc.decimalLatitude^
2.0 dwc.decimalLongitude^2.0 dwc.occurrenceID^2.0
dwc.institutionCode^2.0 dwc.collectionCode^2.0 dwc.catalogNumber^2
.0 dwc.recordedBy^2.0 dwc.eventDate^2.0 PID^0.5</str>
<str name="fl">rightsHolder, accessRights, rights,basisOfRecord,
scientificName, vernacularName, kingdom, phylum, class, order,
family, genus, specificEpithet, continent, country,countryCode,
stateProvince, county, municipality, verbatimLocality,
decimalLatitude, decimalLongitude, occurrenceID, institutionCode,
collectionCode, catalogNumber, recordedByeventDate, PID</str>
<str name="q.alt">*:*</str>
</lst>
<lst name="appends">

Version 5
299
Start

<str name="fq">PID:herbarium*</str>
</lst>
</requestHandler>

Some interesting things to take note of:


The request handler example shown above limits the results to objects that have the herbarium
namespace.
In the qf , we are searching fields like dwc.type and dwc.language and they are all weighted the
same. We can tweak the weights later if we wish to customize the results. Solr returns are the
fields in <str name=”fl”> element. This gives us nice values to use when displaying the results
and when listing facets.

Index Drupal Content in Islandora's Solr index

NOTE: Indexing Drupal Content in Islandora Solr's index is not required, but it is a
feature some users have requested

Indexing Islandora Fedora and Drupal Content in the same Solr index allows sites to simplify
searching for end users by allowing them to search all content from one search interface. To
search across Drupal and Fedora content you will have to modify your solr schema.xml and you
will also need to update the Islandora Solr search results to make them aware of Drupal content
, there are a couple of ways to modify the results but they will involve some code modifications.
You will also need to install the Drupal Apache Solr module (https://drupal.org/project/
apachesolr). The Drupal Apache Solr module installation says to copy its Solr configuration files
to the Solr configuration directory. Do not do this as you will be overwriting your existing
Islandora Solr configuration. Instead update the existing schema.xml file with the required
Drupal fields (it's good practice to backup any files before you edit them if they are not already
under a vcs, even better try it on a dev/test install first).
This section assumes you already have the Islandora Solr module configured to search Fedora
content and Gsearch configured to index Fedora content. We are also assuming you will
continue to use the Islandora Solr module to view the search results.

Modify the Solr schema.xml file


Your schema.xml file will most likely be in /usr/local/fedora/solr/conf or /usr/local/fedora/solr/
collection1/conf (assuming $SOLR_HOME = /usr/local/fedora/solr). We are assuming you
installed Solr using the instructions provided in this guide. The collection1/conf is for more
recent versions of Solr.
Add the text below to the fields section of the schema.xml

Version 5
300
Start

Solr Fields

<!-- ******** Dynamic fields required for Drupal content to be


indexed ******** -->
<!-- Dynamic field definitions. If a field name is not found,
dynamicFields
will be used if the name matches any of the patterns.
RESTRICTION: the glob-like pattern in the name attribute must have
a "*" only at the start or the end.
EXAMPLE: name="*_i" will match any field ending in _i (like myid_i
, z_i)
Longer patterns will be matched first. if equal size patterns
both match, the first appearing in the schema will be used. -->
<dynamicField name="is_*" type="integer" indexed="true" stored="
true" multiValued="false"/>
<dynamicField name="im_*" type="integer" indexed="true" stored="
true" multiValued="true"/>
<dynamicField name="sis_*" type="sint" indexed="true" stored="true
" multiValued="false"/>
<dynamicField name="sim_*" type="sint" indexed="true" stored="true
" multiValued="true"/>
<dynamicField name="sm_*" type="string" indexed="true" stored="
true" multiValued="true"/>
<dynamicField name="tm_*" type="text_en" indexed="true" stored="
true" multiValued="true" termVectors="true"/>
<dynamicField name="ss_*" type="string" indexed="true" stored="
true" multiValued="false"/>
<dynamicField name="ts_*" type="text_en" indexed="true" stored="
true" multiValued="false" termVectors="true"/>
<dynamicField name="tsen2k_*" type="edge_n2_kw_text" indexed="true
" stored="true" multiValued="false" omitNorms="true" omitTermFreqA
ndPositions="true" />
<dynamicField name="ds_*" type="date" indexed="true" stored="true"
multiValued="false"/>
<dynamicField name="dm_*" type="date" indexed="true" stored="true"
multiValued="true"/>
<dynamicField name="tds_*" type="tdate" indexed="true" stored="
true" multiValued="false"/>
<dynamicField name="tdm_*" type="tdate" indexed="true" stored="
true" multiValued="true"/>
<dynamicField name="bm_*" type="boolean" indexed="true" stored="
true" multiValued="true"/>
<dynamicField name="bs_*" type="boolean" indexed="true" stored="
true" multiValued="false"/>
<dynamicField name="fs_*" type="sfloat" indexed="true" stored="
true" multiValued="false"/>
<dynamicField name="fm_*" type="sfloat" indexed="true" stored="
true" multiValued="true"/>
<dynamicField name="ps_*" type="sdouble" indexed="true" stored="
true" multiValued="false"/>

Version 5
301
Start

<dynamicField name="pm_*" type="sdouble" indexed="true" stored="


true" multiValued="true"/>
<dynamicField name="tis_*" type="tint" indexed="true" stored="true
" multiValued="false"/>
<dynamicField name="tim_*" type="tint" indexed="true" stored="true
" multiValued="true"/>
<dynamicField name="tls_*" type="tlong" indexed="true" stored="
true" multiValued="false"/>
<dynamicField name="tlm_*" type="tlong" indexed="true" stored="
true" multiValued="true"/>
<dynamicField name="tfs_*" type="tfloat" indexed="true" stored="
true" multiValued="false"/>
<dynamicField name="tfm_*" type="tfloat" indexed="true" stored="
true" multiValued="true"/>
<dynamicField name="tps_*" type="tdouble" indexed="true" stored="
true" multiValued="false"/>
<dynamicField name="tpm_*" type="tdouble" indexed="true" stored="
true" multiValued="true"/>
<!-- Sortable version of the dynamic string field -->
<dynamicField name="sort_ss_*" type="sortString" indexed="true" st
ored="false"/>
<copyField source="ss_" dest="sort_ss_"/>
<!-- A random sort field -->
<dynamicField name="random_*" type="rand" indexed="true" stored="
true"/>
<!-- This field is used to store node access records, as opposed
to CCK field data -->
<dynamicField name="nodeaccess*" type="integer" indexed="true" sto
red="false" multiValued="true"/>

You will also have to add a fieldtype for any types referenced in the list above that are not
already defined in your schema. Depending on your version of Solr some of the fieldtypes below
may or may not already be in your schema.xml file. Add any of the types below that do not
already exist in your schema.xml.

Solr Fieldtypes

<!-- ******* Field types added in to allow Drupal content to be


indexed here as well ******** -->
<!--
Numeric field types that index each value at various levels
of precision
to accelerate range queries when the number of values
between the range
endpoints is large. See the javadoc for NumericRangeQuery
for internal
implementation details.
Smaller precisionStep values (specified in bits) will lead
to more tokens

Version 5
302
Start

indexed per value, slightly larger index size, and faster


range queries.
A precisionStep of 0 disables indexing at different
precision levels.
-->
<!-- ADD THESE IF THEY DON"T ALREADY EXIST -->
<fieldType name="integer" class="solr.IntField" omitNorms="
true"/>
<fieldType name="tint" class="solr.TrieIntField" precisionStep
="8" omitNorms="true" positionIncrementGap="0"/>
<fieldType name="tfloat" class="solr.TrieFloatField" precision
Step="8" omitNorms="true" positionIncrementGap="0"/>
<fieldType name="tlong" class="solr.TrieLongField" precisionSt
ep="8" omitNorms="true" positionIncrementGap="0"/>
<fieldType name="tdouble" class="solr.TrieDoubleField" precisi
onStep="8" omitNorms="true" positionIncrementGap="0"/>
<!-- A Trie based date field for faster date range queries and
date faceting. -->
<fieldType name="tdate" class="solr.TrieDateField" omitNorms="
true" precisionStep="6" positionIncrementGap="0"/>
<!-- Edge N gram type - for example for matching against
queries with results
KeywordTokenizer leaves input string intact as a single term
.
see: http://www.lucidimagination.com/blog/2009/09/08/
auto-suggest-from-popular-queries-using-edgengrams/
-->
<fieldType name="edge_n2_kw_text" class="solr.TextField" posit
ionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2
" maxGramSize="25" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<!-- Setup simple analysis for spell checking -->
<fieldType name="textSpell" class="solr.TextField" positionInc
rementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" w
ords="stopwords.txt"/>
<filter class="solr.LengthFilterFactory" min="4" max="20"
/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory" />

Version 5
303
Start

</analyzer>
</fieldType>
<!-- This is an example of using the KeywordTokenizer along
With various TokenFilterFactories to produce a sortable
field
that does not include some properties of the source text
-->
<fieldType name="sortString" class="solr.TextField" sortMissin
gLast="true" omitNorms="true">
<analyzer>
<!-- KeywordTokenizer does no actual tokenizing, so the
entire
input string is preserved as a single token
-->
<tokenizer class="solr.KeywordTokenizerFactory"/>
<!-- The LowerCase TokenFilter does what you expect, which
can be
when you want your sorting to be case insensitive
-->
<filter class="solr.LowerCaseFilterFactory" />
<!-- The TrimFilter removes any leading or trailing
whitespace -->
<filter class="solr.TrimFilterFactory" />
<!-- The PatternReplaceFilter gives you the flexibility to
use
Java Regular expression to replace any sequence of
characters
matching a pattern with an arbitrary replacement string,
which may include back refrences to portions of the
orriginal
string matched by the pattern.
See the Java Regular Expression documentation for more
infomation on pattern and replacement string syntax.
http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/
package-summary.html
<filter class="solr.PatternReplaceFilterFactory"
pattern="(^\p{Punct}+)" replacement="" replace="all"
/>
-->
</analyzer>
</fieldType>
<!-- A random sort type -->
<fieldType name="rand" class="solr.RandomSortField" indexed="
true" />

You will also have to copy the id field to the PID field. Add the below copyField statement in the
same section as the other copyField statements.

Solr Copyfield

Version 5
304
Start

<copyField source="id" dest="PID"/>

In older versions of Solr you can copy the id to the PID and have the PID as the uniqueKey. In
newer versions of Solr you may not be able to copy the id to PID (newer versions don't seem to
let you use the uniqueKey as a destination for a copyField). In that case it may be easier to
modify the GSearch xslt to create an id field instead of PID and use it as the uniqueKey in your
schema.
Save the schema.xml file and restart Solr. After the restart you should be able to view solr at
http://ip:port/solr.

Apache Solr Module


Once you have Solr configured properly and restarted you can install and configure the Apache
Solr module in your Drupal site. See https://drupal.org/project/apachesolr for more information.
Basically you just download it and enable as you would any other module. You've already
modified the schema.xml so you don't need to do anything with schemal.xml.
At this point if everything is configured properly you should see some Drupal content in your solr
index, if you don't see any Drupal content you may have to wait for cron to run or you can force
the module to index content from the modules config interface (admin/config/search/apachesolr)
.

Modify Islandora search results


Islandora will not know how to properly display a result created from a Drupal node so you will
either have to add a custom Islandora Solr display profile or use the theme layer to preprocess
the results, there are examples of creating a custom display profile in the
islandora_solr_module.
To modify results in your theme you could create a function called
themename_preprocess_islandora_solr(&$variables). In this function you could check for a field
that will only exist with drupal content, for instance bundle_name, and if it is not empty you
could modify the thumbnail and the url used to link back to the content.
For example if you are using the bartik theme you could do something like:

theme_preprocess_islandora_solr

function bartik_preprocess_islandora_solr(&$variables) {
$results = &$variables['results'];
foreach ($results as &$result) {
if (!empty($result['solr_doc']['bundle_name'])) {
$path = url('http://aurltothethumbnail'); //could
check bundle for type and link to thumbnail for each type

Version 5
305
Start

$options = array('html' => TRUE);


$options['attributes']['title'] = $result['solr_doc'][
'label'];
$image = theme('image', array('path' => $path));
$key['thumbnail'] = l($image, $result['solr_doc']['url
']['value'], $options);
}
}
}

Modifying the results by using a theme_preprocess hook is probably the easist way to
modify your results but is probably also the most brittle. For instance if you change
your theme your search results page may break.

Multi-site
If you are using a Drupal multi-site setup and you have more than one Drupal site's content in
Solr you will probably want to filter on the site field or the hash field to limit results to just the
drupal site you are viewing. This can be done in the Islandora Solr Settings -> Query defaults
config page or you can setup a custom request handler in the solrconfig.xml.

TODO: Document how to filter drupal content by site.

Related articles
Page: Index Drupal Content in Islandora's Solr index

Upgrading From Older Versions of Solr and GSearch


The steps below should see you through the upgrade of a standard Islandora installation to the
latest versions of Apache Solr and Fedora GSearch.

DO NOT stop the fedora service before beginning these steps.

1. Confirm that Apache ant is installed

ant -version

Version 5
306
Start

2. Remove the current Fedora GSearch .war file

rm -f $FEDORA_HOME/tomcat/webapps/fedoragsearch.war

3. Remove the current Apache Solr .war file

rm -f /opt/solr/apache-solr-1.4.1.war

4. Copy the new Fedora GSearch .war file into place

cp /staging/fedoragsearch-2.5/fedoragsearch.war $FEDORA_HOME/
tomcat/webapps/

5. Change ownership of the new GSearch .war file to user 'fedora'.

chown fedora:fedora /usr/local/fedora/tomcat/webapps/


fedoragsearch.war

6. Copy the /example/solr directory into place

cp -r /staging/apache-solr-3.6.0/example/solr $FEDORA_HOME/solr

7. Change ownership of the new /solr directory to user 'fedora'

chown fedora:fedora $FEDORA_HOME/solr/

8. Copy the new Apache Solr file into place

cp /staging/apache-solr-3.6.0/example/webapps/solr.war $
FEDORA_HOME/tomcat/webapps/

9. Change ownership of the new Solr .war file to user 'fedora'.

chown fedora:fedora$FEDORA_HOME/tomcat/webapps/solr.war

Version 5
307
Start

10. Edit the fedora-users.xml and fgsconfig-basic.properties files

10a. fedora-users.xml

vi $FEDORA_HOME/server/config/fedora-users.xml

Add the following section...

> # add additional user


>
> <user name="fgsAdmin" password="[password]">
> <attribute name="fedoraRole">
> <value>administrator</value>
> </attribute>
> </user>

10b. fgsconfig-basic.properties

vi $FEDORA_HOME/tomcat/webapps/fedoragsearch/FgsConfig/
fgsconfig-basic.properties

Change, or uncomment, each of the following lines. When uncommenting a line in a particular
section, make sure to also comment out the original line that was 'selected' in that section.

> configDisplayName=configProductionOnSolr
> gsearchPass= [password]
> local.FEDORA_HOME=/usr/local/fedora
> namesOfRepositories=FgsRepos
> namesOfIndexes=FgsIndex
(keep name in order not to modify GUI for GSearch)
> fedoraBase=http://localhost:8080
(to access objects from index in GUI for GSearch)
> fedoraPass=[password]
> indexEngine=Solr
> indexBase=http://localhost:8080/solr
> indexDir=${local.FEDORA_HOME}/solr/data/index
> indexingDocXslt=foxmlToSolr

11. Change to the /FgsConfig directory

cd $FEDORA_HOME/tomcat/webapps/fedoragsearch/FgsConfig

Version 5
308
Start

12. Run ant on the fgsconfig-basic.xml file

ant -f fgsconfig-basic.xml

You should see a message similar to:

BUILD SUCCESSFUL
Total time: 0 seconds

13. Rename the current Solr schema.xml file to schema.bak

mv $FEDORA_HOME/solr/conf/schema.xml $FEDORA_HOME/solr/conf/
schema.bak

14. Copy the new, ant-generated Solr schema into place as schema.xml

cp $FEDORA_HOME/tomcat/webapps/fedoragsearch/WEB-INF/classes/
fgsconfigFinal/index/FgsIndex/conf/schema-3.6.1-for-fgs-2.5.xml $
FEDORA_HOME/solr/conf/schema.xml

15. Stop/Start the Fedora service

$FEDORA_HOME/tomcat/bin/shutdown.sh
$FEDORA_HOME/tomcat/bin/startup.sh

16. Test the upgrade

1. Check the number of items indexed in Fedora GSearch:

a. Go to http://localhost:8080/fedoragsearch/rest

b. Login using fgsAdmin

c. Click on updateindex

d. Click on updateIndex fromFoxmlFiles - The "Resulting number of index documents"


should have the same value as it did before the upgrade
2. Check the version of Solr:

a. Go to http://192.168.56.195:8080/solr

b.
Version 5
309
2.

Start

b. Click the 'Solr Admin' link

c. Click the [Info] link - The "Solr Specification Version" should match the version
number of Solr that was just installed.
3. Check the version of Fedora GSearch:

a. Go to http://192.168.56.195:8080/fedoragsearch - The "Fedora Generic Search


Service Version" should match the version number of GSearch that was just
installed.

Thank you to Charles Birmingham for providing the basis for this section.

Troubleshooting the Minimum Stack Installation


This section covers common issues and problems with the Islandora installation process, and
community experiences that may shed light on the installation experience. This page is a work
in progress and will develop as more cases are added.

Failing the test process


1. As a general rule each milestone has its own testing procedure, which should be
conformed to before the subsequent milestone is attempted. Please refer to that test
within each milestone.
2. As a general rule each solution pack, module and/or dependency module has its own
Drupal testing process, which should be passed. Please refer to that module specific test.
3. If all the above is a pass then refer to the additional troubleshooting tips below.

Unable to connect to Fedora server


There are a number of potential causes for this error. Some possibilities include:

Certificate Validation
What to try: Disable certificate validation in the Islandora module:

nano -w sites/all/libraries/tuque/HttpConnection.php
/** * FALSE to stop cURL from verifying the peer's certificate.
(Default: TRUE) * @var type boolean */
public $verifyPeer = FALSE;

Drupal servlet filter


What to try:

Version 5
310
Start

1. Make sure mysql settings are correct in server/config/filter-drupal.xml

a. Open a mysql command line client using the credential from filter-drupal.xml

b. Run an sql query using a valid username and password from your Islandora site. If
this fails, and <param name="ENFORCE-MODE" value="permit-all-requests"/>
is uncommented in your fedora.fcfg there is an issue with the settings in
filter-drupal.xml.
2. If you have curl installed at the command line:

a. Try interacting with the Fedora REST API directly with this command:

curl -u fedoraAdmin:fedoraAdmin -X POST http://localhost:


8080/fedora/objects/new\?namespace\=test

This makes a POST request as the user "fedoraAdmin" identified by the password "
fedoraAdmin". This should create a new object in the repository with the
namespace "test". For example, "test:1"

Firewall
What to try: Take down the firewall temporarily to see if the error resolves. If so, an exception
is needed.

SELinux
SELinux (Security-Enabled Linux) is included in some linux distributions. It creates policies for
every process and object in the system and then enforces rules designed to limit access
between those processes and system objects. This is intended to confine the damage that can
be caused by compromised applications. However, these policies can also block the Islandora
module's access to Fedora's REST apis running on port 8080.
What to try:

1. First, see if SELinux is installed and enabled. Type the sestatus command. If enabled,
you will see output similar to this:SELinux status: enabled

SELinuxfs mount: /selinux


Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted

2.
Version 5
311
Start

2. To very quickly check whether SELinux is causing the connection error, you can
temporarily switch its mode from "enforcing" to "permissive" (do this as root):

setenforce Permissive

Now test the Islandora module's connection to Fedora again. If that fixes the problem, you
can then make a more permanent adjustment to SELinux to allow the connection to the
Fedora server.
3. You could completely disable SELinux, by changing its configuration in /etc/selinux/
config but it's not necessary (and most often not recommended!). The specific SELinux
policy that is blocking access is likely httpd_can_network_connect. First, change the
mode back to "Enforcing", then switch on the policy http_can_network_connect.
Again, as root:

setenforce Enforcing
setsebool -P httpd_can_network_connect on

Test the Islandora module's connection to Fedora once more. If it works, you have
adjusted the SELinux configuration to permit the needed connection without disabling it
entirely.

Tuque library
What to try: On the command line, change into Drupal's sites/all/libraries directory and issue
the following command: git clone https://github.com/Islandora/tuque.git

With thanks to the Islandora Community and the user and developer listervs for
contributing issues, tests, and solutions.

4.6.2 Option 2: automated installations (islandora_chef)


This chef cookbook by MJ Suhonos will install and configure Islandora. For further information,
please visit the project on GitHub.

Version 5
312
Start

4.6.3 Installing the Islandora Enhancement Modules

Most of the Enhancement Modules are installed much in the same way as
the Essential Modules :
Download the Solution Pack, Tool & Dependencies or Search Modules from the Release
Notes and Downloads section.
Unzip the module, and move the module root tree striped of the version number into the
/var/www/drupal/sites/all/modules

In the case of a Dependency Library unzip it and move it into the library location: /var/
www/drupal/sites/all/libraries

Fix the permissions on the module to: chown -R www-data:www-data

Enable the uploaded module by navigating to base-site-url/admin/modules, scrolling


down to the Module (in the 'Islandora' category), checking the box to the left of it, and
then scrolling to the bottom of the page and clicking the 'Save configuration' button.
Once installed, configuration options for the Islandora module in question can be found
on your site at http://path.to.your.site/admin/islandora/configure
Once configured, you should be able to test the module. Ensure that the 'testing'
module is enabled in Drupal (it is not by default), then go to Configuration >
Development > Testing and click the link.
This will pop up a new window with a list of tests to run. Scroll down to the module in
question, then click the checkbox. Scroll down to the bottom and click "Run Tests".

You may want to start with all the remaining Solution Packs first, and add the
dependency modules as required.

Special note on installing the Video Solution Pack


This installation can be very tricky, and is possibly the most difficult of all components of the
Islandora stack. Please see this post on the Islandora Google Group for details ( please
replace any references to release 7.x-1.3 with 7.x.1-5 ):
https://groups.google.com/forum/#!topic/islandora/wuOjmRTY5Rs

Viewing the installed Solution Packs:


Once you have logged into your Islandora site you can view a list of all current collections by
clicking the Islandora Repository link.

Version 5
313
Start

You should see any collections that are installed as part of a Solution Pack, and they will
appear with a default folder icon.

Check the Notes on Solution Pack & Tool Dependencies

Notes on Solution Pack & Tool Dependencies

On This Page
Overview of Dependencies
Apache Reverse Proxy
Djatoka
ExifTool
ImageMagick
Islandora Viewer
Lame
Kakadu
SWF Tools
Tesseract
Video Dependencies

Overview of Dependencies
Most Islandora Solution Packs and some modules will require that you have one or more of the
following dependencies installed so that Islandora Content Models can perform prescribed
actions on your data objects. Review Islandora Solution Packs to see what dependencies are
required for the solution packs you wish to install.

Apache Reverse Proxy


If you wish to use an iframe with the Islandora Viewer you must configure Apache with a
reverse proxy. Note: These instructions are for configurations with Fedora running on the same
server as Drupal.
Configuration Steps:

1. Add the following to Apache's httpd.conf file or desired virtual host, if using Apache virtual
hosts:

Version 5
314
1.
Start

ProxyRequests Off
ProxyPreserveHost On
<Proxy \*>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /fedora/get http://localhost:8080/fedora/get
ProxyPassReverse /fedora/get http://localhost:8080/fedora/get
ProxyPass /fedora/services http://localhost:8080/fedora/
services
ProxyPassReverse /fedora/services http://localhost:8080/fedora
/services
ProxyPass /fedora/describe http://localhost:8080/fedora/
describe
ProxyPassReverse /fedora/describe http://localhost:8080/fedora
/describe
ProxyPass /iiv http://localhost:8080/iiv
ProxyPassReverse /iiv http://localhost:8080/iiv
ProxyPass /fedora/risearch http://localhost:8080/fedora/
risearch
ProxyPassReverse /fedora/risearch http://localhost:8080/fedora
/risearch
ProxyPass /adore-djatoka http://localhost:8080/adore-djatoka
ProxyPassReverse /adore-djatoka http://localhost:8080/
adore-djatoka

2. Test your configuration by navigating to http://localhost/fedora/risearch to view the Fedora


resource index page.

Djatoka
Djatoka is a Java-based open source image server that provides compression and region
extraction of JPEG 2000 images, URI-addressability of regions, and support for a rich set of
input/output image formats (e.g., BMP, GIF, JPG, PNG, PNM, TIF, JPEG 2000).
See Djatoka

ExifTool
ExifTool is a platform-independent Perl library plus a command-line application for reading,
writing and editing metadata in a wide variety of formats. ExifTool is used by the Audio Solution
Pack to read and write metadata for audio files. Islandora currently uses ExifTool version 3.5.
ExifTool can be obtained from the project home page: http://www.sno.phy.queensu.ca/%7Ephil/
exiftool/. Installation will differ depending on your operating system; please see the installation
instructions for details.

Version 5
315
Start

ImageMagick
ImageMagick is used to create thumbnail and medium-size JPEF versions of ingested images.
Most Linux systems ship with ImageMagick already installed. If your system does not have the
command-line program "convert" you will need to install ImageMagick using your OS's package
manager, or on Mac OS X install it from source using http://www.macports.org. JPEG2000
support is not required in ImageMagick since we are using Kakadu.
We recommend using ImageMagick version 6.7 and higher and the corresponding Ghostscript
installation. You can download ImageMagick (and find installation instructions) on the Binary
Release page: http://www.imagemagick.org/script/binary-releases.php.

Islandora Viewer
The Islandora Viewer is a JAVA application served up by Tomcat, which enables the viewing of
web-based images and PDFs as a virtual document. It is required by the Large Image Solution
Pack, Newspaper Solution Pack, and Book Solution Pack. The viewer provides zoom, scrolling
and pagination capabilities.
Installation Steps:
# Download the latest version of IIV from the Release Notes and Downloads page and extract
the WAR files to the $CATALINA_HOME/webapps directory.
# Tomcat should automatically deploy the WAR file, but if it doesn't you can manually unzip the
iiv folder from the war file using the "unzip" Unix command.

You must enter the actual IP address of your server in the Fedora URL fields under
Administer > Site Configuration > Islandora Configure. Entering 'localhost' or '127.0.0.1
' will prevent the viewer from working.

Test the installation by ingesting Fedora service objects in etc/fedora-objects.


If you wish to use an iFrame with the Islandora Viewer, you must configure Apache with a
reverse proxy. See Apache Reverse Proxy.

If you are using Fedora 3.5, you will need to edit FEDORA_HOME/server/config/spring
/web/security.xml and comment out the following line: <security:filter-chain pattern="/
risearch*" filters="ChannelFilter,AuthFilterJAAS" />.

Lame
See LAME Encoder

Version 5
316
Start

Kakadu
Source: Kakadu Software - Description
A comprehensive, heavily optimized, fully compliant software toolkit for JPEG2000 developers.
Now with more extensive and convenient support for Java native interfaces. Also now
automatically builds bindings for C# and Visual Basic programmers.
Kakadu supports multi-threaded processing to fully utilize parallel processing resources (
multiple CPUs, multi-core CPUs or hyperthreading). You can select the single-threaded
processing model from v5.0 and before, or a new multi-threaded processing model (requires
only a few extra lines of code in your application).
Kakadu provides a carefully engineered thread scheduler so once you have created a
multi-threaded environment and populated it with one thread for each physical/virtual processor
on your system, close to 100% utilization of all computational resources is typically achieved.
Kakadu is a complete implementation of the JPEG2000 standard, Part 1, -- i.e., ISO/IEC 15444-
1. This new image compression standard is substantially more complex than the existing JPEG
standard, both from a computational and a conceptual perspective.
Kakadu also provides a comprehensive implementation for several of the most useful features
from Part 2 of the JPEG2000 standard, including general multi-component transforms and
arbitrary wavelet transform kernels.
The Kakadu software framework provides a solid foundation for a range of commercial and
non-commercial applications. By making a consistent and efficient implementation of the
standard widely available for both academic and commercial applications, the goal is to
encourage the widespread adoption of JPEG2000.
The Kakadu software toolkit is required if you wish to automatically convert TIFF files into
JPEG2000 during the ingest object process.
Installation Steps:
Download the Kakadu package from the project download page on http://
www.kakadusoftware.com/ and follow the installation instructions for your platform. You should
be able to run "kdu_compress" from the command line and successfully convert a TIFF file to a
JPEG2000.
Djatoka includes Kakadu executable files. If Drupal and Fedora are on the same server
you should be able to copy or symlink kdu_compress to somewhere on the Apache users
classpath.

SWF Tools
This suite of Drupal modules is used primarily by the Audio Solution Pack. You can download if
from the Drupal project page.

Version 5
317
Start

SWF Tools version 6.x-3.0-beta5 or higher is required.

JW Player is included in this package, but you need to download and install the library
separately. You can get the latest JW Player library at http://www.longtailvideo.com/players/
jw-flv-player/.

1. Install to /sites/all/libraries/mediaplayer-x.x (the name of the directory will depend on the


version you install).
2. Create a symlink to this directory in sites/all/modules called mediaplayer4.

Finally, enable the following SWF Tools modules:


SWF Tools
JW Media Player 5
SWF Object 2

Tesseract
See Tesseract

Video Dependencies
A number of video conversion dependencies are required by the Video Solution Pack. Most of
the conversion work is handled by FFmpeg, a complete, cross-platform solution to record,
convert and stream audio and video. However, conversion to the Ogg Vorbis format requires
ffmpeg2theora, libvorbis, libtheora, and libogg.
The following command will install FFmpeg, libvorbis, libtheora, and libogg on CentOS:

yum -y install ffmpeg libtheora libvorbis libogg

The process is slightly different on Ubuntu; support for the AAC codec has been removed from
the version of FFmpeg available from the standard Ubuntu repositories. Instead, you can install
from a third-party repository using these steps:
1. Install, update, and authenticate the Mediabuntu repository

sudo wget http://www.medibuntu.org/sources.list.d/$(lsb_release -


cs).list --output-document=/etc/apt/sources.list.d/medibuntu.list
&& sudo apt-get -q update && sudo apt-get --yes -q --
allow-unauthenticated install medibuntu-keyring && sudo apt-get -q
update

Version 5
318
Start

2. Install FFmpeg
Ubuntu Oneiric Ocelot 11.10:

sudo apt-get install ffmpeg libavcodec-extra-53

Ubuntu Natty Narwhal 11.04, Ubuntu Maverick Meerkat 10.10, and Ubuntu Lucid Lynx 10.04:

sudo apt-get install ffmpeg libavcodec-extra-52

Ubuntu Hardy Heron 8.04:

sudo apt-get install ffmpeg

You can then use wget to install ffmpeg2theora. The command, which works on both CentOS
and Ubuntu, will vary depending on the version and installation path; here is an example of the
command we use to download and install the 64bit Linux version:

wget http://v2v.cc/~j/ffmpeg2theora/ffmpeg2theora-x.xx.linux64.bin
chmod +x ffmpeg2theora-x.xx.linux64.bin
ln -s /opt/ffmpeg2theora-x.xx.linux64.bin /usr/bin/ffmpeg2theora

4.6.4 Customizing Islandora


Islandora aims to preserve as much of FedoraCommons underlying flexibility as possible, and to
create a framework where users can create custom content models and ingest/display
behaviours. Unlike earlier versions of Islandora, Islandora 7 Content Models are much smaller
objects that are built (along with object behaviours/transformations) directly into code. This
means that Islandora customization that involves creating a new content model and behaviours,
or a new viewer, means writing Islandora code. Thankfully there are a number of resources
available on the community page to help you get started. We also recommend reviewing the
documentation available for developers on the Islandora Github wiki.

Translating Islandora
Islandora can be fully translated using the Drupal Internationalization (i18n) module. Please see
the project documentation for more information. Tutorials are also available at http://
drupal-translation.com/content/setup-multilingual-site.

Version 5
319
Start

4.6.5 Troubleshooting the Enterprise Setup


This section will show you how to access some of the basic error reporting functions for Drupal,
Fedora, Apache, Tomcat, and Microservices. For specific troubleshooting on the installation
process, check out Troubleshooting the Minimum Stack Installation.
Most components in the Islandora stack have their own log. This document will describe each of
those logs: where they can be found; how to configure them; and what information they contain.
Logs typically have "levels" which are used to determine what kinds and how much information
should be placed in them. A general rule of thumb is that a log will support the following levels in
order of the most information to the least:
DEBUG
INFO
WARN
ERROR
FATAL
When you encounter a problem or are doing development you should check that the log is
configured to store as much information as possible.
Error Reporting in Drupal
Error Reporting in Fedora
Apache Logs
Tomcat Logs
Microservices

Error Reporting in Drupal


Drupal core/modules often display Drupal, PHP, and SQL error messages to the end user in the
browser as they happen. Often these messages will refer to a problem/action that occurred
during the previous request. Most likely if you encounter a problem at this level, someone else
has as well; its best to search google for relevant information. The issues are colour coded by
seriousness, (red = error, yellow = warning, green = status/info).
Drupal also logs information to what it calls the 'watchdog'. The watchdog is essentially a
database table, within the Drupal database. It contains messages generated by Drupal core/
module code. You can view the 'watchdog' by visiting " http://yoursite/admin/reports/dblog" or by
logging into your site, clicking the 'Reports' link in the admin bar (or navigating to http://
URL.of.your.site/admin) and clicking 'Recent log entries' under 'Reports'. Errors are categorized
by "type" which usually indicates which module generated the message.

Version 5
320
Start

You will see a list of recent log entries from various sources. Not all entries are errors - error
messages will be marked with a red 'X'.

Version 5
321
Start

Clicking on a message description will give you a detailed summary of the error. You can use
this information to troubleshoot a problem yourself, or to provide more detail to a technical
support contact.

Check the watchdog frequently even when the site is working correctly. Many non-fatal issues
will be logged to the watchdog. Be proactive! Check the watchdog when:
An error message is displayed on the webpage.
The page appeared to work but something is missing or an action didn't take place.

Version 5
322
Start

Sometimes when working on a problem its useful to export the logs into a shareable format so
that others in the community can help troubleshoot the problem. There are several ways to do
this. If you have Drush installed you can dump the table like so:

drush sql-dump --tables-list="watchdog" > watchdog.sql

Or you render the logs to a file:

drush ws --count=1000 >watchdog.log

For more options to ws, use “drush help ws”. Since using “drush ws” doesn’t provide all the
information in the watchdog its recommended that you use “drush sql-dump” for sharing.
You can import a dump watchdog log like so:

drush sql-query "TRUNCATE watchdog;"; drush sql-cli < watchdog.sql

This will remove your local watchdog so be careful!

Error Reporting in Fedora


Fedora error reporting can be access via the command line (assuming you have the right
permissions). Start by opening a Terminal window and type the following:

ssh username@ip.address.of.server

You will then be prompted for your password.

Version 5
323
Start

Navigate to your Fedora logs directory; for example:

cd /usr/local/fedora/server/logs

From here you can type 'ls' to view a list of files in the directory.

Version 5
324
Start

You can view a log file in various ways; for example:

less fedora.log

This will print the log to the screen. You can use this information to troubleshoot a problem
yourself (depending on your level of Fedora knowledge), or to provide more detail to a technical
support contact.
There are several log files kept by Fedora they are kept in several different directories.
Information generated from the "$FEDORA_HOME/client/bin" scripts is logged to "$
FEDORA_HOME/client/logs"; typically you won't need to review these logs. The bulk of
interesting information is stored in "$FEDORA_HOME/server/logs". Here you will find
fedora.log, fesl.log, and sometimes fedoragsearch.log, and djatoka.log depending on how
GSearch and Adore-Djatoka are configured.
You can configure the various logs in Fedora by modifying "$FEDORA_HOME/server/config/
logback.xml". Typically there are two log files fedora.log, and fesl.log configured for the
loggers "fcrepo", "jaas", "xacml". You can set the log levels for any of the defined loggers by
changing the @level attribute to either (DEBUG, INFO, WARN, ERROR, FATAL). You can
create separate log files for any of the defined loggers by defining a new appender, and setting
the logger's appender-ref @ref attribute.
Fedora uses SLF4J with Logback in more recent versions, prior to version 3.4 Fedora used
Log4J, which is still used in GSearch. For a full list of configuration options refer to each of
those projects documentation.
fedoragsearch.log can be configured before building with ant, or via the configuration file "$
CATALINA_HOME/webapps/fedoragsearch/WEB-INF/classes/log4j.xml" can be modified after
GSearch has been configured.
Set the output of fedoragsearch for versions of gsearch prior to 2.3:

<appender name="FILEOUT" class="org.apache.log4j.FileAppender">


<param name="File" value="/usr/local/fedora/server/logs/
fedoragsearch.log">
...
</appender>

Set the output of fedoragsearch for versions of gsearch 2.3 or later:

<appender name="FILEOUT" class="


org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/usr/local/fedora/server/logs/
fedoragsearch.daily.log"/>

Version 5
325
Start

...
</appender>

Set the level of output (DEBUG, INFO, WARN, ERROR, FATAL) for versions of gsearch prior to
2.3 append LEVELG to the selected level, for search 2.3 and later only use the level:

<logger name="dk.defxws.fedoragsearch" additivity="false">


<level value="DEBUGLEVELG" />
<appender-ref ref="FILEOUT"/>
</logger>

Include SOLR logs in the fedoragsearch.log. Set the level of output (DEBUG, INFO, WARN,
ERROR, FATAL) for versions of gsearch prior to 2.3 append LEVELS:

<logger name="dk.defxws.fgssolr" additivity="false">


<level value="DEBUGLEVELS" />
<appender-ref ref="FILEOUT"/>
</logger>

You can define more than one appender to separate out the various logs in log4j.xml. Or you
can modify the tomcat logs as is demonstrated below.
djatoka.log can be configured in “$CATALINA_HOME/webapps/adore-djatoka/WEB-INF/
classes/log4j.properties”. While djatoka still uses log4j, it has a properties file rather than an xml
file, so configuring it is slightly different.
Here is an example “log4j.properties” the directory and level information is bolded:

# REPORTING LEVELS: OFF, DEBUG, INFO, WARN, ERROR and FATAL


log.dir=/usr/local/fedora/server/logs/
datestamp=yyyy-MM-dd/HH:mm:ss.SSS/zzz
roll.pattern.hourly=.yyyy-MM-dd.HH
roll.pattern.daily=.yyyy-MM-dd
#djatoka.log -- Default catch-all.
log4j.rootLogger=DEBUG, defaultLog
log4j.appender.defaultLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.defaultLog.DatePattern=${roll.pattern.daily}
log4j.appender.defaultLog.File=${log.dir}/djatoka.log
log4j.appender.defaultLog.layout=org.apache.log4j.PatternLayout
log4j.appender.defaultLog.layout.ConversionPattern=%d{${datestamp}} [%t] %-5p %m%n

Version 5
326
Start

Apache Logs
The location of the apache error log and what other logs (access, etc) are available will depend
on your operating system, apache version, and apache settings. The error log will contain any
problems that occurred while processing a request. Errors generated by PHP code that are not
caught by Drupal will usually be logged here. The access log will typically contain requests
made to apache and if apache denied them access.
Here are some typical locations for the log files:
Ubuntu/Apache 2:
Error Log: /var/log/apache2/error.log
Access Log: /var/log/apache2/access.log
CentOS/Apache 2:
Error Log: /var/log/httpd/error_log
Access Log: /var/log/httpd/access_log
Check these logs when:
The page white screens, check the Apache error log first, it most likely will be a PHP
syntax error.
The watchdog didn't provide any useful information.
To customize the output of the apache logs (Set the log level, etc) follow the instructions
provided here: (http://httpd.apache.org/docs/1.3/logs.html) Any changes to the configuration of
Apache require that Apache be restarted.
Ubuntu:

service apache2 restart

CentOS:

service https restart

The Apache Tomcat logs may also be useful in diagnosing problems. You can access these
logs by navigating to your Tomcat logs directory; for example:

cd $FEDORA_HOME/tomcat/logs

Version 5
327
Start

The most relevant log file in this directory is catalina.out. As with fedora.log, you can view this
file in various ways; for example:

less catalina.out

Tomcat Logs
Tomcat logs are typically found in "$CATALINA_HOME/logs". Tomcat logs can be configured in
"$CATALINA_HOME/conf/logging.properties", for in-depth information on configuring the
logging done by Tomcat, and various webapps consult (http://tomcat.apache.org/tomcat-6.0-doc
/logging.html).
Separate SOLR logs into a different file then fedoragsearch.log. Modify the handlers and add
the information for the SOLR file handler:

handlers = 1catalina.org.apache.juli.FileHandler,
2localhost.org.apache.juli.FileHandler,
3manager.org.apache.juli.FileHandler,
4host-manager.org.apache.juli.FileHandler,
5localhost.org.apache.juli.FileHandler,
java.util.logging.ConsoleHandler
...
5localhost.org.apache.juli.FileHandler.level = WARNING
5localhost.org.apache.juli.FileHandler.directory = ${catalina.base
}/logs
5localhost.org.apache.juli.FileHandler.prefix = solr.
...
org.apache.solr.level=INFO
org.apache.solr.handlers=5localhost.org.apache.juli.FileHandler

Microservices
Logging can be configured by modifying islandora_listener.cfg in the Micro-services home
directory typically "/opt/islandora_microservices/islandora_listener.cfg".
The level and output file and size of log can be set like so:

[Logging]
file: islandora_listener.log
;Supported levels are DEBUG, INFO, WARNING, ERROR, CRITICAL
level: DEBUG
; The maximum log size in bytes before a log rotation
; a setting of zero means never rotate

Version 5
328
Start

max_size: 10485760
; number of backup logs to keep
backup: 5

4.7 Migration/Upgrade
4.7.1 Initial remarks
This is the very first draft of documentation on this subject, so please bear with us, and please
submit your comments or suggestions as you perform your own upgrades or migrations.

4.7.2 Introduction
The general idea is to treat a full migration as a series of controlled updates. In another words,
upgrade or replace components of the Islandora Minimum Viable Functionality within the
context of each milestone, and use its test mechanism to ensure the upgrade works.
For instance, the most frequent releases come from Drupal (as of this writing release
7.36). That would be milestone 2. Once you perform the Drupal upgrade test that
milestone by itself and all subsequent milestones, keeping every other component of the
stack unchanged. Before starting the process be sure to do a tarball snapshot backup of
Fedora, MySQL and Drupal.
The next most frequent release upgrade is Islandora itself (in this case version 7.x-1.5),
and for most cases it's backward compatible with older versions of Fedora ( 3.5, 3.6.2,
3.7.0, 3.8.0) . That would be milestone 5 onwards. So again, before starting the process
be sure to do a tarball snapshot backup of Fedora, MySQL and Drupal. Then proceed to
the upgrade and testing of milestones 5 and 6.
The least frequent new releases are that of Fedora Commons (as of this writing release
3.80). This is the most basic of all components of the solution stack it could be a little
trickier, since it entails a true migration from the previous information on the MySQL
database. Again, before starting the process be sure to do a tarball snapshot backup of
Fedora, MySQL and Drupal, Then proceed to milestone 1 installation and testing, leaving
all other components above alone. After that, move on to "fix" any outstanding issues
with subsequent milestones, in the normal order.

4.7.3 Migrations
Update Drupal from version 7.31 to version 7.36
Update Islandora from version 7.x-1.3 to version 7.x-1.5RC1
Update Fedora from version 3.7.0 to version 3.8.0

4.7.4 Update Drupal from version 7.31 to version 7.36


Version 5
329
Start

4.7.4 Update Drupal from version 7.31 to version 7.36


Create a tarball snapshot backup of MySQL and Drupal

# $FEDORA_HOME/tomcat/bin/shutdown.sh
# /etc/init.d/mysql stop
# /etc/init.d/apache stop
# cd /var/lib
# tar -cvzf mysql-backup.tar.gz mysql
# cd /var/www
# tar -cvzf drupal-7.31-backup.tar.gz drupal

download version 7.36


drupal-7.36.tar.gz
drupal-7.36.zip
install drupal 7.36 (check milestone 2 - Installing Drupal for more details)

# cd /var/www/
# mv drupal drupal-7.31-old
# unzip drupal-7.36.zip
# mv drupal-7.36 drupal
# cd drupal-7.31-old
# rsync -va sites /var/www/drupal
# rsync -va libraries /var/www/drupal
# rsync -va jwplayer /var/www/drupal
# rsync -va php /var/www/drupal
# /etc/init.d/mysql start
# $FEDORA_HOME/tomcat/bin/startup.sh
# /etc/init.d/apache start

Access the Reports menu of your Islandora site, and proceed to do any further updates it
may require. http://localhost/node#overlay=admin/reports
Test the updated modules (check the test section of the milestone 2 - Installing Drupal for
more details)
Create a new milestone 2 snapshot backup of your site:

# $FEDORA_HOME/tomcat/bin/shutdown.sh
# /etc/init.d/mysql stop
# /etc/init.d/apache stop
# cd /usr/local
# tar -cvzf fedora-milestone2.tar.gz fedora
# cd /var/lib

Version 5
330
Start

# tar -cvzf mysql-milestone2.tar.gz mysql


# cd /var/www
# tar -cvzf drupal-milestone2.tar.gz drupal
# /etc/init.d/mysql start
# $FEDORA_HOME/tomcat/bin/startup.sh
# /etc/init.d/apache start

4.7.5 Update Islandora from version 7.x-1.3 to version 7.x-1.5RC1


Create a tarball snapshot backup of MySQL and Drupal

# $FEDORA_HOME/tomcat/bin/shutdown.sh
# /etc/init.d/mysql stop
# /etc/init.d/apache stop
# cd /var/lib
# tar -cvzf mysql-backup.tar.gz mysql
# cd /var/www
# tar -cvzf drupal-backup.tar.gz drupal

# /etc/init.d/mysql start
# $FEDORA_HOME/tomcat/bin/startup.sh
# /etc/init.d/apache start

Access the Modules section of Drupal and take note of all Islandora modules, solutions
packs and libraries that are loaded. You could just as well make a recursive list of the
contents of /var/www/sites
Return to the Modules section of Drupal and disable all Islandora modules, solutions
packs and libraries that are loaded. You may have to do this in 5 or 6 rounds, until you
are able to disable the Islandora core module, and save the configuration.
Then download and install version 7.x-1.5 of the Essential Modules, as described on the
milestone 5 - Installing the Islandora Essential Modules section. Make sure to replace
each and all four Essential Modules with the new versions in /var/www/sites/all/module (
you may want to save the old module directory with a new name and recreate a new one
). Be sure to fix the ownerships to www-data:www-data as you had before.
Proceed to enable and test the four Essential Modules, and install any dependencies as
required .
At this stage, if all tests are a pass, you should already be able to see all your previous
collections listed at the Top-level, even though you may not be able to access them yet.
Then update Tuque to version 1.5. Follow the instructions on milestone 4 - Installing The
"Tuque" library. Don't forget to test the Tuque installation.

Version 5
331
Start

Now proceed to install all the remaining Enhancement Modules and dependencies as
you had still on version 7.x-1.3. Use the Installing the Islandora Enhancement Modules
section as a reference

Proceed to enable and test the Enhancement Modules, and install any dependencies as
required .
Create a new milestone 5 snapshot backup of MySQL and Drupal

# $FEDORA_HOME/tomcat/bin/shutdown.sh
# /etc/init.d/mysql stop
# /etc/init.d/apache stop
# cd /var/lib
# tar -cvzf mysql-milestone5.tar.gz mysql
# cd /var/www
# tar -cvzf drupal-milestone5.tar.gz drupal
# /etc/init.d/mysql start
# $FEDORA_HOME/tomcat/bin/startup.sh
# /etc/init.d/apache start

4.7.6 Update Fedora from version 3.7.0 to version 3.8.0

As of this writing, release 3.8.0 seems to contain several bugs, as explained on this
Google Thread. Therefore the recommendation at this time would be to remain with
the stable 3.7.0 release if you have it working properly.
However, if you would like to try 3.8.1 RC3 then proceed with caution, and please
report problems you may find to the above Google thread.

Create a tarball snapshot backup of Fedora, MySQL and Drupal

# $FEDORA_HOME/tomcat/bin/shutdown.sh
# /etc/init.d/mysql stop
# /etc/init.d/apache stop
# cd /usr/local
# tar -cvzf fedora-backup.tar.gz fedora
# cd /var/lib
# tar -cvzf mysql-backup.tar.gz mysql
# cd /var/www
# tar -cvzf drupal-backup.tar.gz drupal
# /etc/init.d/mysql start

Version 5
332
Start

Download release 3.8.1 of Fedora (fcrepo-installer-3.8.1-SNAPSHOT.jar)


Rename your old /usr/local/fedora location to /usr/local/fedora-3.7
Refer to the Installation section on milestone 1 - Installing Fedora, however take note of
the steps described on the Upgrading from 3.5+ to 3.8 section of the Fedora wiki (
reproduced below):

Upgrading from 3.5+ to 3.8 (from the Fedora wiki)

Work-in-progress
3.5+ to 3.8 Upgrade Instructions have not been thoroughly tested. YMMV.

Version 3.6 does not require a database or resource index rebuild, nor does it require an
upgrade to your configuration. In order to "swap in" the new version of the software, you
may:
1. Shut down your old 3.5 repository
2. Install the newer version of Fedora inthe usual /usr/local/fedora location, but
before starting it:
a. Copy your old server/config/fedora.fcfg file into the new installation's server/
config/ directory.
b. Copy your old bean definitions under server/config/spring into the new
installation's server/config/spring/ directory.
c. Edit one of the bean definitions to include an object cache. An example can
be seen in the 3.7.0 source at https://github.com/fcrepo/fcrepo/blob/master/
fcrepo-server/src/main/resources/fcfg/server/doreader-cache.xml .
d. If you have previously made changes to the repository-wide XACML
policies, copy them into the new repository installation's data/
fedora-xacml-policies directory (you will need to create this directory)
3. Start the new instance of Fedora for the first time.
4. If you are using FeSL and are using a different policy index configuration to your
existing installation (i.e. you are no longer using DB XML, the only option available
for 3.4.x)
a. Shut down your repository
b. Run the Policy Index Rebuilder.
c. Restart your repository
5. To verify that Fedora has successfully started:

a.
Version 5
333
5. Start

a. $FEDORA_HOME/tomcat/logs/catalina.out should contain no errors.


b. View your Fedora instance through a web browser:
http://localhost:8080/fedora/
or
https://[yourdomain]:8443/fedora

Upgrading fcrepo-drupalauthfilter from version 3.7.0 to 3.8.0


Download fcrepo-drupalauthfilter-3.8.0.jar
Refer to the milestone 3 - Installing & Configuring Drupal Filter for further
instructions
Proceed to test and fix any problems you may find on subsequent milestones.

4.8 3rd Party Integrations


4.8.1 Archidora

Introduction
Archidora is the Archivematica-Islandora Integration Module. Archivematica provides a
preservation system that the Archidora module integrates into Islandora.
It was developed in a partnership between Artefactual and Discovery Garden.

About Archivematica
Archivematica is a free and open-source digital preservation system that is designed to maintain
standards-based, long-term access to collections of digital objects. It uses a micro-services
design pattern to provide an integrated suite of software tools that allows users to process
digital objects from ingest to access in compliance with the ISO-OAIS functional model. Users
monitor and control the micro-services via a web-based dashboard. Archivematica uses METS,
PREMIS (events, agents, rights and restrictions), Dublin Core, the Library of Congress BagIt
specification and other best practice standards and practices to provide trustworthy, authentic
, reliable, and interoperable archival packages (AIPs) for storage in your preferred repository.
Archivematica provides several decision points that give the user control over choices about
format identification tools, printing the original order of the directories ingested, examining
contents for private and personal information, extracting contents of packages and forensic

Version 5
334
Start

images, transcribing content, and more. Users may also preconfigure most of these options for
seamless ingest to archival storage and access. Archivematica offers many ingest workflows:
metadata and submission documentation import, zipped and unzipped Bag ingest, digital
forensic image processing, SIP arrangement, manual normalization, and dataset management.
You may read more about Archivematica here.

About Archidora
You may read more about Archidora on this presentation from Justin Simpson, Artefactual at
the iCamp BC - February 16 - 18, 2015

Download
https://github.com/discoverygarden/archidora
You may also download the alpha 1.4.0 release from Artefactual. They have tested it against an
Islandora instance set up in their office, using the islandora-labs/islandora_vagrant git repo.

Installation
Installation and testing is similar to any Drupal module. Please see Installing the Islandora
Enhancement Modules for details.

Configuration
The Archivematica's Storage Service URL, user and user's API key will have to be entered into
this module's admin screen, at admin/islandora/archidora, and a Deposit Location
selected. An API token should also be generated to allow Archivematica to call back to
Islandora.
In Fedora, the domain name of the server will have to be configured properly as well as a user
created for Archivematica. The user created in Fedora will have to be entered in
Archivematica's configuration to be able to authenticate with Fedora, so to be able to pull
datastreams.
Archivematica may also be configured to call back to Islandora to delete the high-res "OBJ"
datastreams.

As a side-effect of using Cron Queues, the submission of objects to Archivematica


may not complete during any one invocation of Cron.

4.8.2 Digital Humanities

4.8.3 DuraCloud
Version 5
335
Start

4.8.3 DuraCloud

4.8.4 iRods

4.8.5 ModeShape

4.8.6 Pydio

Introduction
Pydio is a Dropbox-like web interface to a remote filesystem (similar to OwnCloud). There are
three desktop synchronization clients available for Pydio to enable the Dropbox-style
functionality (linked under "Download" below); their stable client, written in Java; their
experimental client, written in Python; and SFU's own Pydio client, which is effectively a cronjob
+ some libraries + a GUI installer, and is the only one that supports CAS users on the Pydio
side. All three work on Windows, Mac, and Linux.
SFUdora is an Islandora module developed by Simon Fraser University for integration with
Pydio. When running Pydio on the same server as Islandora, it adds an interface hook to Pydio
that allows users to initiate deposit of files or folders to Islandora after presenting them with an
Islandora metadata form, without needing to upload the file separately. This is a much more
efficient way to perform GUI-driven batch ingest than what's currently available in Islandora,
gets around the limitations of HTTP transfers (since files can be rsynced to Pydio using one of
the desktop clients, and do not need to be directly uploaded as in Islandora), and provides a
nice value-add by linking the two systems for sites that are already interested in pursuing a local
Dropbox-style solution for reasons of data integrity and privacy.

Download
Pydio Server
Pydio Synchronization Clients
Desktop Sync

Installation
Please follow the youtube channel instructions for installation

Notes:
Seeing "AjaXplorer" on the Drupal menu after installed SFUdora is the expected
behaviour -- "AjaXplorer" was what Pydio was called earlier in its development when SFU
first undertook this work, and that name string is probably hardcoded in there (though

Version 5
336
Start

Drupal allows you to override this easily in the interface when you're customizing your
menus). You should also now see some options under the Islandora settings page in
Drupal to configure SFUdora-specific functionality, such as the URL to AjaXplorer/Pydio
on that server. If you've installed Pydio through the deb or rpm packages provided, this
should be http://yourIslandoraSite/pydio by default.
The Pydio plugin needs to go in /usr/share/pydio/plugins, where you should see several
other directories matching the "action.xyz" naming convention. You should then be able
to enable in the Pydio admin interface (you may need to clear the plugin cache first to get
it to show up). You can then go about potentially configuring Pydio and Drupal to use the
same single-sign-on authentication method.
The installers available from http://researchdata.sfu.ca/node/2 are hard-coded to SFU
URLs, but you can also rebuild the OSX and Windows from source (https://github.com/
axfelix/datasync; the Linux version is just a shell script and doesn't need to be "built")
after changing the SFU-specific language if you like. NSIS is used for packaging on
Windows and Platypus on OSX, if you want to go that route.

4.8.7 Taverna

4.9 Release Notes and Downloads


Here are the release notes for the most recent version of Islandora, as well as links to the
appropriate Github repositories. Islandora is released twice a year. Rather than waiting for the
release, some institutions prefer to run closer to the most recent code, where bugs might be
fixed or new features added. If you encounter a bug in the release (there are always known
issues), it's a good idea to review the Github repository for that module to see if a fix has been
submitted. Islandora runs a continuous integration testing framework, which means that new
code for Islandora is always tested before being merged.

Do not mix and match different versions of modules.

Version 5
337
Start

4.9.1 Downloads

Essential Modules

Minimum Requirement

Documentation Version Download

Islandora Core 7.x-1.5 Download

Solution Pack Basic Collection 7.x-1.5 Download

Starter Kit

Documentation Version Download

Solution Pack Basic Image 7.x-1.5 Download

Solution Pack PDF 7.x-1.5 Download

Enhancement Modules

Solution Packs

Documentation Version Download

Solution Pack Audio 7.x-1.5 Download

Solution Pack Book 7.x-1.5 Download

Solution Pack Compound 7.x-1.5 Download

Solution Pack Disk Image 7.x-1.5 Download

Solution Pack Entities 7.x-1.5 Download

Solution Pack Large Image 7.x-1.5 Download

Version 5
338
Start

Documentation Version Download

Solution Pack Newspaper 7.x-1.5 Download

Solution Pack Video 7.x-1.5 Download

Solution Pack Web ARChive 7.x-1.5 Download

Tools & Dependencies

Documentation Version Download

Islandora BagIt 7.x-1.5 Download

Islandora Batch 7.x-1.5 Download

Islandora Bookmark 7.x-1.5 Download

Islandora Book Batch 7.x-1.5 Download

Islandora Checksum 7.x-1.5 Download

Islandora Checksum Checker 7.x-1.5 Download

Islandora FITS 7.x-1.5 Download

Islandora Image Annotation 7.x-1.5 Download

Islandora Internet Archive Book Viewer 7.x-1.5 Download

Islandora Importer 7.x-1.5 Download

Islandora JWPlayer 7.x-1.5 Download

Islandora MARCXML 7.x-1.5 Download

Islandora OAI 7.x-1.5 Download

Version 5
339
Start

Documentation Version Download

Islandora OCR 7.x-1.5 Download

Islandora OpenSeadragon 7.x-1.5 Download

Islandora Paged Content 7.x-1.5 Download

Islandora Pathauto 7.x-1.5 Download

Islandora PDF.js 7.x-1.5 Download

Islandora PREMIS 7.x-1.5 Download

Islandora Simple Workflow 7.x-1.5 Download

Islandora Video.js 7.x-1.5 Download

Islandora XACML Editor 7.x-1.5 Download

Islandora XML Sitemap 7.x-1.5 Download

Islandora XML Forms 7.x-1.5 Download

Search

Documentation Version Download

Islandora Solr Metadata 7.x-1.5 Download

Islandora Solr Facet Pages 7.x-1.5 Download

Islandora Solr Views 7.x-1.5 Download

Islandora Solr Search 7.x-1.5 Download

Version 5
340
Start

Islandora Scholar

Documentation Version Download

Islandora Scholar 7.x-1.5 Download

Other Requirements

Documentation Version Download

Drupal Filter 7.x-1.5 Github

Objective Forms 7.x-1.5 Download

PHP Lib 7.x-1.5 Download

Tuque 1.5 Download

4.9.2 Release Notes

New Modules
Islandora Solution Pack Disk Image
Adds all required Fedora objects to allow users to ingest and retrieve disk images through the
Islandora interface.
Islandora Solution Pack Entities
This module is for adding support for entities (person, place, event, organization) to Islandora.
Islandora Pathauto
Exposes Islandora objects to the alias-creating tools of Pathauto.
Islandora PDF.js
An Islandora viewer module using Mozilla PDF.js.

Supported Versions
Islandora has been tested with the following versions of major dependencies:
Fedora 3.5, 3.6.2, 3.7.0, 3.8.0, 3.8.1(RC1,RC2,RC3)

Version 5
341
Start

GSearch 2.6.2, HEAD


Solr 3.6.2, 4.2.0
PHP 5.3.3, 5.4, 5.5
Djatoka 1.1
Java (Oracle) 6,7,8 (Djatoka requires Sun/Oracle Java)

Improvements
The following improvements have been documented in the 7.x-1.5 release.

T Key Summary P

ISLANDORA- Allow hiding/display of GUI components to reflect user


Major
885 permissions

ISLANDORA- Fedora Revisioning Exposure in Drupal Userland


Major
918

ISLANDORA- "Features" integration for Solr config


Minor
899

ISLANDORA- Add autocomplete functionality to Tag form elements.


Minor
873

ISLANDORA- Allow repository managers to set thumbnail uri


Minor
1044

ISLANDORA- Allow users to sort tabs in XML Form Builder


Minor
867

ISLANDORA- Allows repository managers to include uri to object as dc.identifier


Minor
1043 value

ISLANDORA- Document Sanitization (PDF)


Minor
457

ISLANDORA- Ensure fgs_label_s is single valued


Minor
1122

Version 5
342
Start

T Key Summary P

ISLANDORA- It is desirable for some installs to disable derivative creation.


Minor
1041

ISLANDORA- Move PREMIS tab under Manage?


Minor
1007

ISLANDORA- Move processing to preprocess function and display to a template


Minor
988 .

ISLANDORA- Option to regenerate derivatives


Minor
922

ISLANDORA- Scholar doesn't respect Solr Metadata Display module


Minor
985

ISLANDORA- Should we have a symlink in a module?


Minor
870

ISLANDORA- Solr Metadata - text filter


Minor
979

ISLANDORA- Support Darwin Core metadata in Islandora Importer


Minor
1060

ISLANDORA- Support fcrepo 3.7.0 in testing matrix


Minor
1059

ISLANDORA- Support php 5.5 in testing matrix


Minor
1023

ISLANDORA- TN mimes in DS-COMPOSITE


Minor
1116

ISLANDORA- checksum initialization


Minor
1026

Version 5
343
Start

T Key Summary P

ISLANDORA- improve solution pack islandora_get_viewers function


Minor
906

ISLANDORA- innacurate parameter name and documentation


Minor
860

ISLANDORA- shouldn't inline datastream in scan batch


Minor
1061

ISLANDORA- when solr metadata display is configured, an error is displayed on


Minor
1037 object ingest

ISLANDORA- xml mime type improvement


Minor
1045

26 issues

4.9.3 Bug Fixes


The following bugs have been fixed and tested.

T Key Summary P

ISLANDORA Can't Uninstall Islandora via Drush


Blocker
-874

ISLANDORA Child collections and objects don't get XACML


Blocker
-894

ISLANDORA Recent bugs introduced


Blocker
-1020

ISLANDORA pages derivitive issue


Blocker
-1024

ISLANDORA Checksum recursion


Blocker
-1025

Version 5
344
Start

T Key Summary P

ISLANDORA Remove XACML editor dependency from Islandora Paged Content


Blocker
-1036

ISLANDORA text/xml broken for replacing datastreams


Blocker
-1065

ISLANDORA text/xml broken for replacing datastreams


Blocker
-1066

ISLANDORA xacml management policies block access


Blocker
-1083

ISLANDORA XACML, POLICY datastream, Anonymous, and AuthZ denied


Critical
-991

ISLANDORA XACML - Parsing methods unrealiable


Critical
-1055

ISLANDORA Zipfile importer leaves zipfile contents mess in Drupal's "Public file
Critical
-1081 system path"

ISLANDORA Anonymous role in Drupal Servlet Filter


Major
-890

ISLANDORA XACML, POLICY datastream, Anonymous, and AuthZ denied


Major
-992

ISLANDORA Video SP leaving derivative files behind in tmp


Major
-1074

ISLANDORA when adding items to the select options through the XML Form
Minor
-526 Builder, use is unable to select item after a number of items have
been added.

ISLANDORA Hitting the 'Enter' key while entering a new CSL style deletes the
Minor
-595 first style in the list

Version 5
345
Start

T Key Summary P

ISLANDORA Namespaces aren't consistently added to repeatable form


Minor
-620 elements

ISLANDORA In IE7 a right click to download a .jpg image defaults to .bmp


Minor
-658

ISLANDORA "Tree" checkbox has no effect


Minor
-669

ISLANDORA djatoka doesn't like small images


Minor
-686

ISLANDORA update gsearch xslt and solr schema xml on github


Minor
-706

ISLANDORA XML Form builder allows the creation of Elements that have ":" in
Minor
-718 their identifiers which causes problems.

ISLANDORA We should make sure we are properly escaping solr queries


Minor
-762

ISLANDORA XACML module hiding GUI elements when it shouldn't


Minor
-769

ISLANDORA Info/fulltext/etc overlays broken


Minor
-869

ISLANDORA Manage Datastreams Tab fails to render with an exception if


Minor
-893 XACML denies the user access to a single data-stream.

ISLANDORA advanced full text searching - highlighting


Minor
-911

ISLANDORA Unable to manually add a TN ds to a large image sp image.


Minor
-917

Version 5
346
Start

T Key Summary P

ISLANDORA Delete drupal variables on uninstall.


Minor
-977

ISLANDORA Djatoka URL as a relative path


Minor
-987

ISLANDORA Bad class needs changing


Minor
-990

ISLANDORA Solr fields permissions default when null is set.


Minor
-996

ISLANDORA Video.js library path is incorrect


Minor
-998

ISLANDORA FedoraRelationships::getXpathResults can now have a predicate


Minor
-1000 without a predicate_uri

ISLANDORA Plugin descriptions and maybe a bug?


Minor
-1002

ISLANDORA Can't create bags for single objects that have object policies (
Minor
-1003 XACML) applied to them

ISLANDORA WSOD when no JP2 datastream


Minor
-1006

ISLANDORA Full Screen doesn't display for Newspaper with Bookreader


Minor
-1012

ISLANDORA depreacate human readable bytes func?


Minor
-1017

ISLANDORA Replace datastream - allowed file types


Minor
-1028

Version 5
347
Start

T Key Summary P

ISLANDORA Schema API fails to find type of non-inline referenced xs:element


Minor
-1048

ISLANDORA when manually adding or replacing a TN with the Video SP I get


Minor
-1051 an error message.

ISLANDORA Islandora Solr Search modal disconnect


Minor
-1057

ISLANDORA Multiple restricted content models breaks OAI


Minor
-1070

ISLANDORA Islandora OAI module $earliest_datestamp can be truncated (and


Minor
-1078 invalid)

ISLANDORA Islandora Checksum Checker not sending mismatch warnings


Minor
-1079

ISLANDORA When selecting the Update XACML Inheritance, an error is


Minor
-1089 produced.

ISLANDORA advanced search result doesn't pass page fragment to paged


Minor
-1105 content object

ISLANDORA empty search highlighting error


Minor
-1106

ISLANDORA Newspaper providing wrong content model to issue viewer


Minor
-1108

ISLANDORA When using contextual filters only, $where and $group_operator


Minor
-1124 are missing.

ISLANDORA Islandora XACML API fails to write relationships when inheriting


Minor
-1126 policies

Version 5
348
Start

T Key Summary P

ISLANDORA Objects not showing up in most collections


Minor
-1142

54 issues

Code and Documentation Tasks


The following code tasks and documentation tasks were completed for the 7.x-1.5 release.

Key Summary P

No issues found

Known Issues
The following issues are known to still be active in the 7.x-1.5 release.

Key Summary T P

ISLANDORA "Enable search navigation block" in Solr Search causes


Major
-1304 OpenSeadragon to error and results in non-display of large images
when images are accessed through search results

ISLANDORA Compound SP navigation block incomplete / broken


Major
-1144

ISLANDORA External tools called though the command line can't handle Latin
Major
-1171 Characters

ISLANDORA RI dislikes tab character in object label


Major
-1281

ISLANDORA Remove deprecated variables from theme.inc


Major
-1306

ISLANDORA islandora_batch failing to import MARCXML


Major
-1184

Version 5
349
Start

Key Summary T P

ISLANDORA newspaper view is broken when newspaper issues have XACML


Major
-1181 policies

ISLANDORA paged content pages aren't deleted when deleting parents from
Major
-1297 collection

ISLANDORA "Hide child objects in RI results" does not hide compound child
Minor
-1186 objects with XACML policies

ISLANDORA "Results per page" setting in Solr config Default display settings not
Minor
-1117 respected

ISLANDORA .bin extension added when downloading OBJ datastream


Minor
-1257

ISLANDORA Bag is not generated for "islandora:root" object on install, nor can
Minor
-1305 one manually generate the bag

ISLANDORA Bag not created on object update


Minor
-1240

ISLANDORA Bagit module: MODs and DC datastream have .bin extension


Minor
-1237 instead of xml

ISLANDORA Can't scroll pane when drag sorting items in XML Form Builder
Minor
-897

ISLANDORA Checksums are maintained in NewFedoraDatastreams when the


Minor
-857 content changes

ISLANDORA Clipper functionality for OpenSeadragon breaks in 1.0.0.


Minor
-935

ISLANDORA Datastream alter broken api


Minor
-1077

Version 5
350
Start

Key Summary T P

ISLANDORA Delete collection only deletes the first 10 child objects


Minor
-1063

ISLANDORA Deleting agregate objects don't transverse the graph.


Minor
-1210

ISLANDORA Deprecate class MimeDetect


Minor
-994

ISLANDORA Disable enter key when adding new field to Solr display
Minor
-1118

ISLANDORA Find Collections autocomplete is case sensitive


Minor
-1299

ISLANDORA In metadata forms the datepicker element creates a visible empty


Minor
-877 div at the bottom of the page.

ISLANDORA Incorrect module packaging makes installation from .tar.gz difficult


Minor
-820

ISLANDORA Internet Archive Book Viewer cuts off images in single page and
Minor
-1127 thumbnail views

ISLANDORA Internet Archive Bookreader - Zoom issues


Minor
-981

ISLANDORA Internet Archive Bookreader play button rewinds to page 2 instead


Minor
-1050 of page 1

ISLANDORA Internet archive book viewer auto-play flips last page back and forth
Minor
-1195 after using auto-play once

ISLANDORA Islandora OAI does not "walk" recursively for Books/Newspapers.


Minor
-975

Version 5
351
Start

Key Summary T P

ISLANDORA Long titles do not generate appropriate Fedora labels


Minor
-1148

ISLANDORA Option to supply text file for PDFs without saving as FULL_TEXT
Minor
-859 Datastream should not be available

ISLANDORA PID search in SOLR advanced search


Minor
-898

ISLANDORA Quotation marks aren't saved/displayed properly in repeatable tag


Minor
-872 fields

ISLANDORA Remove dependency on jquery_update Image Annotation


Minor
-1198

ISLANDORA Seeming double deletion of tmp files in ocr batch.


Minor
-1203

ISLANDORA Share object with collection doesn't respect collection policies


Minor
-1155

ISLANDORA Solr admin 'x' button on modal windows causes issues


Minor
-1068

ISLANDORA Solr metadata -- decode_entities


Minor
-1034

ISLANDORA Solr views pops warnings when Solr is not available


Minor
-1102

ISLANDORA TECHMD and TECHMD_DFXML datastreams downloads as .xsl


Minor
-1258 not .xml

ISLANDORA Theme Templates are using the wrong hook


Minor
-1071

Version 5
352
Start

Key Summary T P

ISLANDORA Weird behavior in Display fields table


Minor
-1119

ISLANDORA When adding a new object using the same filename from a previous
Minor
-1093 upload, an error is generated.

ISLANDORA When regenerating datastreams, 2 versions are created


Minor
-1090

ISLANDORA When sharing all objects with another collection, the processing
Minor
-1088 message doesn't exit

ISLANDORA XML Forms Schema API Fatal Error.


Minor
-717

ISLANDORA XML form throws errors after changing <titleInfo><title> elements


Minor
-928

ISLANDORA bibutils fails to properly transform endnotexml to mods


Minor
-1103

ISLANDORA empty tags created in tabs


Minor
-1215

ISLANDORA fully support setting models array with an array


Minor
-1030

ISLANDORA google scholar default xpath doesn't seem to work.


Minor
-1101

ISLANDORA hook_islandora_basic_collection_build_manage_object does not


Minor
-1205 handle indexed elements

ISLANDORA hook_islandora_object_modified passes the unmodified object


Minor
-1073

Version 5
353
Start

Key Summary T P

ISLANDORA if OpenURL PID is not configured, DOI Importer ingest fails silently
Minor
-1098

ISLANDORA if a user includes a / in a form name it breaks it


Minor
-1192

ISLANDORA if romeo lookup is enable and an issn isn't provided, an error is


Minor
-1100 produced.

ISLANDORA mods:nonSort and other title elements missing during ingest


Minor
-1049

ISLANDORA solr facet date range doesn't respect facet min. limit setting
Minor
-1211

ISLANDORA transform in islandora_importer fails to crosswalk dateCreated


Minor
-841

ISLANDORA warnings and mangled images found in basic solution pack


Minor
-811

ISLANDORA Multiple tabs in the form builder are rendered incorrectly until an
Trivial
-1035 ajax event occurs

62 issues

4.9.4 Deprecated
The following functions, constants, and variables are in 7.x-1.5, but will be removed from 7.x
very soon!

Functions
Islandora Image Annotation
islandora_image_annotation_shared_get_annotation_data
islandora_image_annotation_canvas_setup

Constants
Version 5
354
Start

Constants
N/A

Variables
$islandora_object['DC']

$ grep -R --color -n "islandora_object\['DC'\]" .


./islandora/theme/theme.inc:140: if (isset($islandora_object['DC'
]) && islandora_datastream_access(ISLANDORA_VIEW_OBJECTS, $
islandora_object['DC'])) {
./islandora/theme/theme.inc:141: $dc_object = DublinCore::
importFromXMLString($islandora_object['DC']->content);
./islandora/theme/theme.inc:461: if (islandora_datastream_access(
ISLANDORA_VIEW_OBJECTS, $islandora_object['DC'])) {
./islandora/theme/theme.inc:463: $dc = $islandora_object['DC'
]->content;
./islandora/theme/theme.inc:478: if (islandora_datastream_access(
ISLANDORA_VIEW_OBJECTS, $islandora_object['DC'])) {
./islandora/theme/theme.inc:480: $dc = $islandora_object['DC'
]->content;
./islandora/islandora.module:1127: $dc = $islandora_object['DC'
]->content;
./islandora_solution_pack_large_image/islandora_large_image.module:
171: if (isset($islandora_object['DC']) &&
islandora_datastream_access(ISLANDORA_VIEW_OBJECTS, $
islandora_object['DC'])) {
./islandora_solution_pack_large_image/islandora_large_image.module:
173: $dc = $islandora_object['DC']->content;
./islandora_solution_pack_audio/islandora_audio.module:140: if
(isset($islandora_object['DC']) && islandora_datastream_access(
ISLANDORA_VIEW_OBJECTS, $islandora_object['DC'])) {
./islandora_solution_pack_audio/islandora_audio.module:141: $
dc = $islandora_object['DC']->content;
./islandora_solution_pack_pdf/theme/theme.inc:29: if (isset($
islandora_object['DC']) && islandora_datastream_access(
ISLANDORA_VIEW_OBJECTS, $islandora_object['DC'])) {
./islandora_solution_pack_pdf/theme/theme.inc:30: $dc = $
islandora_object['DC']->content;
./islandora_solution_pack_collection/theme/theme.inc:23: $dc =
$islandora_object['DC']->content;
./islandora_solution_pack_collection/theme/theme.inc:85: $dc =
$islandora_object['DC']->content;
./islandora_solution_pack_image/islandora_basic_image.module:128:
if (islandora_datastream_access(ISLANDORA_VIEW_OBJECTS, $
islandora_object['DC'])) {
./islandora_solution_pack_image/islandora_basic_image.module:130:
$dc = $islandora_object['DC']->content;

Version 5
355
Start

4.9.5 Contacts
Google Developers Group: For support, feedback, and bug reports.
Google Users Group: For user-related issues and information.
Islandora.ca: for general information and updates about the project.
community@islandora.ca: for questions and comments.

4.9.6 License
Islandora operates under a GNU license.

Version 5
356
Start

5 Contribute
There are many ways one can contribute to the Islandora community. The below is a guide to
help you contribute back to the community; however, please don't feel that you are limited to the
ways we list below. Let us know at community@islandora.ca if you like to contribute to the
community in a way other than the ones listed below and we will assist you the best that we can
.
If you have any questions, please contact us at community@islandora.ca and we'll get back to
you as soon as we can.

5.1 Bugs
You found a bug in Islandora - now what? You can help us squash them by reporting these
bugs through the JIRA Ticketing System.
If you think you have a patch ready to fix the bug, please refer to the Code section above for
coding standards and how to submit your patch.

5.2 Testing
We always need testers for new releases and modules! Contact community@islandora.ca for
more information about current testing schedules.

5.3 Metadata Forms


If you have a metadata form that you think others would like to use, please visit the Forms page
to see what already has been submitted. The instructions for sharing a form to the community is
in the Github repository.

5.4 Documentation
Documentation is what makes the Islandora world run. There are several ways you can help
contribute to documentation:
For correcting misinformation in current documentation in Confluence, please leave a
comment on the page containing the error.
To recommend new documentation, or to submit documentation for consideration, send a
message to the Islandora Documentation Interest Group Google Group.

Version 5
357
Start

If you'd like to become more involved with overall documentation activities for Islandora,
please consider joining the Islandora Documentation Interest Group.

5.5 Support
Like to solve problems on the fly? Or maybe you'd like to help others in their problem solving?
Either way, the community has two public Google Groups for you to share your knowledge:
Developers Google Group and the General Islandora Google Group.

5.6 Training
Training is an essential part of the community in terms of ensuring members get the most out of
Islandora. You can share training materials through the General Islandora Google Group.

5.7 Code
Code contributions can come in several flavors, from small script and patches to new modules
and solutions packs. The code for Islandora can be found in our GitHub repositories . Please
refer to the Coding Standards for Islandora Section on the Islandora Community page for
coding and documentation standards that the community uses for code contributions. Additional
documentation for developers can be found in the Islandora Github repository.

For those of you who are curious on the high level view of how code contributions work, here is
a chart from the Islandora Developers page (which also contains general information for
developers):

Version 5
358
Start

Version 5
359
Start

6 Appendices

6.1 Useful External Links


6.1.1 General
Creating Fedora Objects Using the Fedora Content Model Architecture: http://
wiki.duraspace.org/display/FEDORACREATE/Tutorial+2+-+Creating+Fedora+Objects
Information for creating ITQL queries: http://docs.mulgara.org/itqlcommands/index.html
Fedora XACML Policy Writing Guides: (For assistance in creating new policies for your
repository and for your objects): http://fedora-commons.org/download/2.1/userdocs/server/
security/XACMLPolicyGuide.htm

Hand writing XACML policies can cause unexpected behaviour. We suggest using the
XACML Editor instead.

Fedora Digital Object Model: https://wiki.duraspace.org/display/FEDORA37/Fedora+Digital+


Object+Model
Introduction to RELS-EXT: http://fedora-commons.org/download/2.0/userdocs/digitalobjects/
introRelsExt.html
About Fedora PIDs: https://wiki.duraspace.org/display/FEDORA37/Fedora+Identifiers#
FedoraIdentifiers-PIDs
Solr Reference Guide: http://lucidworks.com/blog/solr-reference-guide/
Virtual Box: http://download.virtualbox.org/virtualbox/4.1.2/UserManual.pdf

6.1.2 Xpath References


W3schools tutorial: http://www.w3schools.com/xpath/default.asp
Samples: http://msdn.microsoft.com/en%20us/library/ms256086.aspx

6.2 APPENDIX B - SAMPLES & RESOURCES


In this Appendix you will find the following samples:
#Custom QUERY Datastream
Custom COLLECTION_VIEW Datastream

Version 5
360
Start

#Custom Request Handler


XACML Policy (CHILD_SECURITY Datastream)
#Sample XML Form Definition
If you notice any errors or omissions, or would like to see another sample in this appendix,
please submit a request on the users list, or to islandora@upei.ca.

6.2.1 Custom QUERY Datastream


Here is a custom QUERY Datastream that returns objects that belong to a particular collection,
and are set to a particular state (active)

select $object $title from <#ri>


where ($object <dc:title> $title
and $object <fedora-model:hasModel> $content
and $object <fedora-rels-ext:isMemberOfCollection> <info:fedora/
demo:special_collection>
and $object <fedora-model:state> <info:fedora/fedora-system:def/
model#Active>)
order by $title desc

6.2.2 Custom COLLECTION_VIEW Datastream


Here is a sample COLLECTION_VIEW Datastream that will render your content as a bulleted
list.

<xsl:stylesheet xmlns:s="http://www.w3.org/2001/sw/DataAccess/rf1/
result" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="
1.0">
<xsl:template match="/">
<xsl:variable name="BASEURL">
<xsl:value-of select="$baseUrl"></xsl:value-of>
</xsl:variable>
<ul>
<xsl:for-each select="/s:sparql/s:results/s:result">
<xsl:variable name="pid" select="substring-after(s:object/
@uri,&apos;/&apos;)"></xsl:variable>
<li>
<a>
<xsl:attribute name="href">
<xsl:value-of select="$BASEURL"></xsl:value-of>
<xsl:text>/fedora/repository/</xsl:text>
<xsl:value-of select="$pid"></xsl:value-of>/-/ <xsl:
value-of select="$pid"></xsl:value-of>
</xsl:attribute>

Version 5
361
Start

<xsl:value-of select="s:title"></xsl:value-of>
</a>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>

6.2.3 Custom Request Handler


Here is a Custom Request Handler

<requestHandler name="RefWorks Site"><\!-\- default values for


query parameters
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="qf">
dc.title^2.5 refworks.k1^1.5 refworks.a1^5.0 refworks.u2^5.0
refworks.u1^5.0 dc.contributor^5.0 dc.source^1.0 collection^2.0
PID^0.5
refworks.ab^2.0</str>
<str name="fl">
PID, refworks.a1, refworks.a2, refworks.ar, refworks.k1,
refworks.ed, refworks.fd, refworks.jf, refworks.ab, refworks.no,
refworks.is,
refworks.op, refworks.pp, refworks.pb, refworks.sp, refworks.rt,
refworks.t1, refworks.t2, refworks.vo, refworks.yr</str>
<str name="q.alt">*:*</str></lst><lst name="appends"><str name="fq
"> PID:cyct\* </str></lst>
</requestHandler>

6.2.4 XACML Policy (CHILD_SECURITY Datastream)

<Policy xmlns="urn:oasis:names:tc:xacml:1.0:policy" PolicyId="


ViewAndEditByUserOrRoleOnly" RuleCombiningAlgId="urn:oasis:names:
tc:xacml:1.0:rule-combining-algorithm:first-applicable">
<Description>This is an object-specific policy. It could be
stored inside the digital object in the POLICY datastream OR in
the directory for object-specific policies. (The directory
location is set in the Authorization module configuration in the
Fedora server configuration file (fedora.fcfg). By using multiple
policy Rules, this policy shows how to deny access to all raw
datastreams in the object except to particular users (e.g., the
object owners). It also shows how to deny access to a particular
disseminations to selected user roles.</Description>

Version 5
362
Start

<Target>
<Subjects>
<AnySubject></AnySubject>
</Subjects>
<Resources>
<AnyResource></AnyResource>
</Resources>
<Actions>
<AnyAction></AnyAction>
</Actions>
</Target>
<Rule RuleId="denyapi-m-except-to-user" Effect="Deny">
<Condition FunctionId="urn:oasis:names:tc:xacml:1.0:function:not">
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:or">
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:
string-at-least-one-member-of">
<SubjectAttributeDesignator AttributeId="fedoraRole" DataType="
http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"></
SubjectAttributeDesignator>
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:
string-bag">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string"
>administrator</AttributeValue>
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string"
>Any Drupal Role
</AttributeValue>
</Apply>
</Apply>
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:
string-at-least-one-member-of">
<SubjectAttributeDesignator AttributeId="urn:fedora:names:fedora:
2.1:subject:loginId" MustBePresent="false" DataType="http://www.w3
.org/2001/XMLSchema#string"></SubjectAttributeDesignator>
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:
string-bag">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string"
>fedoraAdmin</AttributeValue>
</Apply>
</Apply>
</Apply>
</Condition>
</Rule>
<Rule RuleId="3" Effect="Permit"></Rule>
</Policy>

Version 5
363
Start

6.2.5 Sample XML Form Definition

<definition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./XMLFormDefinition.xsd">
<properties>
<document>
<root>
<local_name>root</local_name>
<prefix>prefix</prefix>
<uri>http://localhost/</uri>
</root>
<namespaces>
<namespace prefix="xsi">http://www.w3.org/2001/XMLSchema-instance<
/namespace>
<namespace prefix="xmlns">http://www.w3.org/2000/xmlns</namespace>
</namespaces>
<schema>http://localhost/schema/schema.xsd</schema>
</document>
</properties>
<form>
<properties>
<type>form</type>
<tree>true</tree>
</properties>
<children>
<element name="first">
<properties>
<title>first</title>
<type>fieldset</type>
<actions>
<create>
<path>/root/</path>
<context>document</context>
<schema>/xsd:schema/xsd:complexType\[@name='rootType'\]/xsd:
sequence/xsd:element\[@ref='first'\]</schema>
<type>element</type>
<value>first</value>
</create>
<read>
<path>/root/first</path>
<context>document</context>
</read>
</actions>
</properties>
<children>
<element name="second">
<properties>
<title>second</title>

Version 5
364
Start

<type>textfield</type>
<actions>
<create>
<path>self::node()</path>
<context>parent</context>
<schema>/xsd:schema/xsd:complexType\[@name='rooType'\]/xsd:
sequence/xsd:element\[@ref='second'\]</schema>
<type>element</type>
<value>second</value>
</create>
<read>
<path>second</path>
<context>parent</context>
</read>
</actions>
</properties>
</element>
</children>
</element>
<element name="submit">
<properties>
<type>submit</type>
<value>Submit</value>
</properties>
</element>
</children>
</form>
</definition>

Version 5
365
Start

6.3 APPENDIX C - DATASTREAM REFERENCE

-Datastream ID (DSID) Found in: Comments

CHILD_SECURITY Collection Object ( This Datastream is an XACML that is


optional) inherited by every object ingested into the
collection.

COLLECTION_POLICY Collection Object The COLLECTION_POLICY Datastream


specifies which content models are
associated with a particular collection object
, the relationship that child objects ingested
into this collection will have with the
collection object.

COLLECTION_VIEW Collection Object An XSLT that is ran on the collection query


result to transform it into HTML. Default: xsl
/sparql_to_html.xsl

DC All Objects (required)

FULL_TEXT PDF Solution Pack Text of a PDF, pulled from the PDF format's
text stream (as opposed to being pulled via
OCR)

HOCR Paged Content Formatted OCR text stream used to more


module accurately display the OCR output

ISLANDORACM Content Model Object


(required for Islandora
)

JP2 Large Image solution Web-viewable JPEG2000 image created


pack and Paged from TIFF files
Content module

JPG Plain JPG derivative created from TIFF files

Version 5
366
Start

Large Image solution


pack and Paged
Content module

MEDIUM_SIZE Objects created with Provides a derivative web-suitable file for


the Basic Image display.
Solution Pack

MKV Video Solution Pack Matroska video derivative

MODS All objects Datastream holding MODS Metadata

MP4 Video Solution Pack MPEG-4 video derivative

OBJ Audio, Basic Image, Default datastream for the actual original
Large Image, PDF binary ingested with an object
and Video solution
packs, and the Paged
Content module

OBJ_EXIFTOOL Audio Solution pack Stores technical data stripped on ingest


using Exif tool

OCR Paged Content OCR text stream


module

OGG Video Solution Pack OGG Vorbis video derivative (audio only)

PDF Book and Newspaper PDF derivative created either during ingest
solution pack, Paged of a page, or stitched together into an entire
Content module book or newspaper

POLICY Any digital object can This Datastream is an XACML policy that
contain a POLICY describes who can view/edit/delete a
datastream. (optional) collection, object, or datastream.

PREVIEW PDF Solution Pack Binary preview of a PDF used for viewing

PROXY_MP3 Audio Solution pack

Version 5
367
Start

Provides a derivative web-suitable file for


download and display.

QUERY Collection Object Default: CollectionClass.inc

RELS-EXT All Objects (required) “Relationships-External.” This Datastream


contains digital object relationship
information.

RELS-INT Paged Content Interior relationship datastream defining a


module page's relationship to other pages and the
book as a whole

TN Audio, Basic Image, Thumbnail image used to represent the


Book, Large Image, object in lists
Newspaper and Video
solution packs, and
the Paged Content
module

6.4 APPENDIX D - SOLR SCHEMA (SEARCH)


Term Reference

This section is under review and may not reflect the current status of the Islandora
Release.

When you configure the Solr module “out of the box,” a number of terms have been made
available to you for searching and retrieving items that you have ingested using solution packs.
You are asked to configure Solr using the pattern “dc.title ~ Title,” with the first portion
corresponding to the way the field has been indicated in schema.xml, and the second portion
corresponding to the label that you would prefer to have appear to the user. Below is a quick
reference to show you what is available for searching, returning searches, and faceting.
Remember that you will usually want to use fields indexed as type “string” for faceting, and
fields indexed as type “text” for searching.

Version 5
368
Start

Two configuration options are strongly recommended: dsm.text in the search field to search
fulltext of items, and PID in the returned fields area so that users can navigate back to an object
from the record in the search.
These terms have been stored as type “string” making them appropriate for faceting:
Dublin Core

Field Name Indicate Field Name Indicate Field Name Indicate

Type dc.type_s Date dc.date_s Creator dc.creator_s

Title dc.title_s Source dc:source_s Contributor dc:contributor_s

Subject dc.subject_s Description dc.description_s

MODS

Field Indicate Field Indicate Field Name Indicate


Name Name

Title mods.title_s Country mods.country_s Topic mods.topic_s

Region mods.region_s City mods.city_s Geographic mods.geographic_s

City mods.citySection_s Subject mods.subject_s Access mods.accessControl_s


Section Control

Genre mods.genre_s Form mods.form_s Statement of mods.sor_s


Responsibility

Contributor mods.contributor_s Surveyor mods.surveyor_s Date Issued mods.dateIssued_s

Subtitle mods.subtitle_s Extent mods.extent_s Place of mods.placeOfPublication_s


Publication

Name Part mods.namePart_s Abstract mods.abstract_s Date Created mods.dateCreated_s

Publisher mods.publisher_s Note mods.note_s Physical mods.physicalLocation_s


Location

Version 5
369
Start

Role Term mods.roleTerm_s Province mods.province_s Identifier mods.identifier_s

These terms have been stored as type “text” making them appropriate for searching:
Dublin Core

Field Name Indicate Field Name Indicate Field Name Indicate

Type dc.type Date dc.date Creator dc.creator

Title dc.title Source dc:source Contributor dc:contributor

Subject dc.subject Description dc.description

Mods

Field Indicate Field Indicate Field Name Indicate


Name Name

Title mods.title Country mods.country Topic mods.topic

Region mods.region City mods.city Geographic mods.geographic

City mods.citySection Subject mods.subject Access mods.accessControl


Section Control

Genre mods.genre Form mods.form Statement of mods.sor


Responsibility

Contributor mods.contributor Surveyor mods.surveyor Date Issued mods.dateIssued

Subtitle mods.subtitle Extent mods.extent Place of mods.placeOfPublication


Publication

Name Part mods.namePart Abstract mods.abstract Date Created mods.dateCreated

Publisher mods.publisher Note mods.note Physical mods.physicalLocation


Location

Role Term mods.roleTerm Province mods.province Identifier mods.identifier

Version 5
370
Start

6.5 APPENDIX E - Glossary


6.5.1 Collection
Collections are a way of grouping related objects together in Fedora. They function much like
directories on a computer; a collection can “contain” any number of related objects and
sub-collections. For more technical detail, see Collection Object.

6.5.2 Collection Object


Everything stored in Fedora is an object; including collections. Collection objects provide a
means to organize other objects via an isMemberOf element in an RDF statement.

6.5.3 Collection Policy


The collection policy is a Datastream that specifies which content models are associated with
a particular collection object. This determines which file types can be ingested into the
collection. The Datastream ID (DSID) for a Collection Policy will always be
COLLECTION_POLICY.

6.5.4 Composite Model (DS-COMPOSITE-MODEL)


The "DS-COMPOSITE-MODEL" defines what data streams comprise an object, whether or not
these datastreams are optional or enforced, and what mime type the datastream can, should, or
must contain.

6.5.5 Content Model


Content models describe the characteristics of objects in the Fedora repository. Islandora
extends Fedora's content model architecture with a datastream that has the Datastream ID (
DSID) ISLANDORA_CM. The "Content Model" is a is a legacy idea, and all "Content Models"
should be (if they haven't already been) moved to the "DS-COMPOSITE-MODEL" datastream.

6.5.6 Datastream
Datastreams are elements of objects that represent content. They may contain metadata about
the object. Each object has a number of default datastreams, notably a Dublin Core Datastream
and a RELS-EXT (Fedora Object-to-Object Relationship Data Datastream. Datastreams can
also contain other useful information, and different types of objects will have different
datasteams; for example, a collection object has a collection policy Datastream, while an
image might contain a thumbnail Datastream.

6.5.7 Datastream ID (DSID)


Version 5
371
Start

6.5.7 Datastream ID (DSID)


The Datastream ID is a unique identifier within the scope of the digital object. So, for example,
an object can only have one Datastream with a DSID of COLLECTION_VIEW, but any other
object can also have a Datastream with the same DSID. See APPENDIX C: Datastream
Reference for more information.

6.5.8 Datastream Label


The Datastream label is a human-readable title given to a Datastream. It does not need to be
unique, but it should be informative enough for a user to understand the purpose of the
Datastream. When you 'view' a Datastream in the Islandora interface, you will see the
Datastream ID of the object.

6.5.9 Drupal (Content Management System)


Drupal is an open source content management system (CMS) written in PHP. Known for being
extremely flexible and extensible, Drupal is supported by a community of over 630,000 users
and developers. Drupal sites can be customized and themed in a wide variety of ways.
Drupal functions as the “front-end” of Islandora.

6.5.10 Drupal Roles


Roles are a way of assigning specific permissions to a group of users. Any user assigned to a
role will have the same permissions as all other users assigned to that role. This allows you to
control which users have permission to view, edit, or delete content in both Drupal and the
Fedora repository.1

6.5.11 Dublin Core


Dublin Core is a metadata standard that provides a small set of text elements through which
most resources can be described and catalogued.

6.5.12 Fedora Commons (Repository Software)


Fedora (Flexible Extensible Digital Object Repository Architecture) is an open source
architecture for storing, managing, and accessing digital content in the form of digital objects.
Fedora defines a set of abstractions for expressing digital objects, asserting relationships
among digital objects, and linking "behaviors" (i.e., services) to digital objects.
The Fedora repository functions as the “back-end” of Islandora; files are stores as objects in the
repository and accessed through the “front-end” (i.e., Drupal).

Version 5
372
Start

6.5.13 Faceted Search


Faceted searching allows users to filter a set of search results using predetermined
classifications. For example, a user might search by title and then have the option to filter those
results by selecting from a list of subjects and collections.
You can use Solr to configure your faceted search options.

6.5.14 FOXML
FOXML (Fedora Object Extensible Markup Language) is a simple XML format that directly
expresses the Fedora Digital Object Model. Digital objects are stored internally in a Fedora
repository in the FOXML format. In addition, FOXML can be used for ingesting and exporting
objects to and from Fedora repositories.
Any Fedora object is represented by a complete FOXML document. For more information,
please see Managing access control with permissions and user roles.

6.5.15 Ingest
To ingest an object is to add an entry for it in the Fedora Repository. This is done primarily
through the Islandora Repository interface in an Islandora site's Drupal front-end. Upon ingest,
an object is created in Fedora, and its associated PID and datastreams are attached to it.
The word 'ingest' is used in repository language because repository software, rather than having
an object and associated components forced upon it, takes in and processes the object itself.
Often, when referring to the process of ingesting objects, Islandora and its associated
documentation use other terms such as 'import' or 'add object'. In such contexts, these terms
generally refer to the ingest process.

6.5.16 Namespace
The namespace is a component of the persistent identifier (namespace:ID). The namespace
is defined in the collection policy, and will then be used to generate PIDs for the objects
ingested into that collection.

6.5.17 Object (Also "Fedora Object")


Everything stored in a Fedora repository is treated as an object. Objects are made up of three
components: a Persistent Identifier (PID), System Properties, and one or more Datastreams.
The generic nature of Fedora’s digital object model allows a wide variety of digital content to be
stored and delivered to users.

Version 5
373
Start

6.5.18 Open Source


Open source describes a method of software development that promotes access to the end
product's source code. Islandora is an open source product with an active development
community, operating under the GPL license (3.0).

6.5.19 Parent-Type Object


A Parent-Type Object is an object that has a relationship with the islandora:collectionCModel
declared in the policy datastream, making it possible for additional objects to have a relationship
with (or be "children" of) that object.

6.5.20 Persistent Identifier (PID)


Every object in a Fedora repository has a unique persistent identifier of the format Namespace:
ID. This identifier is assigned when the object is created, and cannot be changed. The PID can
be user-generated or managed based on information specified in the collection policy.

6.5.21 Relationship (Also “RDF”)


Objects in a Fedora repository are organized using Resource Description Framework (RDF)
statements.These statements define the relationships between objects in the following format:
<subjectFedoraObject> <relationshipProperty> <targetFedoraObject>
These RDF statements can define a number of relationships; for example:
<imageOfMap> <isMemberOf> <myMapCollection>
In this example, the map image belongs to the map collection.

6.5.22 Root Collection


The root collection is the top-level collection in the repository. Out-of-the-box, the root collection
has the PID islandora:root.

6.5.23 Viewer
A "Viewer" is an add-on package that allows a solution pack to embed, display, or playback a
particular object in a web accessible format. Viewers are typically a combination of a Drupal
Library and a Drupal Module. The Drupal Library is the package of code that represents the
player or display mechanism, and the Drupal Module is the code package that allows the Drupal
Library to be accessed from within the Drupal environment.

Version 5
374
Start

6.5.24 Virtual Machine Image


The Virtual Machine Image allows you to mount a fully working version of Islandora on your
local machine as a separate virtual machine.

6.5.25 XML Schema


XML schemas are used to validate XML documents. The XML document is compared to a
particular schema in order to test its validity in a specific context. In Islandora the metadata
schemas are frequently used by XML Forms to create and validate ingest forms.

6.5.26 XSD
And XSD file - which stands for XML Schema Document - contains a set of rules to which an
XML document must conform in order to be considered ‘valid’.
In the Form Builder context, the XSD file defines the schema that you are creating a form for.
Schema's XSD files are usually hosted by the project's website, although you may upload a
schema directly to your server.

6.6 APPENDIX F - GPL LICENSE


Islandora is an open-source software framework. Islandora modules are made available under
the GNU General Public License, Version 3. See the Islandora Foundation information for
contributors for more information about software licenses and contributor agreements.

6.6.1 GNU GENERAL PUBLIC LICENSE


Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. < http://fsf.org/ >
Everyone is permitted to copy and distribute verbatim copies of this license document, but
changing it is not allowed.

Preamble
The GNU General Public License is a free, copyleft license for software and other kinds of
works.

Version 5
375
Start

The licenses for most software and other practical works are designed to take away your
freedom to share and change the works. By contrast, the GNU General Public License is
intended to guarantee your freedom to share and change all versions of a program--to make
sure it remains free software for all its users. We, the Free Software Foundation, use the GNU
General Public License for most of our software; it applies also to any other work released this
way by its authors. You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public
Licenses are designed to make sure that you have the freedom to distribute copies of free
software (and charge for them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new free programs, and that you
know you can do these things.
To protect your rights, we need to prevent others from denying you these rights or asking you to
surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the
software, or if you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must
pass on to the recipients the same freedoms that you received. You must make sure that they,
too, receive or can get the source code. And you must show them these terms so they know
their rights.
Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the
software, and (2) offer you this License giving you legal permission to copy, distribute and/or
modify it.
For the developers' and authors' protection, the GPL clearly explains that there is no warranty
for this free software. For both users' and authors' sake, the GPL requires that modified
versions be marked as changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run modified versions of the
software inside them, although the manufacturer can do so. This is fundamentally incompatible
with the aim of protecting users' freedom to change the software. The systematic pattern of
such abuse occurs in the area of products for individuals to use, which is precisely where it is
most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice
for those products. If such problems arise substantially in other domains, we stand ready to
extend this provision to those domains in future versions of the GPL, as needed to protect the
freedom of users.
Finally, every program is threatened constantly by software patents. States should not allow
patents to restrict development and use of software on general-purpose computers, but in those
that do, we wish to avoid the special danger that patents applied to a free program could make
it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render
the program non-free.

Version 5
376
Start

The precise terms and conditions for copying, distribution and modification follow.

TERMS AND CONDITIONS

0. Definitions.
“This License” refers to version 3 of the GNU General Public License.
“Copyright” also means copyright-like laws that apply to other kinds of works, such as
semiconductor masks.
“The Program” refers to any copyrightable work licensed under this License. Each licensee is
addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.
To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring
copyright permission, other than the making of an exact copy. The resulting work is called a “
modified version” of the earlier work or a work “based on” the earlier work.
A “covered work” means either the unmodified Program or a work based on the Program.
To “propagate” a work means to do anything with it that, without permission, would make you
directly or secondarily liable for infringement under applicable copyright law, except executing it
on a computer or modifying a private copy. Propagation includes copying, distribution (with or
without modification), making available to the public, and in some countries other activities as
well.
To “convey” a work means any kind of propagation that enables other parties to make or
receive copies. Mere interaction with a user through a computer network, with no transfer of a
copy, is not conveying.
An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a
convenient and prominently visible feature that (1) displays an appropriate copyright notice, and
(2) tells the user that there is no warranty for the work (except to the extent that warranties are
provided), that licensees may convey the work under this License, and how to view a copy of
this License. If the interface presents a list of user commands or options, such as a menu, a
prominent item in the list meets this criterion.

1. Source Code.
The “source code” for a work means the preferred form of the work for making modifications to it
. “Object code” means any non-source form of a work.
A “Standard Interface” means an interface that either is an official standard defined by a
recognized standards body, or, in the case of interfaces specified for a particular programming
language, one that is widely used among developers working in that language.

Version 5
377
Start

The “System Libraries” of an executable work include anything, other than the work as a whole,
that (a) is included in the normal form of packaging a Major Component, but which is not part of
that Major Component, and (b) serves only to enable use of the work with that Major
Component, or to implement a Standard Interface for which an implementation is available to
the public in source code form. A “Major Component”, in this context, means a major essential
component (kernel, window system, and so on) of the specific operating system (if any) on
which the executable work runs, or a compiler used to produce the work, or an object code
interpreter used to run it.
The “Corresponding Source” for a work in object code form means all the source code needed
to generate, install, and (for an executable work) run the object code and to modify the work,
including scripts to control those activities. However, it does not include the work's System
Libraries, or general-purpose tools or generally available free programs which are used
unmodified in performing those activities but which are not part of the work. For example,
Corresponding Source includes interface definition files associated with source files for the work
, and the source code for shared libraries and dynamically linked subprograms that the work is
specifically designed to require, such as by intimate data communication or control flow
between those subprograms and other parts of the work.
The Corresponding Source need not include anything that users can regenerate automatically
from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.

2. Basic Permissions.
All rights granted under this License are granted for the term of copyright on the Program, and
are irrevocable provided the stated conditions are met. This License explicitly affirms your
unlimited permission to run the unmodified Program. The output from running a covered work is
covered by this License only if the output, given its content, constitutes a covered work. This
License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey, without conditions so
long as your license otherwise remains in force. You may convey covered works to others for
the sole purpose of having them make modifications exclusively for you, or provide you with
facilities for running those works, provided that you comply with the terms of this License in
conveying all material for which you do not control copyright. Those thus making or running the
covered works for you must do so exclusively on your behalf, under your direction and control,
on terms that prohibit them from making any copies of your copyrighted material outside their
relationship with you.
Conveying under any other circumstances is permitted solely under the conditions stated below.
Sublicensing is not allowed; section 10 makes it unnecessary.

3. Protecting Users' Legal Rights From Anti-Circumvention Law.


Version 5
378
Start

3. Protecting Users' Legal Rights From Anti-Circumvention Law.


No covered work shall be deemed part of an effective technological measure under any
applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20
December 1996, or similar laws prohibiting or restricting circumvention of such measures.
When you convey a covered work, you waive any legal power to forbid circumvention of
technological measures to the extent such circumvention is effected by exercising rights under
this License with respect to the covered work, and you disclaim any intention to limit operation
or modification of the work as a means of enforcing, against the work's users, your or third
parties' legal rights to forbid circumvention of technological measures.

4. Conveying Verbatim Copies.


You may convey verbatim copies of the Program's source code as you receive it, in any
medium, provided that you conspicuously and appropriately publish on each copy an
appropriate copyright notice; keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of
the absence of any warranty; and give all recipients a copy of this License along with the
Program.
You may charge any price or no price for each copy that you convey, and you may offer support
or warranty protection for a fee.

5. Conveying Modified Source Versions.


You may convey a work based on the Program, or the modifications to produce it from the
Program, in the form of source code under the terms of section 4, provided that you also meet
all of these conditions:
a) The work must carry prominent notices stating that you modified it, and giving a
relevant date.
b) The work must carry prominent notices stating that it is released under this License
and any conditions added under section 7. This requirement modifies the requirement in
section 4 to “keep intact all notices”.
c) You must license the entire work, as a whole, under this License to anyone who
comes into possession of a copy. This License will therefore apply, along with any
applicable section 7 additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no permission to license the
work in any other way, but it does not invalidate such permission if you have separately
received it.
d) If the work has interactive user interfaces, each must display Appropriate Legal
Notices; however, if the Program has interactive interfaces that do not display
Appropriate Legal Notices, your work need not make them do so.

Version 5
379
Start

A compilation of a covered work with other separate and independent works, which are not by
their nature extensions of the covered work, and which are not combined with it such as to form
a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate”
if the compilation and its resulting copyright are not used to limit the access or legal rights of the
compilation's users beyond what the individual works permit. Inclusion of a covered work in an
aggregate does not cause this License to apply to the other parts of the aggregate.

6. Conveying Non-Source Forms.


You may convey a covered work in object code form under the terms of sections 4 and 5,
provided that you also convey the machine-readable Corresponding Source under the terms of
this License, in one of these ways:
a) Convey the object code in, or embodied in, a physical product (including a physical
distribution medium), accompanied by the Corresponding Source fixed on a durable
physical medium customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product (including a physical
distribution medium), accompanied by a written offer, valid for at least three years and
valid for as long as you offer spare parts or customer support for that product model, to
give anyone who possesses the object code either (1) a copy of the Corresponding
Source for all the software in the product that is covered by this License, on a durable
physical medium customarily used for software interchange, for a price no more than
your reasonable cost of physically performing this conveying of source, or (2) access to
copy the Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the written offer to provide
the Corresponding Source. This alternative is allowed only occasionally and
noncommercially, and only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated place (gratis or for a
charge), and offer equivalent access to the Corresponding Source in the same way
through the same place at no further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to copy the object code is
a network server, the Corresponding Source may be on a different server (operated by
you or a third party) that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the Corresponding Source.
Regardless of what server hosts the Corresponding Source, you remain obligated to
ensure that it is available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided you inform other
peers where the object code and Corresponding Source of the work are being offered to
the general public at no charge under subsection 6d.

Version 5
380
Start

A separable portion of the object code, whose source code is excluded from the Corresponding
Source as a System Library, need not be included in conveying the object code work.
A “User Product” is either (1) a “consumer product”, which means any tangible personal
property which is normally used for personal, family, or household purposes, or (2) anything
designed or sold for incorporation into a dwelling. In determining whether a product is a
consumer product, doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, “normally used” refers to a typical or common use of that
class of product, regardless of the status of the particular user or of the way in which the
particular user actually uses, or expects or is expected to use, the product. A product is a
consumer product regardless of whether the product has substantial commercial, industrial or
non-consumer uses, unless such uses represent the only significant mode of use of the product.
“Installation Information” for a User Product means any methods, procedures, authorization
keys, or other information required to install and execute modified versions of a covered work in
that User Product from a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object code is in no case
prevented or interfered with solely because modification has been made.
If you convey an object code work under this section in, or with, or specifically for use in, a User
Product, and the conveying occurs as part of a transaction in which the right of possession and
use of the User Product is transferred to the recipient in perpetuity or for a fixed term (
regardless of how the transaction is characterized), the Corresponding Source conveyed under
this section must be accompanied by the Installation Information. But this requirement does not
apply if neither you nor any third party retains the ability to install modified object code on the
User Product (for example, the work has been installed in ROM).
The requirement to provide Installation Information does not include a requirement to continue
to provide support service, warranty, or updates for a work that has been modified or installed
by the recipient, or for the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and adversely affects the
operation of the network or violates the rules and protocols for communication across the
network.
Corresponding Source conveyed, and Installation Information provided, in accord with this
section must be in a format that is publicly documented (and with an implementation available to
the public in source code form), and must require no special password or key for unpacking,
reading or copying.

Version 5
381
Start

7. Additional Terms.
“Additional permissions” are terms that supplement the terms of this License by making
exceptions from one or more of its conditions. Additional permissions that are applicable to the
entire Program shall be treated as though they were included in this License, to the extent that
they are valid under applicable law. If additional permissions apply only to part of the Program,
that part may be used separately under those permissions, but the entire Program remains
governed by this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option remove any additional
permissions from that copy, or from any part of it. (Additional permissions may be written to
require their own removal in certain cases when you modify the work.) You may place additional
permissions on material, added by you to a covered work, for which you have or can give
appropriate copyright permission.
Notwithstanding any other provision of this License, for material you add to a covered work, you
may (if authorized by the copyright holders of that material) supplement the terms of this
License with terms:
a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16
of this License; or
b) Requiring preservation of specified reasonable legal notices or author attributions in
that material or in the Appropriate Legal Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or requiring that modified
versions of such material be marked in reasonable ways as different from the original
version; or
d) Limiting the use for publicity purposes of names of licensors or authors of the material;
or
e) Declining to grant rights under trademark law for use of some trade names,
trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that material by anyone who
conveys the material (or modified versions of it) with contractual assumptions of liability
to the recipient, for any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered “further restrictions” within the meaning
of section 10. If the Program as you received it, or any part of it, contains a notice stating that it
is governed by this License along with a term that is a further restriction, you may remove that
term. If a license document contains a further restriction but permits relicensing or conveying
under this License, you may add to a covered work material governed by the terms of that
license document, provided that the further restriction does not survive such relicensing or
conveying.

Version 5
382
Start

If you add terms to a covered work in accord with this section, you must place, in the relevant
source files, a statement of the additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the form of a separately
written license, or stated as exceptions; the above requirements apply either way.

8. Termination.
You may not propagate or modify a covered work except as expressly provided under this
License. Any attempt otherwise to propagate or modify it is void, and will automatically
terminate your rights under this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your license from a particular copyright
holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder fails to notify you of the
violation by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the
copyright holder notifies you of the violation by some reasonable means, this is the first time you
have received notice of violation of this License (for any work) from that copyright holder, and
you cure the violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who
have received copies or rights from you under this License. If your rights have been terminated
and not permanently reinstated, you do not qualify to receive new licenses for the same material
under section 10.

9. Acceptance Not Required for Having Copies.


You are not required to accept this License in order to receive or run a copy of the Program.
Ancillary propagation of a covered work occurring solely as a consequence of using
peer-to-peer transmission to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or modify any covered work.
These actions infringe copyright if you do not accept this License. Therefore, by modifying or
propagating a covered work, you indicate your acceptance of this License to do so.

10. Automatic Licensing of Downstream Recipients.


Each time you convey a covered work, the recipient automatically receives a license from the
original licensors, to run, modify and propagate that work, subject to this License. You are not
responsible for enforcing compliance by third parties with this License.

Version 5
383
Start

An “entity transaction” is a transaction transferring control of an organization, or substantially all


assets of one, or subdividing an organization, or merging organizations. If propagation of a
covered work results from an entity transaction, each party to that transaction who receives a
copy of the work also receives whatever licenses to the work the party's predecessor in interest
had or could give under the previous paragraph, plus a right to possession of the Corresponding
Source of the work from the predecessor in interest, if the predecessor has it or can get it with
reasonable efforts.
You may not impose any further restrictions on the exercise of the rights granted or affirmed
under this License. For example, you may not impose a license fee, royalty, or other charge for
exercise of rights granted under this License, and you may not initiate litigation (including a
cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making,
using, selling, offering for sale, or importing the Program or any portion of it.

11. Patents.
A “contributor” is a copyright holder who authorizes use under this License of the Program or a
work on which the Program is based. The work thus licensed is called the contributor's “
contributor version”.
A contributor's “essential patent claims” are all patent claims owned or controlled by the
contributor, whether already acquired or hereafter acquired, that would be infringed by some
manner, permitted by this License, of making, using, or selling its contributor version, but do not
include claims that would be infringed only as a consequence of further modification of the
contributor version. For purposes of this definition, “control” includes the right to grant patent
sublicenses in a manner consistent with the requirements of this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the
contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run,
modify and propagate the contents of its contributor version.
In the following three paragraphs, a “patent license” is any express agreement or commitment,
however denominated, not to enforce a patent (such as an express permission to practice a
patent or covenant not to sue for patent infringement). To “grant” such a patent license to a
party means to make such an agreement or commitment not to enforce a patent against the
party.
If you convey a covered work, knowingly relying on a patent license, and the Corresponding
Source of the work is not available for anyone to copy, free of charge and under the terms of
this License, through a publicly available network server or other readily accessible means, then
you must either (1) cause the Corresponding Source to be so available, or (2) arrange to
deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a
manner consistent with the requirements of this License, to extend the patent license to

Version 5
384
Start

downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the
patent license, your conveying the covered work in a country, or your recipient's use of the
covered work in a country, would infringe one or more identifiable patents in that country that
you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or arrangement, you convey, or
propagate by procuring conveyance of, a covered work, and grant a patent license to some of
the parties receiving the covered work authorizing them to use, propagate, modify or convey a
specific copy of the covered work, then the patent license you grant is automatically extended to
all recipients of the covered work and works based on it.
A patent license is “discriminatory” if it does not include within the scope of its coverage,
prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that
are specifically granted under this License. You may not convey a covered work if you are a
party to an arrangement with a third party that is in the business of distributing software, under
which you make payment to the third party based on the extent of your activity of conveying the
work, and under which the third party grants, to any of the parties who would receive the
covered work from you, a discriminatory patent license (a) in connection with copies of the
covered work conveyed by you (or copies made from those copies), or (b) primarily for and in
connection with specific products or compilations that contain the covered work, unless you
entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting any implied license or other
defenses to infringement that may otherwise be available to you under applicable patent law.

12. No Surrender of Others' Freedom.


If conditions are imposed on you (whether by court order, agreement or otherwise) that
contradict the conditions of this License, they do not excuse you from the conditions of this
License. If you cannot convey a covered work so as to satisfy simultaneously your obligations
under this License and any other pertinent obligations, then as a consequence you may not
convey it at all. For example, if you agree to terms that obligate you to collect a royalty for
further conveying from those to whom you convey the Program, the only way you could satisfy
both those terms and this License would be to refrain entirely from conveying the Program.

13. Use with the GNU Affero General Public License.


Notwithstanding any other provision of this License, you have permission to link or combine any
covered work with a work licensed under version 3 of the GNU Affero General Public License
into a single combined work, and to convey the resulting work. The terms of this License will
continue to apply to the part which is the covered work, but the special requirements of the GNU
Affero General Public License, section 13, concerning interaction through a network will apply to
the combination as such.

14. Revised Versions of this License.


Version 5
385
Start

14. Revised Versions of this License.


The Free Software Foundation may publish revised and/or new versions of the GNU General
Public License from time to time. Such new versions will be similar in spirit to the present
version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies that a certain
numbered version of the GNU General Public License “or any later version” applies to it, you
have the option of following the terms and conditions either of that numbered version or of any
later version published by the Free Software Foundation. If the Program does not specify a
version number of the GNU General Public License, you may choose any version ever
published by the Free Software Foundation.
If the Program specifies that a proxy can decide which future versions of the GNU General
Public License can be used, that proxy's public statement of acceptance of a version
permanently authorizes you to choose that version for the Program.
Later license versions may give you additional or different permissions. However, no additional
obligations are imposed on any author or copyright holder as a result of your choosing to follow
a later version.

15. Disclaimer of Warranty.


THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU
ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

16. Limitation of Liability.


IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO
OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY
HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

Version 5
386
Start

17. Interpretation of Sections 15 and 16.


If the disclaimer of warranty and limitation of liability provided above cannot be given local legal
effect according to their terms, reviewing courts shall apply local law that most closely
approximates an absolute waiver of all civil liability in connection with the Program, unless a
warranty or assumption of liability accompanies a copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs


If you develop a new program, and you want it to be of the greatest possible use to the public,
the best way to achieve this is to make it free software which everyone can redistribute and
change under these terms.
To do so, attach the following notices to the program. It is safest to attach them to the start of
each source file to most effectively state the exclusion of warranty; and each file should have at
least the “copyright” line and a pointer to where the full notice is found.

<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>

This program is free software: you can redistribute it and/or modify


it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,


but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short notice like this when it starts in
an interactive mode:

<program> Copyright (C) <year> <name of author>


This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.

Version 5
387
Start

The hypothetical commands `show w' and `show c' should show the appropriate parts of the
General Public License. Of course, your program's commands might be different; for a GUI
interface, you would use an “about box”.
You should also get your employer (if you work as a programmer) or school, if any, to sign a “
copyright disclaimer” for the program, if necessary. For more information on this, and how to
apply and follow the GNU GPL, see < http://www.gnu.org/licenses/ >.
The GNU General Public License does not permit incorporating your program into proprietary
programs. If your program is a subroutine library, you may consider it more useful to permit
linking proprietary applications with the library. If this is what you want to do, use the GNU
Lesser General Public License instead of this License. But first, please read < http://
www.gnu.org/philosophy/why-not-lgpl.html >.

6.7 APPENDIX G - All About Tuque

Please check the original GitHub Working With Fedora Objects Programmatically Via
Tuque reference for updates on these notes.:
https://github.com/Islandora/islandora/wiki/
Working-With-Fedora-Objects-Programmatically-Via-Tuque

Islandora introduces support for a Fedora repository to be connected to and manipulated using
the Tuque PHP library. This library can be accessed using functions included with Islandora,
available inside a properly-bootstrapped Drupal environment. It can also be accessed directly
outside of an Islandora environment.
Tuque is an API, written and accessible via PHP, that connects with a Fedora repository and
mirrors its functionality. Tuque can be used to work with objects inside a Fedora repository,
accessing their properties, manipulating them, and working with datastreams.
This guide will highlight methods of working with Fedora and Fedora objects using Tuque both
by itself and from a Drupal environment.
Tuque download
milestone 4 - Installing The "Tuque" library

6.7.1 Variables repeated often in this guide


From here on out, we're going to be repeating the use of a few specific PHP variables after the
guide demonstrates how they are instantiated or constructed:

Version 5
388
Start

Variable PHP Class Description

$repository FedoraRepository A PHP object representation of the Fedora repository


itself.

$object FedoraObject A generic Fedora object.

$datastream FedoraDatastream A generic Fedora object datastream.

6.7.2

6.7.3 Accessing the Fedora Repository

Connecting to Fedora

Tuque or Islandora

$connection = new RepositoryConnection($fedora_url, $username, $


password)

Islandora Only (via module)

$connection = islandora_get_tuque_connection($user)

Accessing the repository

Tuque or Islandora

/**
* Assuming our $connection has been instantiated as a new
RepositoryConnection object.
*/
$api = new FedoraApi($connection);
$repository = new FedoraRepository($api, new simpleCache(););

Islandora only, manually, using the Islandora Tuque wrapper:

Version 5
389
Start

/**
* Assuming our $connection has been instantiated as a new
RepositoryConnection object.
*/
module_load_include('inc', 'islandora', 'includes/tuque');
module_load_include('inc', 'islandora', 'includes/tuque_wrapper');
$api = new IslandoraFedoraApi($connection);
$repository = new IslandoraFedoraRepository($api, new SimpleCache(
));

Islandora only, automatically, using the Islandora module:

/**
* Assuming $connection has been created via
islandora_get_tuque_connection().
*/
$repository = $connection->repository;

Islandora only, using the IslandoraFedoraObject wrapper:

/**
* This method tends to be the most reliable when working with a
single object,
* since it builds on the success of the attempt to load that
object.
*/
$pid = 'object:pid';
$object = islandora_object_load($pid);
if ($object) {
$repository = $object->repository;
}

From here, all Fedora repository functionality supported by Tuque is available to you through $
repository. This functionality is described in the rest of this document.

As of Islandora 7.x, there is a wrapper object, IslandoraFedoraObject, that handles some


errors and fires some hooks in includes/tuque.inc. More error handling is available if one uses
the wrapper functions in islandora.module.

Version 5
390
Start

6.7.4 Working with existing objects

Loading an object

Method Code On Success

Tuque or Islandora, from a $object = $this-> Returns aFedoraObject


FedoraRepository repository-> loaded from the given $pid.
getObject($pid);

Islandora only, from an $object = $this-> Returns an


IslandoraFedoraRepository repository-> IslandoraFedoraObject
getObject($pid); loaded from the given$pid.

Islandora only, using the module $object = Returns an


itself islandora_object_load IslandoraFedoraObject
($pid); loaded from the given$pid.

Because the third method returns FALSE on failure, you can check if the object loaded correctly
using !$object, e.g.:

$object = islandora_object_load($pid);
if (!$object) {
/**
* Logic for object load failure would go here.
*/
return;
}
/**
* Logic for object load success would continue through the rest
of the method here.
*/

In the case of the other two methods, try to load the object and catch the load failure
exception, e.g.:

try {
$object = $this->repository->getObject($pid);
}
catch (Exception $e) {

Version 5
391
Start

/**
* Logic for object load failure would go here.
*/
}
/**
* Logic for object load success would continue through the rest
of the method here.
*/

Objects loaded via Tuque (either through Islandora or directly) have the following properties and
can be manipulated using the following methods:

Properties

Name Type Description

createdDate FedoraDate The object's date of creation.

forceUpdate bool Whether or not Tuque should respect Fedora


object locking on this object (FALSE to uphold
locking). Defaults to FALSE.

id string The PID of the object. When constructing a


new object, this can also be set to a
namespace instead, to simply use the next
available ID for that namespace.

label string The object's label.

lastModifiedDate FedoraDate When the object was last modified.

logMessage string The log message associated with the creation


of the object in Fedora.

models array An array of content model PIDs (e.g. 'islandora


:collectionCModel') applied to the object.

owner string The object's owner.

relationships FedoraRelsExt

Version 5
392
Start

Name Type Description

A FedoraRelsExt object allowing for working


with the object's relationship metadata. This is
described in another section below.

repository FedoraRepository The FedoraRepository object this particular


object was loaded from. This functions
precisely the same as the $repository
created in the "Accessing the repository"
section above.

state string The object's state (A/I/D).

Methods

Name Description Parameters Return Value

constructDatastream Constructs an empty $id - the PID of the An empty


($id, $ datastream. Note that this object; $ AbstractDatastrea
control_group) does not ingest a control_group- the object from the given
datastream into the object, Fedora control group the information.
but merely instantiates one datastream will belong to,
as an whether Inline (X)ML, (M)
AbstractDatastream anaged Content, (R)
object. Ingesting is done edirect, or (E)xternal
viaingestDatastream( Referenced. Defaults to '
), described below. M'.

count() The number of None The number of


datastreams this object datastreams, as anint
contains.

delete() Sets the object's state to ' None None


D' (deleted).

getDatastream($ Gets a datastream from $dsid - the datastream An


dsid) the object based on its identifier for the AbstractDatastrea
DSID. $object-> datastream to be loaded. objeect representing th

Version 5
393
Start

Name Description Parameters Return Value

getDatastream($dsid datastream that was


)works effectively the gotten, orFALSE on
same as$object[$dsid failure.
].

getParents() Gets the IDs of the object's None An array of PIDs of


parents using its parent objects.
isMemberOfCollection
and isMemberOf
relationships.

ingestDatastream(&$ Takes a constructed Technically takes$ A FedoraDatastream


abstract_datastream datastream, with the abstract_datastream object representing the
) properties you've given it, as a parameter, but this object that was just
and ingests it into the should be passed to it by ingested.
object. This should be the reference after
last thing you do when constructing a
creating a new datastream datastream with
. constructDatastream
().

purgeDatastream($ Purges the datastream $dsid - The datastream TRUE on success,


dsid) identified by the given identifier of the object. FALSE on failure.
DSID.

refresh() Clears the object cache so None None


that fresh information can
be requested from Fedora.

Purging an object
A loaded object can be purged from the repository using:

$repository->purgeObject($object);

Version 5
394
Start

6.7.5 Working with datastreams


Datastreams can be accessed from a loaded object like so:

Tuque or Islandora

$datastream = $object['DSID'];

Islandora Only

$datastream = islandora_datastream_load($dsid, $object);

where $dsid is the datastream identifier as a string, and $object is either an object PID or
a loaded Fedora object.
This loads the datastream as a FedoraDatastream object. From there, it can be manipulated
using the following properties and methods:where $dsid is the datastream identifier as a
string, and $object is a loaded Fedora object.

Properties

Name Type Description

checksum string The datastream's base64-encoded checksum


.

checksumType string The type of checksum for this datastream,


either DISABLED, MD5, SHA-1, SHA-256,
SHA-384, SHA-512. Defaults to DISABLED.

content string The binary content of the datastream, as a


string. Can be used to set the content directly
if it is an (I)nternal or (M)anaged datastream.

controlGroup string The control group for this datastream ,


whether Inline (X)ML, (M)anaged Content, (R
)edirect, or (E)xternal Referenced..

createdDate FedoraDate The date the datastream was created.

Version 5
395
Start

Name Type Description

forceUpdate bool Whether or not Tuque should respect Fedora


object locking on this datastream (FALSE to
uphold locking). Defaults toFALSE.

format string The format URI of the datastream, if it has


one. This is rarely used, but does apply to
RELS-EXT.

id string The datastream identifier.

label string The datastream label.

location string A combination of the object ID, the DSID, and


the DSID version ID.

logMessage string The log message associated with actions in


the Fedora audit datastream.

mimetype string The datastream's mimetype.

parent AbstractFedoraObject The object that the datastream was loaded


from.

relationships FedoraRelsInt The relationships that datastream holds


internally within the object.

repository FedoraRepository The FedoraRepository object this


particular datastream was loaded from. This
functions precisely the same as the$
repository created in the "Accessing the
repository" section above.

size int The size of the datastream, in bytes. This is


only available to ingested datastreams, not
ones that have been constructed as objects
but are yet to be ingested.

Version 5
396
Start

Name Type Description

state string The state of the datastream (A/I/D).

url string The URL of the datastream, if it is a (R)


edirected or (E)xternally-referrenced
datastream.

versionable bool Whether or not the datastream is versionable


.

Methods

Name Description Parameters Return Value

count() The number of revisions in the None An int


datastream's history. representing the
number of
revisions in the
datastream
history.

getContent() Returns the binary content of None A string


the datastream. representing the
contents of the
datastream.

refresh() Clears the object cache so that None None


fresh information can be
requested from Fedora.

setContentFromFile( Sets the content of a $path - the None


$path) datastream from the contents path to the
of a local file. file to be
used.

setContentFromString Sets the content of a None


($string) datastream from astring.

Version 5
397
Start

Name Description Parameters Return Value

$string -
the string to
set the
content
from.

setContentFromUrl($ Attempts to set the content of $url - the None


url) a datastream from content URL to grab
downloaded using a standatd the data
HTTP request (NOT HTTPS). from.

Iterating over all of an object's datastreams


Since they exist on an object as an array, datastreams can be iterated over using standard
array iteration methods, e.g.:

foreach ($object as $datastream) {


strtoupper($datastream->id);
$datastream->label = "new label";
$datastream_content = $datastream->getContent();
}

Example of creating or updating a datastream

$dsid = 'DSID';
// Before we do anything, check if the datastream exists. If it
does, load it; otherwise construct it.
// The easiest way to do this, as opposed to a string of cases or
if/then/elses, is the ternary operator, e.g.
// $variable = isThisThingTrueOrFalse($thing) ? setToThisIfTrue()
: setToThisIfFalse();
$datastream = isset($object[$dsid]) ? $object[$dsid] : $object->
constructDatastream($dsid);
$datastream->label = 'Datastream Label';
$datastream->mimeType = 'datastream/mimetype';
$datastream->setContentFromFile('path/to/file');
// There's no harm in doing this if the datastream is already
ingested or if the object is only constructed.
$object->ingestDatastream($datastream);

Version 5
398
Start

// If the object IS only constructed, ingesting it here also


ingests the datastream.
$repository->ingestObject($object);

6.7.6 Creating new objects and datastreams


When using Tuque, Fedora objects and datastreams must first be constructed as PHP objects
before being ingested into Fedora. Un-ingested, PHP-constructed Fedora objects and
datastreams function nearly identically to their ingested counterparts, as far as Tuque is
concerned, with only a few exceptions noted in the properties and methods tables below.

Constructing and ingesting an object

Constructing and ingesting an object

$object = $repository->constructObject($pid); // $pid may also be


a namespace.
/**
* Here, you can manipulate the constructed object using the
properties and methods described above.
*/
$repository->ingestObject($object);

Constructing and ingesting a datastream

$datastream = $object->constructDatastream($dsid) // You may also


set the $control_group.
/**
* Here, you can manipulate the constructed datastream using the
properties and methods described above.
*/
$object->ingestDatastream($dsid, $object);

6.7.7 Accessing an object's relationships


Once an object is loaded, its relationships can be accessed via the object's relationships
property:

$relationships = $object->relationships;

Version 5
399
Start

From there, the object's relationships can be viewed and manipulated using the following
properties and methods:

Properties

Name Type Description

autoCommit bool Whether or not changes to the RELS should


be automatically committed. WARNING:
Probably don't touch this if you're not
absolutely sure what you're doing.

datastream AbstractFedoraDatastream The datastream that this relationship is


manipulating, if any.

Methods

Name Description Parameters Return


Value

add($predicate_uri Adds a $predicate_uri - the namespace None


, $predicate, $ relationship of the relationship predicate (if this
object, $type) to the object. is to be added via XML, use the
registerNamespace()function
described below first);$predicate
- the predicate tag to be added; $
object - the object to add the
relationship to (not required if this is
called using$object->
relationships->add()); $type
- the type of the attribute to add (
defaults toRELS_TYPE_URI).

changeObjectID($id Changes the $id - the new ID to use. None


) ID
referenced in
therdf:
about
attribute.

Version 5
400
Start

Name Description Parameters Return


Value

commitRelationships Forces the $set_auto_commit - determines None


($set_auto_commit) committal of the state of autoCommit after this
any method is run (defaults to TRUE).
relationships
cached while
the
autoCommit
property was
set toFALSE
(or for
whatever
other reason)
.

get($predicate_uri Queries an $predicate_uri - the URI to use The


, $predicate, $ object's as the namespace predicate, or relationships
object, $type) relationships NULLfor any predicate (defaults to as anarray
based on the NULL);$predicate - the predicate . See the
parameters tag to filter by, or 'NULL' for any tag note below
given. See (defaults toNULL); $object - the for an
below for an object to filter the relationship by ( example.
example of not required if this is called using$
filtering object->relationships->get
relationships ()); $type - what type
using
RELS_TYPE_XXXattribute the
parameters.
retrieved should be (defaults to
RELS_TYPE_URI).

registerNamespace($ Registers a $alias - the namespace alias;$ None


alias, $uri) namespace uri - the URI to associate with that
to be used alias.
by predicate
URIs.

None

Version 5
401
Start

Name Description Parameters Return


Value

remove($ Removes a $predicate_uri - the namespace


predicate_uri, $ relationship of the relationship predicate to be
predicate, $object from the removed, or NULL to ignore (
, $type) object. defaults toNULL); $predicate -
the predicate tag to filter removed
results by. or NULL to remove all (
defaults to NULL); $object - the
object to add the relationship to (not
required if this is called using$
object->relationships->
remove()); $type - what type
RELS_TYPE_XXXattribute the
removed should be (defaults to
RELS_TYPE_URI).

Example of retrieving a filtered relationship

$object_content_models = $object->relationships->get('info:fedora/
fedora-system:def/model#', 'hasModel');

This would return an array containing only the object's hasModel relationships.

Example of setting an isMemberOfCollection relationship


Islandora provides the constant FEDORA_RELS_EXT_URI to make it easy to set the predicate
as the first variable here:

Example of a retrieved relationship array

Array
(
[0] => Array
(
[predicate] => Array
(
[value] => isMemberOfCollection

Version 5
402
Start

[alias] => fedora


[namespace] => info:fedora/fedora-system:def/
relations-external#
)
[object] => Array
(
[literal] => FALSE
[value] => islandora:sp_basic_image_collection
)
)
[1] => Array
(
[predicate] => Array
(
[value] => hasModel
[alias] => fedora-model
[namespace] => info:fedora/fedora-system:def/
model#
)
[object] => Array
(
[literal] => FALSE
[value] => islandora:sp_basic_image
)
)
)

6.7.8 Using the Fedora A and M APIs


Tuque can work with the Fedora repository's "Access" and "Manage" API services in much the
same way one would using standard Fedora API requests. This functionality is mimicked using
an instantiated $repository's api property.

Note that the methods above provide a much more PHP-friendly way of performing many of the
tasks provided by API-A and API-M. They are nonetheless listed in full below for documentation
purposes. When a method in this section and a method above share functionality, it is always
recommended to use the method above, as not only is it nearly guaranteed to be easier to work
with, but also we cannot predict the nature of the Fedora APIs in the future; if any Fedora
functionality changes or is removed, your code may also lose functionality. For example:

/**
* Adding a relationship to an object. The API method is clunky
and requires information you wouldn't

Version 5
403
Start

* need if you did things the tuque way, which is more


Drupal-friendly as well.
*/
// API method.
$repository->api->m->addRelationship();
// Tuque method.
$object->relationships->add();
/**
* Iterating through datastreams. The API method only gives you an
associative array of DSIDs
* containing the label and mimetype - you would have to load each
datastream if you wanted to
* work with it. Working through tuque is faster.
*/
// API method.
$array = $repository->api->a->listDatastreams($object->id);
foreach ($array as $dsid => $properties) {
$datastream = islandora_datastream_load($dsid, $object);
// Now you can do stuff with the datastream.
}
// Tuque method.
foreach ($object as $datastream) {
// Do stuff with the datastream.
}

Documentation for the most current versions of each API can be found at:
https://wiki.duraspace.org/display/FEDORA37/API-A
https://wiki.duraspace.org/display/FEDORA37/API-M
https://wiki.duraspace.org/display/FEDORA38/API-A
https://wiki.duraspace.org/display/FEDORA38/API-M
Each API exists as a PHP object through Tuque, and can be created using:

$api_a = $repository->api->a; // For an Access API.


$api_m = $repository->api->m; // For a Management API.

From here, the functionality provided by each API mimics the functionality provided by the
actual Fedora APIs, where the standard Fedora endpoints can be called as API object methods,
e.g.:

$datastreams = $api_a->listDatastreams('islandora:1');

The following methods are available for each type of API:

Version 5
404
Start

FedoraApiA
All of these return results described in an array.

Method Description

describeRepository() Returns repository information.

findObjects($type, $query, $max_results Finds objects based on the input


, $display_fields) parameters.

getDatastreamDissemination($pid, $dsid, Gets the content of a datastream.


$as_of_date_time, $file)

getDissemination($pid, $sdef_pid, $ Gets a dissemination based on the


method, $method_parameters) provided method.

getObjectHistory($pid) Gets the history of the specified object.

getObjectProfile($pid, $as_of_date_time Gets the Fedora profile of an object.


)

listDatastreams($pid, $as_of_date_time) Lists an object's datastreams.

listMethods($pid, $sdef_pid, $ Lists the methods that an object can


as_of_date_time) use for dissemination.

resumeFindObjects($session_token) Resumes a findObjects() call that


returned a resumption token.

userAttributes() Authenticates and provides


information about a user's Fedora
attributes.

FedoraApiM
All of these return results described in an array.

Version 5
405
Start

Method Description

addDatastream($pid, $dsid, $type, $ Adds a datastream to the object specified.


file, $params)

addRelationship($pid, $relationship Adds a relationship to the object specified.


, $is_literal, $datatype)

export($pid, $params) Exports information about an object.

getDatastream($pid, $dsid, $params) Returns information about the specified


datastream.

getDatastreamHistory($pid, $dsid) Returns the datastream's history


information.

getNextPid($namespace, $numpids) Gets a new, unused PID, incrementing


Fedora's PID counter for that namespace.

getObjectXml($pid) Returns the object's FOXML.

getRelationships($pid, $ Returns the object's relationships.


relationship)

ingest($params) Ingests an object.

modifyDatastream($pid, $dsid, $ Makes specified modifications to an


params) object's datastream.

modifyObject($pid, $params) Makes specified modifications to an object.

purgeDatastream($pid, $dsid, $ Purges the specified datastream.


params)

purgeObject($pid, $log_message) Purges the specified object.

upload($file) Uploads a file to the server.

Validates an object.

Version 5
406
Start

Method Description

validate($pid, $as_of_date_time)

6.7.9 Using the Resource Index


The resource index can be queried from the repository using:

$ri = $repository->ri;

From there, queries can be made to the resource index. It is generally best to use SPARQL
queries for forwards compatibility:

$itql_query_results = $ri->itqlQuery($query, $limit); // For an


iTQL query.
$sparql_query_results = $ri->sparqlQuery($query, $limit); // For a
SPARQL query.

Methods

Method Description Parameters Return


Value

itqlQuery( Executes an $query - a stringcontaining the query An array


$query, $ iTQL query to parameters; $limit - an int representing the containing
limit) the resource number of hits to return (defaults to -1 for query
index. unlimited). results.

sparqlQuery Executes a $query - a stringcontaining the query An array


($query, $ SparQL query parameters; $limit - an int representing the containing
limit) to the number of hits to return (defaults to -1 for query
resource index unlimited). results.
.

6.8 APPENDIX H - Git Workflow and Tips


The following is one Islandora developer's workflow for dealing with Islandora commits in git.

Version 5
407
Start

6.8.1 Workflow
You may wish to make sure your 6.x/7.x/master branch always tracks the main Islandora
repository; they may be a few commits behind (someone committed code in the interim) but it's
never different. If you never have commits in your 6.x/7.x/master branches that are not already
present in the Islandora repository, you will avoid merge problems and keep from committing
code that you don't want to commit.
When you want to create a new feature or fix a bug, create a topic branch like so:
First checkout your master branch.

git checkout 7.x

Then update it so you know you're running the latest code that is available in the public
islandora/discoverygarden repository.

git update

The git update is a custom alias created by Nigel Banks. It basically grabs the latest for the
current branch from the remote upstream then pushes those changes into the remote origin. In
this way your upstream remote is always the public canonical Islandora repository, and your
remote origin is your personal repository on Github.
It expands into this:

git pull upstream 7.x && git push origin 7.x

So now that your master branch has the latest code, you create your topic branch:

git checkout -b 7.x-fixes-some-bug

Now you do whatever work is required.


If some other issue pops up, you can create another topic branch to deal with it separately. First
switch to your master branch:

git checkout 7.x


git update
git checkout -b 7.x-fixes-some-different-bug

Version 5
408
Start

You can do this with any number of topic branches, and send pull requests for each of them
individually, or after working on several separate topic branches you may want to make them
into a single branch. This can be done with rebases/merges:

git checkout 7.x-fixes-some-bug


git merge 7.x-fixes-some-different-bug or git rebase 7.
x-fixes-some-different-bug

When you're ready with your changes you can push my topic branch to your personal remote,
then issue a pull request.

git push -u origin 7.x-fixes-some-bug

Cherry-Picking Commits
The following example takes a code contribution from a member of the Islandora community
and cherry-picks commits into a separate pull request:

git remote add rosiel git://github.com/rosiel/


islandora_xml_forms.git
git fetch rosier

You need to find out the commit hashes, so you can look at the user's history:

git log rosiel/7.x

Which returns:

commit 120075920a631339719728dd793dfb686e795ca5
Author: Rosemary Le Faive
Date: Tue Apr 23 17:37:02 2013 -0400
Insert missing ['#autocomplete_path'] element
commit d6e0b46564f541e3bcea5ad44099d566fe9bfc50
Author: Rosemary Le Faive
Date: Tue Apr 23 17:27:15 2013 -0400
Tag elements autocomplete.

Version 5
409
Start

…..

With this information you can then cherry-pick the two commits.
Before doing so, create a topic branch (So your local 7.x will still always track against your
islandora 7.x)

git checkout -b 7.x-rosiel-tag-autocomplete

At this point your topic branch is the same as your 7.x branch which is the same as the
islandora/7.x branch.

git cherry-pick d6e0b46564f541e3bcea5ad44099d566fe9bfc50


git cherry-pick 120075920a631339719728dd793dfb686e795ca5

Now that your topic branch has your two commits, you now push my whole topic branch to my
personal Github repository.
You can use the custom alias "remote-branch" which is defined in Nigel's configuration gist
below.

git remote-branch

Which is equivelent to:

git push -u origin 7.x-rosiel-tag-autocomplete

Then go onto Github and trigger issue the pull request.

Resources
Free Book on using Git:
A free Pro Git book can be found here: http://git-scm.com/book
Custom Git Aliases:
Also checkout some custom git aliases from Nigel Banks to save you some time: https://
gist.github.com/nigelgbanks/5116805

Version 5
410
Start

6.9 APPENDIX X - Bibliography


6.9.1 Journal Articles and Published Conference Proceedings
Adewumi, A., Ikhu-Omoregbe, N. (2011). Institutional Repositories: Features,
Architecture, Design and Implementation Technologies. Journal of Computing".
Cohen, A., Vincent, C., Moses, D., Fujinaga, I., Lefford,N., Leonard, T., and Tzanatakis,
G. A digital library to advance interdisciplinary research in singing. POMA 19, 035079 (
2013), DOI:10.1121/1.4801078
Crowston, K. and Qin, J. (2011). A Capability Maturity Model for Scientific Data
Management: Evidence from the Literature. "Proceedings of the American Society for
Information Science and Technology", 48(1), 1–9. doi:10.1002/meet.2011.14504801036
Gourley, D., & Viterbo, P. (2010). A Sustainable Repository Infrastructure for Digital
Humanities: The DHO Experience. In M. Ioannides, D. Fellner, A. Georgopoulos, & D.
Hadjimitsis (Eds.), Digital Heritage, Lecture Notes in Computer Science (Vol. 6436, pp.
473–481). Springer Berlin / Heidelberg.
King, James. (2010). Building the Pandemic Influenza Digital Archive (PIDA) at the
National Institutes of Health Library. Jefferson Digital Commons.
MacDonald, J. and Yule, D. (2012) Jarrow, Electronic Thesis, and Dissertation Software.
The Code4Lib Journal
Mercer, H., Koenig, J., McGeachin, R. B., & Tucker, S. L. (2011). Structure, Features,
and Faculty Content in ARL Member Repositories. Journal of Academic Librarianship, 37
(4), 333–342.
Moore, R. W., Rajasekar, A., Wan, M. (2010). IRODS policy sets as standards for
preservation. Roadmap for Digital Preservation Interoperability Framework Workshop,
US-DPIF'10. (December 01, 2010). Acm International Conference Proceeding Series.
Morton-Owens, E. G., Hanson, K. L., & Walls, I. (2011). Implementing Open-Source
Software for Three Core Library Functions: A Stage-by-Stage Comparison. Journal of
Electronic Resources in Medical Libraries, 8(1), 1–14. doi:10.1080/
15424065.2011.551486
Moses, D. & Stapelfeldt, K. (2013, July 15). Renewing UPEI’s Institutional Repository:
New features for an Islandora-based environment. Code4Lib Journal. http://
journal.code4lib.org/articles/8763
Paiva, T. S. B., Mello, C. A., Soares, S., & Lima, M. G. Prohist: A Digital Library For
Image Processing of Historical Documents.

Version 5
411
Start

Pan, J., Lenhardt, C., Wilson, B., Palanisamy, G., Cook, R., & Shrestha, B. (2011).
Geoscience data curation using a digital object model and open-source frameworks:
Provenance applications. Geoscience and Remote Sensing Symposium (IGARSS), 2011
IEEE International (pp. 3815 –3818). doi:10.1109/IGARSS.2011.6050062

Sefton, P., & Dickinson, D. (2011). Repositories post 2010: embracing heterogeneity in
AWE, the Academic Working Environment. Journal of Digital Information, 12(2).
Stapelfeldt, K. & Moses, D. (2013). Islandora and TEI: Current and Emerging
Applications/Approaches, Journal of the Text Encoding Initiative, 5. doi:10.4000/jtei.790
Stuart, D., Aitken, B., Abbott, D., Chassanoff, A., Hedges, M., & McHugh, A. (2011).
Content Models for Enhancement and Sustainability: Creating a Generic Framework for
Digital Resources in the Arts and Humanities. In E. García-Barriocanal, Z. Cebeci, M. C.
Okur, & A. Öztürk (Eds.), Metadata and Semantic Research, Communications in
Computer and Information Science (Vol. 240, pp. 234–244). Springer Berlin Heidelberg.
Thompson, J., Bainbridge, D., & Suleman, H. (2011). Towards Very Large Scale Digital
Library Building in Greenstone Using Parallel Processing. In C. Xing, F. Crestani, & A.
Rauber (Eds.), Digital Libraries: For Cultural Heritage, Knowledge Dissemination, and
Future Creation, Lecture Notes in Computer Science (Vol. 7008, pp. 331–340). Springer
Berlin / Heidelberg.
Viterbo, P. B., & Gourley, D. (2010). Digital humanities and digital repositories:
sustainable technology for sustainable communications. Proceedings of the 28th ACM
International Conference on Design of Communication, SIGDOC ’10 (pp. 109–114). New
York, NY, USA: ACM. doi:10.1145/1878450.1878469
Walters, T. O. (2009). Data Curation Program Development in U.S. Universities: The
Georgia Institute of Technology Example. International Journal of Digital Curation, 4(3),
83–92. doi:10.2218/ijdc.v4i3.116
Westra, B., Ramirez, M., Parham, S. W., & Scaramozzino, J. M. (2010). Science and
Technology Resources on the Internet. Issues in Science and Technology Librarianship,
63.
Wolski, M., Simons, N. and Richardson, J. (2013) ECMs and Institutional Repositories.
The Case for a Unified Enterprise Approach to Content Management. In: THETA: The
Higher Education Technology Agenda 2013 , 7-10 April 2013, Hobart, Tasmania. (
Unpublished)

6.9.2 Theses, Dissertations, and Coursework


Ishida, M. (2011). Data management in the United States and Canada : academic
libraries’ contribution. University of British Columbia, Graduate paper, 2011 Summer
Term 1, LIBR 559L School of Library, Archival and Information Studies (SLAIS) .

Version 5
412
Start

Lopes, Luis Filipe Vieira da Silva. (2010). A Metadata Model for The Annotation Of
Epidemiological Data. Masters Thesis (Dissertation). DOI: http://hdl.handle.net/10455/
6698

6.9.3 Presentations
Georgiev, A., & Grigorov, A. (2010, December 21). Developing a digital repository
infrastructure for sharing digital resources in the teaching education community - Case
Study. ShareTEC project to The Fedora UK and Ireland User Group met at the London
School of Economics and Political Science (the LSE).
Humphrey, C. (2010). Bridging data repositories University of Alberta. SPARC Digital
Repositories.
Leggott, M. (2009). Islandora: a Drupal/Fedora Repository System. 4th International
Conference on Open Repositories.
Zhang, Q. Ishida M. (2011). Research Data Management in Academic Libraries.
Unlocking Knowledge Through Open Access.

6.9.4 Other
Banach Bergin, M. (2013). Summary of Survey Results on Digital Preservation Practices
at 148 Institutions. Unpublished Sabbatical Report, University of Massachusetts, Amherst
.
Birello, G., Fucile, I., Giovanetti, V., & Perin, A. (2013). Digital preservation: an open
source architecture. Qualitative and Quantitative Methods in Libraries Conference, June
2013, Rome, Italy. (Poster)
Birello, G., Fucile, I., Giovanetti, V., & Perin, A. (2014). DigiBESS: an open-source
repository for sharing digital preservation The reuse of digital cultural content in
education, tourism and leisure, October 2014, Rome, Italy. (Poster)
Courtney, N. D. (2010). More Technology for the Rest of Us: A Second Primer on
Computing for the Non-IT Librarian. ABC-CLIO.
Salo, Dorothea. (2010). Retooling libraries for the data challenge.
Shearer, K. and Argáez, D. (2010) Addressing the Research Data Gap: A Review of
Novel Services for Libraries. Canadian Association of Research Libraries (CARL).
Walters, T., Skinner, K. (2011). New Roles for New times: Digital Curation for
Preservation. Report Prepared for the Association of Research Libraries.

Version 5
413

S-ar putea să vă placă și