<?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; restlet</title> <atom:link href="http://dltj.org/tag/restlet/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>Fri, 18 May 2012 15:43:10 +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>JPEG2000 to Zoomify Shim &#8212; Creating JPEG tiles from JPEG2000 images</title><link>http://dltj.org/article/introducing-j2ktilerenderer/</link> <comments>http://dltj.org/article/introducing-j2ktilerenderer/#comments</comments> <pubDate>Thu, 28 Feb 2008 12:15:42 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[JPEG2000]]></category> <category><![CDATA[code4lib]]></category> <category><![CDATA[code4lib Conference 2008]]></category> <category><![CDATA[DSpace]]></category> <category><![CDATA[j2ktilerenderer]]></category> <category><![CDATA[java]]></category> <category><![CDATA[jpeg2000]]></category> <category><![CDATA[restlet]]></category><guid isPermaLink="false">http://dltj.org/article/introducing-j2ktilerenderer/</guid> <description><![CDATA[This is a textual representation of a lightning talk done on Feb 26th at Code4Lib 2008. When the video of the talk is up (thanks, Noel!) I&#8217;ll link it here, too. The video is now available, and that article includes &#8230; <a href="http://dltj.org/article/introducing-j2ktilerenderer/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/article/introducing-j2ktilerenderer/"></abbr><p>This is a textual representation of a lightning talk done on Feb 26th at <a href="http://code4lib.org/conference/2008" title="Code4Lib 2008 Conference Homepage">Code4Lib 2008</a>. <del datetime="2008-05-15T19:17:08+00:00">When the video of the talk is up (thanks, Noel!) I&#8217;ll link it here, too.</del> The video is <a href="http://dltj.org/article/jpeg2000-to-zoomify-lightning-talk-video/">now available</a>, and that article includes an update on progress since the this article was posted.</p><p>OhioLINK has a collection of JPEG2000 images as an access format that were generated for use in our <a href="http://dlxs.org/" title="Digital Library eXtension Service homepage">DLXS</a>-based content system.  We are in the process of migrating those collections to DSpace and were looking for a mechanism to leverage the existing JPEG2000 files and not have to generate new derivatives.  We are also considering the use of JPEG2000 as a preservation format, and would find it attractive to use the same image format for both access copies and preservation copies.  We looked at Zoomify, but to perform its scaling function it generates JPEG tiles at several resolutions and storing those tiles can triple or quadruple disk space requirements.  Or, one could use the &#8216;enterprise&#8217; version of Zoomify and its proprietary PFF format or the equally proprietary MrSID format.  We didn&#8217;t want to be locked into either of these scenarios.  Our solution is to create a web application that mimics the directory-of-JPEG-tiles solution, but to dynamically generate the tiles our of a JPEG2000 master.</p><p>The free version of Zoomify reads JPEG tiles out of a directory structure that looks like this:</p><table cellpadding="3"></table><tr><td style="white-space: nowrap;" valign="top">/ImageProperties.xml</td><td>Includes descriptive elements of the source image like height, width, and tile size.</td></tr><tr><td style="white-space: nowrap" valign="top">/TileGroup0/0-0-0.jpg</td><td>The highest power-of-2 zoom out level that creates an image with dimensions less than 256&#215;256</td></tr><tr><td style="white-space: nowrap" valign="top">/TileGroup0/1-0-0.jpg</td><td>The tile at the upper left corner at the first power-of-2 zoom level</td></tr><tr><td style="white-space: nowrap" valign="top">/TileGroup0/1-1-0.jpg</td><td>The tile to the left of 1-0-0.jpg</td></tr><p>The shim mimics that directory structure.  It parses the URL of the request and dynamically creates the appropriate JPEG tile (or metadata file) out of the JPEG2000 image.</p><p><h2>The Code</h2><br />The JPEG2000 for Zoomify shim requires <a href="http://java.sun.com/javase/downloads/" title="Java Download page">Java</a> 1.5 or greater.  It does not require a servlet engine; rather, it uses the <a href="http://www.restlet.org/" title="Restlet project homepage">Restlet</a> library to perform as a stand-alone application.  The <a href="http://one-jar.sourceforge.net/" title="OneJar project homepage">OneJar</a> library allows the Java classes and required dependencies to be bundled into a single JAR file.  We&#8217;re using the <a href="http://www.kakadusoftware.com/" title="Kakadu Software homepage">Kakadu Software JPEG2000 library</a> to perform the on-the-fly decoding of JPEG2000 images.  Kakadu is a commercial JPEG2000 codec, although <a href="http://www.kakadusoftware.com/index.php?option=com_virtuemart&amp;Itemid=19&amp;vmcchk=1&amp;Itemid=19" title="Kakadu Software purchasing and licensing guidelines">inexpensive licenses are available</a> for not-for-profit activity.  We are using the Enterprise version of <a href="http://www.zoomify.com/" title="Zoomify homepage">Zoomify</a>, a Flash-based image viewer, although I believe the free version will work as well.  (You&#8217;ll need the Enterprise version to be able to modify and adapt the appearance of the Zoomify applet.)  The same techniques can also be used for other Flash applets and probably even JavaScript-based viewers (<i>a la</i> Google Maps).</p><p>The source code is available from the <span class="removed_link" title="https://drc-dev.ohiolink.edu/browser/j2kTileRenderer/trunk">OhioLINK DRC source code repository</span> (<a href="https://drc-dev.ohiolink.edu/svn/j2kTileRenderer/trunk">Subversion access</a>).  We plan to integrate it into DSpace 1.5 as part of the <a href="http://info.drc.ohiolink.edu/" title="Ohio Digital Resource Commons | Save, Discover, and Share Your Resources and the Resources of the World">Ohio Digital Resource Commons</a>, and I may create a Fedora disseminator to serve up the tiles as well.</p><p>Thanks go out to Keith Gilbertson and John Davison on the OhioLINK staff for their help in making this work as well as Stu Hicks and François d&#8217;Erneville for being a sounding board for these ideas.<p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to https://drc-dev.ohiolink.edu/browser/j2kTileRenderer/trunk on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;">The text was modified to update a link from http://code4lib/conference/2008 to http://code4lib.org/conference/2008 on January 28th, 2011.</p><p style="padding:0;margin:0;font-style:italic;">The text was modified to update a link from http://www.kakadusoftware.com/Purchasing.html to http://www.kakadusoftware.com/index.php?option=com_virtuemart&#038;Itemid=19&#038;vmcchk=1&#038;Itemid=19 on January 28th, 2011.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/introducing-j2ktilerenderer/feed/</wfw:commentRss> <slash:comments>13</slash:comments> </item> <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> </channel> </rss>
<!-- Served from: dltj.org @ 2012-05-24 16:09:29 by W3 Total Cache -->
