Hydra Stack - The Hierarchy of Promises

Contents

What goes into a Well Designed Software Stack?

A well designed stack: Pragmatic, Reusable and Specific from the bottom up.

Separation of Concerns:

Each component in the stack should only be concerned with pragmatically fulfilling its functionality in the best possible way. This increases your options for re-using the components in unexpected ways and for replacing a component with minimal overhead.

Best of Breed:

Assemble a full stack of components that are each the best option for the tasks they fulfill.

From the Bottom Up:

The rest of this page describes the Hydra stack bottom-up from the low-level storage to the search and discovery interface.

Persistence Layer

File System

Promises:

  • A place to store files
  • Interchangeable with any filesystem or filesystem emulator (e.g. iRODS)

Fedora: Digital Repository as Web Service

  • Abstraction layer on top of File System
  • Data Model (LDP)
  • REST API
  • Repository-level security
  • Versioning
  • Preservation support & object history

Promises:

  • If you pass content or metadata to Fedora via the Fedora APIs, they will be persisted
  • You can retrieve content and metadata from Fedora using its APIs and unique, persistent identifiers
  • If you provide security policies, Fedora will enforce those policies (WebACL)
  • Fedora will send messages about interactions, allowing you to maintain a secondary index.

Triplestore (optional)

An RDF-based graph of Fedora object relationships.

SQL Database (minimally relevant)

Fedora may use a SQL database to store metadata with certain persistence backends, such as Modeshape.

Solr: Flexible, Faceted, Scalable Full Text Search Index

Flexible, Scalable full-text search index with support for facets.

Promises:

  • If you populate the Solr index, you can perform complex faceted search queries
  • You can configure your indexes in many ways to optimize for specialized searches
  • You can include full text information in your search indexes and inspect that information when evaluating queries

SolrWrapper & FcrepoWrapper (optional)

SolrWrapper and FedoraWrapper are provided as convenient command line interfaces for launching Solr and Fedora.

Application Layer

LDP

Client API for consuming Fedora’s REST API via Ruby.

Promises:

  • Ruby API methods for consuming any/all of Fedora’s LDP API methods
  • You can include LDP into your applications as a Ruby Gem (one line)

ActiveFedora: ActiveModel Pattern for Fedora

ActiveFedora is a Ruby gem that applies the ActiveModel pattern to working with Fedora objects. It also uses a "convention over configuration" approach to applying best practices for working with Fedora and digital repositories.

Promises:

  • You can use ActiveModel syntax to model and CRUD Fedora content
  • You can use OM to tell ActiveFedora how to CRUD your XML metadata
  • You can use ActiveFedora’s ActiveFedora::Base class to tell ActiveFedora how to CRUD RDF metadata
  • You can tell ActiveFedora where to find Fedora and Solr by putting information into your application’s fedora.yml and solr.yml files
  • The ActiveFedora API methods will work as described, allowing you fine-grained access to trigger, manage, or override various parts of the Fedora & Solr CRUD operations
  • You can override most of the API methods in your own applications
  • You can include ActiveFedora into your applications as a Ruby Gem (one line)

OM (Opinionated Metadata): DSL for XML Metadata

Promises:

  • You can use the OM syntax to create a custom vocabulary for referring to fields (a DSL) to CRUD XML metadata
  • The OM API methods allow you fine-grained access to trigger, manage, or override various parts of the XML CRUD operations
  • You can override most of the API methods in your own applications
  • You can include OM into your applications as a Ruby Gem (one line)

Solrizer

Basic API Interface: Connect, Index Object, Index All, Create Document
Solr Field name Mapper
TerminologyBasedSolrizer - provides a “to_solr” method for OM documents

Promises:

  • There is an API Interface that system-specific implementations will conform to
  • The Solrizer API methods allow you to generate Solr fields based on configured mappings and to convert XML files into Solr documents based on OM terminologies
  • You can trigger any Solrizer implementation using Solrizer API interface or rake tasks
  • You can include Solrizer into your applications as a Ruby Gem (one line)


Rails Layer

Ruby on Rails

Not a Hydra component, but central to creation of Hydra Heads.

Promises:

  • If you use Ruby on Rails, you will be more productive, your applications will be awesome, and your developers will be happier

Blacklight Rails Plugin

Blacklight allows you to rapidly build and customize rich, faceted search & discovery interfaces for arbitrary content. Originally developed as an Open Public Access Catalog (OPAC) for Library MARC records, it is now used across many institutions to expose search interfaces for a plethora of rich, heterogeneous content. Key parts:

  • Catalog Controller
  • Blacklight config
  • Facets
  • Blacklight API: Query Solr, inject/modify query parameters
  • Blacklight View Helpers:
    • View helpers are a Rails convention. They are methods that you can use, as you see fit, to display dynamically generated information within your view templates. Using view helpers allows applic