Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

For feed 2, we want to allow for the repository to contain multiple image collections, much in the same spirit as extending the functionality of the demo image collection.  Each image collection is represented by its own object in the repository, as are individual image items.  Collection membership is determined by the presence of an 'isMemberOf' relationship from an image to a collection.  Specifically, let's suppose that we wanted the following characteristics:

  1. We want to extend the functionality provided by the demo image collection by allowing these collections to be modified using the atom publishing protocol.
    1. Existing demo SDefs and SDeps from the image collection remain unchanged
    2. Images added/modified via AtomPub are considered FULL_SIZE
  2. There exists a ServiceDocument that enumerates all the image collections in the repository and their collection feed URIs (as provided by the APP)
  3. Each image collection has a collection feed URI
  4. In accordance with the APP images may be added, removed, or replaced through through this feed
    1. Adding an object to the feed implies adding a new object to the repository - but the client shall have no awareness of this process
    2. Deleting an object from the feed implies purging the image object from the repository - but the client shall have no awareness of this process

...

Additionally, let's assume that Fedora's REST API exposed URIs for the methods expressed in these SDefs as follows:

Wiki Markup{{[http://(fedora.server)/services/(object-pid)/(sdef-pid)/(method)]\[/additional\]}}

...where  Wiki Markup...where  \ [/additional\] could be parameters, or additional path elements in the URI.

For example, one of our service methods above would look like http://example.org/fedora/services/demo:SmileyStuff/atom:Collection/entries

...

So far, we've really only discussed the public "interfaces" of AtomPub in a writable CMA - the SDefs, URIs, and data formats.  Let us now take a look at all CMA and instance objects together, and see if we can map our desired functionality on to them.

Image item model: (augments capabilities in demo:DualResImage)

Code Block
pid:                       thought-expdemo:ImageItemInstanceDualResImage
relationship.hasService:   thought-exp:ImageItem # New Atom functionality
relationship.hasService:   demo:DualResolution   # Original Imageimage collection functionality
relationship.hasModel:     fedora-system:ContentModel-3.0
DS-COMPOSITE-MODEL:        datastream: FULL_SIZE # from original demo:DualResImage
                           datastream: MEDIUM_SIZE # from original demo:DualResImage
                           datastream: RELS-EXT:  # from original demo:DualResImage
                           datastream: DC # from original demo:DualResImage

Image item instance (one per image)

Code Block
pid:                      [item PID]
datastream:               MEDIUM_SIZE
datastream:               FULL_SIZE
datastream:               DC
relationship.isMemberOf   [collection PID] # de facto, see image collection demo objects
relationship.hasModel:    thought-exp:ImageItemInstancedemo:DualResImage

Image item SDef:

Code Block
pid:                    thought-exp:ImageItem
method:                 service # APP Service document for one image collection
method:                 feed    # atom Image Collection feed
relationship.hasModel   atom:DomainModel # to have atom:Domain/feeds
relationship.hasModel   fedora-system:ServiceDefinition-3.0

...

Code Block
pid:      thought-exp:ImageItemInstanceImpl
relationship.isDeploymentOf: thought-exp:ImageItem
relationship.isContractorOf: thought-expdemo:ImageItemInstanceDualResImage
relationship.hasModel: fedora-system:ServiceDeployment-3.0

Image collection model:

Code Block
pid:                       thought-expdemo:ImageCollectionInstanceDualResImageCollection
relationship.hasService:   thought-exp:ImageCollection   # Adds atom collection functionality
relationship.hasModel:     fedora-system:ContentModel-3.0
DS-COMPOSITE-MODEL:        datastream: thought-exp.imageCollectionEntryimageCollection.ATOM_SERVICE
                           datastream: QUERY # from original demo:DualResImageCollection
                           datastream: XSLT  # from original demo:DualResImageCollection
                           datastream: LIST  # from original demo:DualResImageCollection

Image collection instance:

Code Block
pid:  [collection PID]
relationship.hasModel      demo:DualResImageCollection
datastream:                QUERY
datastream:                XSLT
datastream:                LIST
datastream:                thought-exp.ImageCollection.ATOM_SERVICE

atom image Image collection SDef:

Code Block

Image atom image collection SDep:

Code Block

...