...
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:
- We want to extend the functionality provided by the demo image collection by allowing these collections to be modified using the atom publishing protocol.
- Existing demo SDefs and SDeps from the image collection remain unchanged
- Images added/modified via AtomPub are considered FULL_SIZE
- There exists a ServiceDocument that enumerates all the image collections in the repository and their collection feed URIs (as provided by the APP)
- Each image collection has a collection feed URI
- In accordance with the APP images may be added, removed, or replaced through through this feed
- Adding an object to the feed implies adding a new object to the repository - but the client shall have no awareness of this process
- 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:unmigrated-wiki-markup
{{[http://(fedora.server)/services/(object-pid)/(sdef-pid)/(method)
]\[/additional
\]
}}
...where \where [/additional\] could be parameters, or additional path elements in the URI. Wiki Markup
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 see if the surrounding objects (take a look at all CMA and instance objects together, content models, and Service Deployments) are tractable... and see if we can map our desired functionality on to them.
Image item model:
Code Block |
---|
pid: demo:DualResImage
relationship.hasService: thought-exp:ImageItem # New Atom functionality
relationship.hasService: demo:DualResolution # Original image 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: demo: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
|
Image item SDep:
Code Block |
---|
pid: thought-exp:ImageItemInstanceImpl
relationship.isDeploymentOf: thought-exp:ImageItem
relationship.isContractorOf: demo:DualResImage
relationship.hasModel: fedora-system:ServiceDeployment-3.0
|
Image collection model:
Code Block |
---|
pid: demo:DualResImageCollection
relationship.hasService: thought-exp:ImageCollection # Adds atom collection functionality
relationship.hasModel: fedora-system:ContentModel-3.0
DS-COMPOSITE-MODEL: datastream: thought-exp.imageCollection.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 collection SDef:
Code Block |
---|
atom image collection SDep:
Code Block |
---|
page is unfinished. Need to put in discussion, questions/implications, and basic conclusion as to whether this makes sense, and if it truly adds any value to, say, an external APP service.