<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"><channel><title>Disruptive Library Technology Jester &#187; asset actions</title> <atom:link href="http://dltj.org/tag/assetactions/feed/" rel="self" type="application/rss+xml" /><link>http://dltj.org</link> <description>We&#039;re Disrupted, We&#039;re Librarians, and We&#039;re Not Going to Take It Anymore</description> <lastBuildDate>Mon, 06 Feb 2012 20:04:22 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <cloud domain='dltj.org' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' /> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/us/</creativeCommons:license> <item><title>Disseminators As the Core of an Object Repository</title><link>http://dltj.org/article/disseminator-centric-repository/</link> <comments>http://dltj.org/article/disseminator-centric-repository/#comments</comments> <pubDate>Thu, 26 Apr 2007 13:58:32 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[DRC]]></category> <category><![CDATA[Fedora]]></category> <category><![CDATA[asset actions]]></category> <category><![CDATA[digital libraries]]></category> <category><![CDATA[java]]></category> <category><![CDATA[restlet]]></category> <category><![CDATA[seam]]></category><guid isPermaLink="false">http://dltj.org/2007/04/disseminator-centric-repository/</guid> <description><![CDATA[I&#8217;ve been working to get JBoss Seam tied into Fedora, and along the way thought it would be wise to stop and document a core concept of this integration: the centrality of Fedora Disseminators in the the design of the &#8230; <a href="http://dltj.org/article/disseminator-centric-repository/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/04/disseminator-centric-repository/"></abbr><p>I&#8217;ve been working to get JBoss Seam tied into <a href="http://www.fedora.info/" title="Fedora Digital Object Repository homepage">Fedora</a>, and along the way thought it would be wise to stop and document a core concept of this integration:  the centrality of <a href="http://www.fedora.info/download/2.2/userdocs/digitalobjects/objectModel.html#DISS" title="Overview:The Fedora Digital Object Model">Fedora Disseminators</a> in the the design of the <a href="http://info.drc.ohiolink.edu/" title="Information about the Ohio Digital Resource Commons">Ohio Digital Resource Commons</a>.  Although there is nothing specific to <a href="http://www.jboss.com/products/seam" title="JBoss Seam homepage">JBoss Seam (a Java Enterprise Edition application framework)</a> in these concepts, making an object &#8220;render itself&#8221; does make the Seam-based interface application easier to code and understand.  A disseminator-centric architecture also allows us to put our code investment where it matters the most &mdash; in the repository framework &mdash; and exploit that investment in many places.  So what does it mean to have a disseminator-centric architecture and have objects &#8220;render themselves&#8221;?</p><p><h2>How It Works</h2><br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/sequence.png" title="Sequence Diagram"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/sequence.png" alt="Sequence Diagram " style="float:right;width:50%;margin-left:1.5em;" /></a>This is a sequence diagram showing all of the pieces:</p><ul><li>Browser:  The user&#8217;s browser</li><li>DRCseam:  A JBoss Seam application that generates the user interface and performs much of the business logic.  DRCseam, however, does <strong>not</strong> render the objects or their metadata into browser-consumable artifacts.  Read on!</li><li>Fedora:  A basic Fedora digital object repository.</li><li>Disseminator:  A simple servlet that performs various transformations on object datastreams to render content usable by the browser.</li></ul><p>With these components in play, here is the description of a sequence to render a page showing the metadata for a repository item:</p><ol><li><span style="font-weight:bolder;font-style:italic">request item page</span>: The browser follows a link to an item detail page.</li><li><span style="font-weight:bolder;font-style:italic">API-A ObjectProfile</span>: The interface application asks the repository for the &#8216;Object Profile&#8217; of the item&#8230;</li><li><span style="font-weight:bolder;font-style:italic">return object profile</span>: &#8230;which the repository returns.  The interface application now knows basic details about the object:  that it exists, the creation and updated timestamps, and so forth.</li><li><span style="font-weight:bolder;font-style:italic">API-A DatastreamDissemination for fullDisplay</span>: The interface application needs the object&#8217;s metadata display, so it asks the object to &#8220;render itself&#8221; by making a call to the Fedora repository for the object&#8217;s &#8220;FullDisplay&#8221; disseminator.</li><li><span style="font-weight:bolder;font-style:italic">call getFullDisplay</span>: The Fedora repository in turn calls the object&#8217;s disseminator with the Persistent Identifier (PID) of the object as a parameter.</li><li><span style="font-weight:bolder;font-style:italic">API-A Datastream for metadata</span>: Using the object PID, the disseminator calls back to the Fedora repository for the descriptive metadata datastream (the DC datastream, in this case)&#8230;</li><li><span style="font-weight:bolder;font-style:italic">XML metadata</span>: &#8230;which the Fedora repository returns.</li><li><span style="font-weight:bolder;font-style:italic">transform metadata</span>: The disseminator performs some transformation or derivation on the  descriptive datastream to create an XHTML representation&#8230;</li><li><span style="font-weight:bolder;font-style:italic">XHTML fragment</span>: &#8230;which it returns to the Fedora software&#8230;</li><li><span style="font-weight:bolder;font-style:italic">XHTML fragment</span>: &#8230;which is returned to the interface application&#8230;</li><li><span style="font-weight:bolder;font-style:italic">XHTML page</span>: &#8230;which inserts it at the appropriate place in the XHTML page it has built and returns the XHTML page to the browser.</li></ol><p>Step #4 is where we diverge from previous architectures.  Instead of making the interface application transform the metadata into a human-readable format, the interface application calls the object&#8217;s disseminator to do the job.</p><p><h3>The Heart of It All:  The Disseminator</h3><br />The key to this architecture is <em>asking the object to &#8220;render itself&#8221;</em>.  This puts the task of creating the appropriate representation at the object level.  The object can be an image, a video, a spreadsheet, or a PDF file.  More importantly, the object can be a PDF of a journal article or a PDF of a thesis; in both cases the metadata describing that PDF file will be different (journal/volume/issue in one case and department/degree/advisor in the other).</p><p>Rather than putting special case code in the interface application to render the description of the journal article one way and the thesis another way, that special case code is bound to the object in the form of a &#8220;disseminator&#8221;.  The disseminator methods for the journal article and the thesis share the same name &mdash; <code>getFullDisplay</code> &mdash; but will return entirely different XHTML fragments &mdash; one for a journal article and one for a thesis.  For both objects, though, the interface application will make a call to the object in the Fedora repository asking for the output of each <code>getFullDisplay</code> dissemination.  In the case of a Dublin Core description, the dissemination output could look like this:</p><div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&amp;lt;table class=&quot;drc_dublinCore_table&quot;&amp;gt;
&amp;lt;tr class=&quot;drc_dublinCore_row drc_dublinCore_title&quot;&amp;gt;
&amp;lt;td class=&quot;drc_dublinCore_label drc_dublinCore_title&quot;&amp;gt;Title:&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;drc_dublinCore_value drc_dublinCore_title&quot;&amp;gt;Jester Example&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr class=&quot;drc_dublinCore_row drc_dublinCore_identifier&quot;&amp;gt;
&amp;lt;td class=&quot;drc_dublinCore_label drc_dublinCore_identifier&quot;&amp;gt;Identifier:&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;drc_dublinCore_value drc_dublinCore_identifier&quot;&amp;gt;demo:exampleObject&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;</pre></div></div><p>You&#8217;ll note that there is a liberal application of CSS styles on all of the XHTML elements, allowing for the look of the dissemination to be further transformed in the browser via CSS stylesheets.  A <code>getFullDisplay</code> dissemination for a journal article could look like this:</p><div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&amp;lt;table class=&quot;drc_ejc_table&quot;&amp;gt;
&amp;lt;tr class=&quot;drc_ejc_row drc_ejc_title&quot;&amp;gt;
&amp;lt;td class=&quot;drc_ejc_label drc_ejc_title&quot;&amp;gt;Article Title:&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;drc_ejc_value drc_ejc_title&quot;&amp;gt;Taking Advantage of Fedora Disseminations&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr class=&quot;drc_ejc_row drc_ejc_volume&quot;&amp;gt;
&amp;lt;td class=&quot;drc_ejc_label drc_ejc_volume&quot;&amp;gt;Volume:&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;drc_ejc_value drc_ejc_volume&quot;&amp;gt;3&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr class=&quot;drc_ejc_row drc_ejc_issue&quot;&amp;gt;
&amp;lt;td class=&quot;drc_ejc_label drc_ejc_issue&quot;&amp;gt;Issue:&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;drc_ejc_value drc_ejc_issue&quot;&amp;gt;2&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;</pre></div></div><p><h3>Looking at the Pieces</h3><br />There is a demonstration system set up for a short period of time that shows all of the pieces.  First, the disseminator:</p><ul><li><span class="removed_link" title="http://drc-dev.ohiolink.edu:8080/BaseDisseminator/getFullDisplay/demo:exampleObject">http://drc-dev.ohiolink.edu:8080/BaseDisseminator/getFullDisplay/demo:exampleObject</span></li></ul><p>Next, how this disseminator looks as accessed through the Fedora repository:</p><ul><li><span class="removed_link" title="http://drc-dev.ohiolink.edu:8080/fedora/get/demo:exampleObject/demo:bDefExample/getFullDisplay/">http://drc-dev.ohiolink.edu:8080/fedora/get/demo:exampleObject/demo:bDefExample/getFullDisplay/</span></li></ul><p>And finally, how this result looks through the Seam-based interface application.  (A note about this application &mdash; only this URL works at the moment even though there are other links on the page.  This is also the &#8216;trunk&#8217; version of our interface code, so it is likely to change and/or break and/or work better at any time.)</p><ul><li><span class="removed_link" title="http://drc-dev.ohiolink.edu:8080/drc/item.seam?itemId=demo%3AexampleObject">http://drc-dev.ohiolink.edu:8080/drc/item.seam?itemId=demo%3AexampleObject</span></li></ul><p><h2>Fedora Setup</h2><br />In addition to the Seam-based interface application and the disseminator code, there is setup required at the Fedora repository &mdash; specifically, the creation of a Behavior Definition (bDef) that describes the disseminators that the objects share in common and the creation of a Behavior Mechanism (bMech) that describes the implementation of that definition for a particular object type.  Below is a series of screen shots that show the steps to create the bDef and bMech.</p><p><h3>Disseminator Behavior Definition (bDef)</h3><br />Using the Fedora Admin client, under the &#8220;Builders&#8221; menu, select &#8220;Behavior Definition Builder&#8221;.  The first pane, &#8220;General&#8221; parameters, use a specific PID of &#8216;<code>demo:bDefExample</code>&#8216; and put something in for the Behavior Object Name, Behavior Object Description, and one of the Dublin Core Metadata fields.  (It doesn&#8217;t matter what you put in for these values.)<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bdbgeneral.png" title="Fedora Admin Behavior Definition Builder “General” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bdbgeneral.png" alt="Fedora Admin Behavior Definition Builder “General” pane" style="width:85%;" /></a></p><p>Under the &#8220;Abstract Methods&#8221; pane, create new definitions for each of the disseminator methods.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bdbabstractmethods.png" title="Fedora Admin Behavior Definition Builder “Abstract Methods” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bdbabstractmethods.png" alt="Fedora Admin Behavior Definition Builder “Abstract Methods” pane" style="width:85%;" /></a></p><p>Under the &#8220;Documentation&#8221; pane, put something in the first entry.  Again, it doesn&#8217;t matter what is put in for these values, but they are required.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bdbdocumentation.png" title="Fedora Admin Behavior Definition Builder “Documentation” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bdbdocumentation.png" alt="Fedora Admin Behavior Definition Builder “Documentation” pane" style="width:85%;" /></a></p><p>Select &#8220;Ingest&#8221; at the bottom of the window, and the <code>demo:bDefExample</code> bDef will be created.  Alternatively, you could import the <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/BaseDisseminator/trunk/resources/foxml/demo_bDefExample.xml?rev=774"><code>demo:bDefExample</code> saved in the DRC source code repository</span> (choose &#8220;original format&#8221; at the bottom of that page).</p><p><h3>Disseminator Mechanism Definition (bMech)</h3><br />The bMech is a little more complicated.  Under the &#8220;Builders&#8221; menu, select &#8220;Behavior Mechanism Builder&#8221;.  The first pane, &#8220;General&#8221; parameters, use a specific PID of &#8216;<code>demo:bMechExample</code>&#8216; and put something in for the Behavior Object Name, Behavior Object Description, and one of the Dublin Core Metadata fields.  (It doesn&#8217;t matter what you put in for these values.)  In the &#8220;Behavior Definition Contract&#8221; pick the bDef just created (<code>demo:bDefExample</code>).<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbgeneral.png" title="Fedora Admin Behavior Mechanism Builder “General” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbgeneral.png" alt="Fedora Admin Behavior Mechanism Builder “General” pane" style="width:85%;" /></a></p><p>In the &#8220;Service Profile&#8221; pane, put in values in the &#8220;General&#8221; area (it doesn&#8217;t matter what).  In the Service Binding area, make sure the Message Protocol is <code>HTTP GET</code>, put in <code>text/html, text/xml</code> for Input MIME Types and put in <code>text/html, text/xml, text/plain</code> for Output MIME Types.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbserviceprofile.png" title="Fedora Admin Behavior Mechanism Builder “Service Profile” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbserviceprofile.png" alt="Fedora Admin Behavior Mechanism Builder “Service Profile” pane" style="width:85%;" /></a></p><p>Under the Service Methods pane, put in <code>http://localhost:8080/BaseDisseminator</code> for the Base URL.  (The disseminator is also loaded in the same servlet as the Fedora repository and the Seam interface application, and it is loaded at the &#8220;/BaseDisseminator&#8221; context path in the servlet.)  Create Service Method Definitions that correspond to the Abstract Methods in the bDef.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbservicemethods.png" title="Fedora Admin Behavior Mechanism Builder “Service Methods” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbservicemethods.png" alt="Fedora Admin Behavior Mechanism Builder “Service Methods” pane" style="width:85%;" /></a></p><p>Select &#8220;Properties&#8221; for each one of the Service Method Definitions in turn.  &#8220;echo&#8221; is a unique disseminator method that simply echos back the context parameters of the disseminator request.  This is useful for seeing exactly what the Fedora server is going to give to the disseminator.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbservicemethods-echo.png" title="Fedora Admin Behavior Mechanism Builder “Service Methods” Definitions for “echo” Method"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbservicemethods-echo.png" alt="Fedora Admin Behavior Mechanism Builder “Service Methods” Definitions for “echo” Method" style="width:85%;" /></a></p><p>With the exception of &#8220;echo&#8221; all of the other Service Method Definitions are the same.  The Method Binding consists of the disseminator method followed by a slash and the PID placeholder followed by a question mark and &#8216;dc&#8217; equals the DC placeholder.  Since the Method Binding field has two placeholders, there are two entries in the Method Parameter Definitions area.  The first is for PID &mdash; a &#8220;Default&#8221; parameter that is required and passed by value to the disseminator.  The default value is the special value <code>$PID</code>, which the repository software will replace with the PID of the object as the disseminator is called.  The second is for DC, a &#8220;Datastream&#8221; parameter that is required and passed to the disseminator by URL reference.  The disseminator doesn&#8217;t actually use this reference to a datastream, but it is a requirement that all bMechs pass a datastream of one sort or another to the disseminator.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbservicemethods-getfulldisplay.png" title="Fedora Admin Behavior Mechanism Builder “Service Methods” Definitions for “getFullDisplay” Method"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbservicemethods-getfulldisplay.png" alt="Fedora Admin Behavior Mechanism Builder “Service Methods” Definitions for “getFullDisplay” Method" style="width:85%;" /></a></p><p>If you have followed all of the steps so far, under the &#8220;Datastream Input&#8221; pane there will be one entry for DC in the table.  The only thing that needs to be done here is adding &#8220;text/xml&#8221; in the MIMEType column.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbdatastreaminput.png" title="Fedora Admin Behavior Mechanism Builder “Datastream Input” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbdatastreaminput.png" alt="Fedora Admin Behavior Mechanism Builder “Datastream Input” pane" style="width:90%;" /></a></p><p>Under the &#8220;Documentation&#8221; pane, put something in the first entry.  Again, it doesn&#8217;t matter what is put in for these values, but they are required.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbdocumentation.png" title="Fedora Admin Behavior Mechanism Builder “Documentation” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbdocumentation.png" alt="Fedora Admin Behavior Mechanism Builder “Documentation” pane" style="width:85%;" /></a></p><p>Select &#8220;Ingest&#8221; at the bottom of the window, and the <code>demo:bMechExample</code> bMech will be created.  Alternatively, you could import the <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/BaseDisseminator/trunk/resources/foxml/demo_bMechExample.xml?rev=774"><code>demo:bMechExample</code> saved in the DRC source code repository</span> (choose &#8220;original format&#8221; at the bottom of that page).</p><p><h3>Sample Object</h3><br />The last step is to add this disseminator bDef/bMech combination to an object.  Edit any object in the repository and go to the &#8220;Disseminators&#8221; pane.  If there are other disseminators already defined for this object, select &#8220;New&#8221; along the left side.  Put in a label &mdash; any label will do.  Next to &#8220;Behavior defined by&#8230;&#8221; select <code>demo:bDefExample</code>.  Then next to &#8220;Mechanism&#8221; select <code>demo:bMechExample</code>.  The admin client will prompt for a DC binding; select &#8220;Add&#8221; and choose the DC datastream in the pop-up window.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/objectdisseminatorsdatastream.png" title="Fedora Admin Sample Object’s “Disseminators” pane in progress"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/objectdisseminatorsdatastream.png" alt="Fedora Admin Sample Object’s “Disseminators” pane in progress" style="width:85%;" /></a></p><p>Select &#8220;Save Changes&#8221; at the bottom.  The completed disseminator looks like this:<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/objectdisseminators.png" title="Fedora Admin Sample Object’s “Disseminators” pane completed"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/objectdisseminators.png" alt="Fedora Admin Sample Object’s “Disseminators” pane completed" style="width:85%;" /></a></p><p>There is <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/BaseDisseminator/trunk/resources/foxml/demo_exampleObject.xml?rev=774">a sample object in the DRC source code repository</span> that has the disseminator already defined.</p><p><h2>Notes</h2><br />Comments about this architecture are certainly welcome.  I&#8217;m sure I&#8217;ll be writing about it more in the future, but here are some thoughts at this point:</p><p><h3>Future Directions</h3><br />In this case, I&#8217;m using an XSLT stylesheet to transform the Dublin Core XML into an XHTML table.  That stylesheet is stored in the BaseDisseminator WAR file.  The stylesheet could just as easily be a datastream of a special &#8220;formatting&#8221; object in the repository.  One of the key distinctions of OhioLINK&#8217;s Fedora implementation is that institutions using the repository will be able to &#8220;brand&#8221; their content in any way they choose.  Having the flexibility of storing metadata transformations just like any other object in the repository would seem to be of great advantage in that scenario.</p><p>On a related front, this style of implementation would be greatly enhanced by the work of the Fedora <a href="http://www.cs.cornell.edu/payette/fedora/designs/cmda/" title="CMDA Proposal">Content Model Dissemination Architecture</a> (CMDA).  Because disseminators must be bound to specific objects rather than classes of objects, management of the variety of bMechs in a scenario such as this will likely become difficult very soon.  I&#8217;m heartened by the fact that the CMDA work is going on and will cut our management complexity dramatically when it becomes available.</p><p><h3>Acknowlegements</h3><br />These concepts are based in part on the work of the Digital Library Federation&#8217;s <a href="https://wiki.dlib.indiana.edu/display/DLFAquifer/Asset+Action+Project" title="Aquifer Digital Collections Asset Actions homepage">Aquifer Asset Actions</a> technical working group and discussions among members of the OAI <a href="http://www.openarchives.org/ore/" title="Open Archives Initiative Protocol - Object Exchange and Reuse homepage">Object Reuse and Exchange</a> technical committee as well as conversations with many Fedora developers and implementors.  Thanks, everyone.</p><p>[Update 20070426T1147 : Fixed the sample object URL.  Thanks, Jodi.]<p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/BaseDisseminator/trunk/resources/foxml/demo_exampleObject.xml?rev=774 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/BaseDisseminator/trunk/resources/foxml/demo_bMechExample.xml?rev=774 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/BaseDisseminator/trunk/resources/foxml/demo_bDefExample.xml?rev=774 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu:8080/drc/item.seam?itemId=demo%3AexampleObject on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu:8080/fedora/get/demo:exampleObject/demo:bDefExample/getFullDisplay/ on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu:8080/BaseDisseminator/getFullDisplay/demo:exampleObject on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;">The text was modified to update a link from http://rama.grainger.uiuc.edu/assetActions/ to https://wiki.dlib.indiana.edu/display/DLFAquifer/Asset+Action+Project on January 19th, 2011.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/disseminator-centric-repository/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Fedora Disseminators to Enable Accessible Repository Content</title><link>http://dltj.org/article/fedora-disseminators-for-accessibility/</link> <comments>http://dltj.org/article/fedora-disseminators-for-accessibility/#comments</comments> <pubDate>Sat, 06 May 2006 03:04:19 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[DRC]]></category> <category><![CDATA[Fedora]]></category> <category><![CDATA[asset actions]]></category> <category><![CDATA[section508]]></category><guid isPermaLink="false">http://dltj.org/2006/05/fedora-disseminators-for-accessibility/</guid> <description><![CDATA[Calling all accessibility technology experts! What follows is a line of thinking about using characteristics of the FEDORA digital object repository to enable access to content through non-graphical interfaces. Thanks to Linda Newman from the University of Cincinnati and others &#8230; <a href="http://dltj.org/article/fedora-disseminators-for-accessibility/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2006/05/fedora-disseminators-for-accessibility/"></abbr><p>Calling all accessibility technology experts!  What follows is a line of thinking about using characteristics of the <a href="http://www.fedora.info/" title="Fedora">FEDORA digital object repository</a> to enable access to content through non-graphical interfaces.  Thanks to Linda Newman from the University of Cincinnati and others on the Friday morning DRC Developers conference call for triggering this line of thinking.</p><p>In a recent post defining <a href="http://dltj.org/2006/05/fedora-disseminators/">universal disseminators for every object in our repository</a> (if the last dozen words didn&#8217;t make sense, please read the linked article and come back), I hinted at having an auditory derivative of each object, at least at the preview level.  During today&#8217;s conference call, Linda asked if such a disseminator could be used to offer different access points for non-GUI users.  Well, why not?  Let&#8217;s look back at the &#8220;presentation&#8221; part of the disseminator label:</p><blockquote><p>A presentation can be one of:</p><ul><li>&#8220;preview&#8221; &#8211; a small/short version of the datastream returned in the datastream&#8217;s original format</li><li>&#8220;screen&#8221; &#8211; a roughly GUI-screen-sized version of the datastream returned in the datastream&#8217;s original format</li><li>&#8220;thumb&#8221; &#8211; a small, static image derivative of the datastream</li><li>&#8220;audio&#8221; &#8211; an auditory derivative of the datastream</li><li>&#8220;description&#8221; &#8211; a Dublin Core description of the item marked up in an HTML table</li><li>&#8220;record&#8221; &#8211; HTML markup of Thumb plus Description (suitable, for instance, as a representation of the object in a browse list)</li></ul></blockquote><p>Specifically, we talked about the <em>audio</em> presentation for non-audio objects (digital objects where audio is not the fundamental focus of the object).</p><ul><li>There could be a descriptive audio track, similar in concept to <a href="http://www.afb.org/section.asp?SectionID=3&#038;TopicID=140" title="Public Policy - American Foundation for the Blind">video description</a>, that would be returned to the calling application.  Perhaps, for instance, the audio of a commentary found on the <a href="http://www.ices.utexas.edu/~natacha/CATTt/hearing.html" title="Exhibition Design Guidelines: Hearing Impairements">handheld audio tour devices in art museums</a>.</li><li>In the absence of other audio description, the disseminator could run a text-to-speech algorithm against the title, creator, and description fields and return that to the calling application.</li></ul><p>This brings to mind another transformation we could apply to give a preview of an object.  (No, I haven&#8217;t moved into the odor or tactile senses &#8212; yet.)  Would it be useful to have a disseminator return a text summary and/or metadata aggregation of an object on demand?</p><p>And, of course, the critical question:  is it the job of a repository to build in access methods like this to be used by applications designed with alternate accessibility in mind?  Should it be up to the application to create the derivatives necessary?  I took a brief look at <a href="http://www.section508.gov/" title="Section 508: The Road to Accessibility">Section 508</a> requirements, but couldn&#8217;t find any real guidance about serving up accessible forms of content.  (There is a great deal of information about how to create accessible web pages, but very little I could find about making assets in those pages accessible.)  But I only know enough about this area to have it on my radar&#8230;and certainly not enough to formulate any answers.</p><p>The original goal of defining these universal disseminators was to assure a base level of functionality for every object in the system &#8212; a contract, if you will, between the repository and any consuming application that it could ask an object to return itself or a derivative of itself in all of these forms.  What do you think?  Should that contract be consciously extended to include universal accessibility?</p><div class='series_links'><a href='http://dltj.org/article/processing-raw-fedora-objects/' title='Processing Raw Fedora Objects'>Previous in series</a> <a href='http://dltj.org/article/representing-collections-in-fedora/' title='Representing Collections In FEDORA'>Next in series</a></div>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/fedora-disseminators-for-accessibility/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Thinking about Our Fedora Disseminators</title><link>http://dltj.org/article/fedora-disseminators/</link> <comments>http://dltj.org/article/fedora-disseminators/#comments</comments> <pubDate>Tue, 02 May 2006 19:19:03 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[DRC]]></category> <category><![CDATA[Fedora]]></category> <category><![CDATA[Unified Content Repository]]></category> <category><![CDATA[asset actions]]></category> <category><![CDATA[metadata]]></category><guid isPermaLink="false">http://dltj.org/2006/05/fedora-disseminators/</guid> <description><![CDATA[Another reason to consider the FEDORA digital object repository system, if having the ability to put all of your content in one place and reducing the complexity of digital preservation aren&#8217;t enough, is the capability to create and define behaviors &#8230; <a href="http://dltj.org/article/fedora-disseminators/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2006/05/fedora-disseminators/"></abbr><p>Another reason to consider the FEDORA digital object repository system, if <a href="http://dltj.org/2006/01/general-purpose-repository/">having the ability to put all of your content in one place</a> and <a href="http://dltj.org/2006/04/why-fedora-because-you-dont-need-fedora/">reducing the complexity of digital preservation</a> aren&#8217;t enough, is the capability to create and define behaviors that the content can perform.  In the <a href="http://www.fedora.info/" title="Fedora">FEDORA</a> world, these behaviors are called disseminators.</p><p>By way of example &#8212; say you have a digital object that is an image that you want to display to users.  Furthermore, you want to create at the time of the user&#8217;s request a smaller &#8220;thumbnail&#8221; version on search results lists and so forth.  (Let&#8217;s set aside for a moment that the system could create thumbnail derivatives in batch and simply deliver that to the user.  Someday I&#8217;ll propose that dynamic derivatives from a JPEG2000 master are a better way to go, but not now.  Stick with me&#8230;it&#8217;ll be worth it.)  From a system architecture point of view, the resize operation can happen in at least two places:  as a function of the content repository or as a function of the interface application.  In this simple example, one might argue that the best place is in the interface application.</p><p>Now let&#8217;s say that your content repository has not only still images but moving image files.  Uh, oh.  That means the application now has to be smart enough to know whether a particular search results hit is a still image or a moving image datastream.  And the application is going to have to know how to transform a large image to a thumbnail <i>and</i> know how to extract a key frame from a sequence of moving images.  And if you have more than one interface to the object repository (say, one that presents a digital library interface and one that integrates objects into your learning environment) then you&#8217;re going to have to replicate that still image and moving image capability in more than one application.</p><p>So instead, what if we put the &#8220;smarts&#8221; of the object into the repository and create some well-defined expectations for what every object in the repository has to do.  That &#8220;smarts&#8221; in the repository are the <i>Disseminators</i> and the well-defined expectations is the <i>Content Model</i>.  The &#8220;dumb&#8221; application (relatively speaking) gets a list of record identifiers that are the results of a search and asks the repository to give it a thumbnail images for each one.  The first record is a still image, so the repository resizes the image and delivers the result to the application.  The second record is a moving image file, so the repository extracts one frame, resizes it, and delivers it back to the application.  The third record is that of a book &#8212; want to guess what happens?  Perhaps the repository returns a thumbnail-sized image of the book jacket?  Or maybe an image rendering of the title page?  Okay, now so the fourth record is of a dataset &#8212; how do we get a thumbnail of a dataset?  Maybe a reduced size of visualization of the image?  What if the fifth was of a website?  Have you seen &#8220;thumbnail&#8221; sizes of websites, such as through <span class="removed_link" title="http://pages.alexa.com/exec/faqsidos/help/index.html?index=126">Alexa</span> or <a href="http://www.thumbshots.org/" title="Open Thumbshots - Free Web thumbnail preview image. Visualize sites in directory, search engine. View visual screenshot picture link. See snapshot graphics of Web page. Thumbnails screenshots snapshots thumbshot pictures images. Whether you&#039;re searching for a car, flower, photo or girafa, thumbshots will help you find it quickly and accurately.">Thumbshots.org</a>?</p><p>This is the key point:  for each record, <i>the application simply asked the repository to deliver a thumbnail of the object.</i> And the repository, regardless of media type, delivered one.</p><p>Okay, enough background.  Also keep in mind that OhioLINK&#8217;s Fedora repository vision doesn&#8217;t expect to have one front end; rather we anticipate getting to the repository data from a number of genre-, topic-, or technology-specific interfaces.  In doing so, I think a lot of the intelligence about how to handle media types needs to go into the disseminators.  So I&#8217;m thinking about how an object can present itself in generic ways to a wide variety of interfaces.</p><p>So in my current line of thinking, the name of a disseminator in the repository has three parts:</p><ul><li>action</li><li>presentation</li><li>optional sizing parameters</li></ul><p>An action can be one of:</p><ul><li>&#8220;get&#8221; &#8211; raw stream of bits from the datastream</li><li>&#8220;view&#8221; &#8211; HTML-wrapped version of the stream of bits plus activities that can be applied to the datastream intended for access by a GUI or to be transformed via XSLT</li></ul><p>I tried to combine the GUI and XSLT actions into &#8220;view&#8221; on the theory<br />that the HTML wrapper would have sufficient CSS &#8220;id&#8221; and &#8220;class&#8221; values<br />to make it possible to style it with CSS or transform it with XSLT.<br />This may not be a practical theory once we get to implementation.</p><p>A presentation can be one of:</p><ul><li>&#8220;preview&#8221; &#8211; a small/short version of the datastream returned in the datastream&#8217;s original format</li><li>&#8220;screen&#8221; &#8211; a roughly GUI-screen-sized version of the datastream returned in the datastream&#8217;s original format</li><li>&#8220;thumb&#8221; &#8211; a small, static image derivative of the datastream</li><li>&#8220;audio&#8221; &#8211; an auditory derivative of the datastream</li><li>&#8220;description&#8221; &#8211; a Dublin Core description of the item marked up in an HTML table</li><li>&#8220;record&#8221; &#8211; HTML markup of Thumb plus Description (suitable, for instance, as a representation of the object in a browse list)</li></ul><p>The final piece of the name is &#8220;Sized&#8221; which can be used to pass parameters that override the dimensions of the &#8220;preview&#8221; and &#8220;thumb&#8221; presentations.</p><p>So these would get put together like this (with examples based on still images):</p><ul><li>&#8220;getPreview&#8221; &#8211; return an x-by-y derivative of the datastream</li><li>&#8220;getThumb&#8221; &#8211; in the case of still images, same as &#8220;getPreview&#8221;</li><li>&#8220;viewThumb&#8221; &#8211; the same derivative as &#8220;getThumb&#8221; wrapped in an HTML div such as:<pre>&lt;div class="viewThumb" id="viewThumb[PID][DS]"&gt;  &lt;div class="getThumb" id="getThumb[PID][DS]"&gt;    &lt;img class="getThumbImg" id="getThumb[PID][DS]Img" alt="Thumbnail of [DS]" src="..." /&gt;  &lt;/div&gt;  &lt;div class="getThumbOptions" id="getThumbOptions[PID][DS]"&gt;    &lt;span class="getThumbOptionScreen" id="getThumbOptionScreen[PID][DS]"&gt;      &lt;a href="[URL to getScreen]"&gt;View Screen-sized&lt;/a&gt;    &lt;/span&gt;    &lt;span class="getThumbOptionDescription"id="getThumbOptionDescription[PID][DS]"&gt;      &lt;a href="[URL to getDescription"&gt;View Description&lt;/a&gt;    &lt;/span&gt;    ....  &lt;/div&gt;&lt;/div&gt;</pre><p> (where [PID] is the Fedora PID and [DS] is the datastream label)</li></ul><p>For non-static images, it gets a little more interesting because:</p><ul><li>"getPreview" of a video would return a short video segment defined as the 'preview' of the larger video where as "getThumb" of that same video datastream would return just a single frame from the video.</li><li>"getPreview" of a journal article could return a block of text that is the abstract of the article while "getThumb" of that same journal article could return an image rendering of the first page of the article</li><li>"getScreen" of a journal article could return an HTML fragment of the article itself while "getAudio" might return a prerecorded or computer-synthesized rendition of the article</li></ul><p>That's the basic plan, open for comments before we get too far with the coding part of the project.  Thoughts?<p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://pages.alexa.com/exec/faqsidos/help/index.html?index=126.</p><p style="padding:0;margin:0;font-style:italic;">The text was modified to update a link from http://www.thumbshots.org/freethumbshots.pxf to http://www.thumbshots.org/.</p><div class='series_links'><a href='http://dltj.org/article/why-fedora-because-you-dont-need-fedora/' title='Why Fedora?  Because You Don&#8217;t Need Fedora'>Previous in series</a> <a href='http://dltj.org/article/processing-raw-fedora-objects/' title='Processing Raw Fedora Objects'>Next in series</a></div>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/fedora-disseminators/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> </channel> </rss>
<!-- Served from: dltj.org @ 2012-02-11 12:17:00 by W3 Total Cache -->
