While it's unclear whether we need to explicitly list some of the more foundational features of fedora (disaster recovery through transparent storage, integrated access control, etc.) the following use cases are either not met by the current fedora, or are listed because there's been considerable talk of dropping support for them in future versions.

Title (goal)
 Applications can be easily built to work against fedora
Primary Actor developers
Scope 
Level 
Story

 In creating an application that uses fedora as the underlying data store, the API should meet some very basic needs.

  1. CRUD (create, read, update delete)
  2. transactions (if the fourth API call in an operation fails, don't require the developer to roll back the previous 3, any of which steps could also fail)
  3. concurrency/locking (have other programs, users, threads modified this object since I looked at it)
  4. basic queries (does object X exist)
  5. more complex queries (does object with character X and/or Y exist)

Title (goal)
Repository-level metadata transformations/mapping
Primary Actoruser
Scope 
Level 
Story

 A user requests metadata in a certain form.  The repository (based on RDF assertions, metadata characteristics, or any other mechanism) provides metadata in that form.  In the three-series fedora, this can be accomplished by exposing a method in a service definition for dissemination of metadata in that form.  The repository need not maintain metadata in multiple forms, it just needs to maintain mappings.  For the benefits of preservation, having this transformation be embedded in the repository is important.  (this may further the goal of TRAC B2.8 in cases where the metadata format of record is application-specific)

One of the strengths of fedora 3.* was the ease with which one could add a new service to a content model.  Updating every object to change their behaviors in the repository is an unacceptable regression to the functionality of fedora 2*.

Comments

AWoods: There are two issues at play here:

  1. Metadata mapping/transformation on-the-fly
  2. Embedding transform definition itself within the repository

There are several ways that both #1 and #2 can be achieved. We should establish a group of institutions with the same use case and discuss/design.

Title (goal)
Repository generated/mediated derivatives
Primary Actor repository manager
Scope 
Level 
Story

 A user requests the download of some material from the repository.  Based on the metadata for that object, the characteristics of the requesting user the derivative provided to the user contains extra information (context, rights restrictions, etc.).  This attachment of functionality to an object in fedora must be integrated into fedora such that:

  1.  access controls at the repository level are in effect
  2. changes to this behavior can be accomplished centrally

 

 

Title (goal)
live querying of object graph
Primary Actor script or program acting against the repository
Story

 Ingest and update routines often have to determine where in the graph of relationships to place a new (or updated) object, in doing so, querying a synchronously updated index of the relationships is necessary.  For example:

  1. find all children of an object when the relationship information is only stored on the children
  2. insert a new object within a chain of linked nodes
  3. perform the above operation with some concept of locking such that concurrent operations may insert objects into the same chain
CommentsIn previous versions of fedora, having the resource index synchronized caused a huge performance hit, but if updates weren't synchronized, the most common use cases would fail in unpredictable ways.  One query might not pick up recent changes, then the next one would, even with only a single process running against fedora.

 

Querying unidirectional relationships take the following form and seem to work in the alpha-4 release.

SELECT ?s WHERE { ?s <http://fedora.lib.virginia.edu/relationships#follows> <http://localhost:8080/rest/firstObject> }

Other Use Cases of Interest

  1. xxx
  • No labels