<?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; web standards</title> <atom:link href="http://dltj.org/tag/web-standards/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>Draft Specifications of OAI Object Reuse and Exchange Now Available</title><link>http://dltj.org/article/ore-draft-specs/</link> <comments>http://dltj.org/article/ore-draft-specs/#comments</comments> <pubDate>Wed, 12 Dec 2007 16:03:13 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[Raw Technology]]></category> <category><![CDATA[Object Reuse and Exchange]]></category> <category><![CDATA[Open Repositories 2008]]></category> <category><![CDATA[semantic web]]></category> <category><![CDATA[standards]]></category> <category><![CDATA[web architecture]]></category> <category><![CDATA[web standards]]></category><guid isPermaLink="false">http://dltj.org/2007/12/ore-draft-specs/</guid> <description><![CDATA[Last night, Herbert Van de Sompel announced the availability of the draft specifications and user guide for Object Reuse and Exchange (ORE). This effort, under the auspices of the Open Archives Initiative (OAI), seeks to define a standard for the &#8230; <a href="http://dltj.org/article/ore-draft-specs/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/12/ore-draft-specs/"></abbr><p><img alt="ORE logo" src="http://cdn.dltj.org/wp-content/uploads/2007/12/ore_logo_e_80.png" width="80" height="80" style="float: right; padding: 1em 1em 5em 5em;" />Last night, Herbert Van de Sompel <a href="http://www.openarchives.org/pipermail/oai-implementers/2007-December/001788.html" title="&#039release of alpha OAI-ORE documents&#039; posting to OAI-implementers mailing list">announced</a> the availability of the <a href="http://openarchives.org/ore/toc" title="OAI-ORE Table of Contents to Specifications and User Guide">draft specifications and user guide for Object Reuse and Exchange (ORE)</a>.  This effort, under the auspices of the Open Archives Initiative (OAI), seeks to define a standard for the description and exchange of aggregations of web resources.</p><p>If you stop to think about it, the world of the web is at once a simple and a complex place.  It is simple in that it is made up of resources (this HTML page, the jester&#8217;s cap graphic in the upper right corner, the <span class="removed_link" title="http://www.talkr.com/app/fetch.app?feed_id=16975&amp;perma_link=http://dltj.org/2007/12/ore-draft-specs/">text-to-speech audio version of this posting</span>, etc.) that are uniquely addressed by URLs.<sup><a href="http://dltj.org/article/ore-draft-specs/#footnote_0_300" id="identifier_0_300" class="footnote-link footnote-identifier-link" title="Technically called &amp;#8220;URIs&amp;#8221;, but let&amp;#8217;s not go down that path for the sake of trying to speak the vernacular of the public web and not that of the technicalities of the underlying standards.">1</a></sup> It is complex in that there is a relationship between this HTML page, the jester&#8217;s cap graphic, and the audio version that is not explicitly stated &#8212; at least not stated in a way understandable by machines processing content on the web.  Which is to say, how does a web crawler know that the linked audio file is an alternate version of the text of this posting rather than a link to some holiday music file that I am critiquing?</p><p>This is where OAI-ORE comes in.  It offers a machine-parsable way to describe relationships between various web resources.  In a manner of speaking, an &#8220;ORE file&#8221; is a new kind of web resource that encapsulates and describes the complexity of real-world compound documents that already exist on the web.  The neat thing now, though, is that there is a formal specification for those compound documents that allows their nature to be <em>understood</em> by web crawlers, indexers, and content repositories.</p><p>There is lots more about OAI-ORE in the <a href="http://openarchives.org/ore/toc" title="OAI-ORE Table of Contents to Specifications and User Guide">user&#8217;s guide and specifications</a>.  Keep in mind, though, that these are alpha specifications that represent the best thinking and compromises of a couple dozen people. <sup><a href="http://dltj.org/article/ore-draft-specs/#footnote_1_300" id="identifier_1_300" class="footnote-link footnote-identifier-link" title="I&amp;#8217;m honored to be among those serving on the ORE Technical Committee.">2</a></sup> There are undoubtedly issues and ideas that haven&#8217;t been considered yet, so don&#8217;t go too far in coding up an implementation that may change (in subtle or dramatic ways) as the public conversation gets going.  An <a href="http://groups.google.com/group/oai-ore" title="OAI-ORE Google Group">OAI-ORE Google Group</a> has been set up to discuss these documents.  Those working on ORE to date welcome your comments there, and to reinforce that, I&#8217;ve taken the until now unprecedented step of closing comments here on <acronym title="Disruptive Library Technology Jester"><i>DLTJ</i></acronym> &#8212; put your comments into the Google Groups area.</p><p>Also remember that there are two open meetings scheduled to focus on the specifications:</p><div class="vevent" id="hcalendar-OAI-ORE-Open-Meeting-usa"><div style="float:left; padding: 0.5em 1.5em 3em 0"><a href="http://suda.co.uk/projects/microformats/hcalendar/get-cal.php?uri=http://dltj.org/2007/12/ore-draft-specs"><img src="http://cdn.dltj.org/wp-content/uploads/2007/12/microformat_hcalendar.png" alt="hCalendar Encoded Microformat" width="80" height="15" /><br />Download iCal file</a></div><p><a class="url" href="http://www.openarchives.org/ore/documents/ore-hopkins-press-release.pdf" title="Press Release for ORE Open Meeting"><abbr class="dtstart" title="20080303">March 3th, 2008</abbr> &mdash; <span class="summary">OAI-ORE U.S. Open Meeting</span> at <span class="location">Johns Hopkins University</span></a><div class="description">On March 3, 2008 the Open Archives Initiative (OAI) will hold a public meeting at Johns Hopkins University in Baltimore, MD to introduce the Object Reuse and Exchange (ORE) specifications.  Space is limited, <a href="http://www.regonline.com/oai-ore" title="ORE U.S. Meeting registration">please register</a>.  Supported by Microsoft.</div></div><div class="vevent" id="hcalendar-OAI-ORE-Open-Meeting-uk"><div style="float:left; padding: 0.5em 1.5em 3em 0"><a href="http://suda.co.uk/projects/microformats/hcalendar/get-cal.php?uri=http://dltj.org/2007/12/ore-draft-specs"><img src="http://cdn.dltj.org/wp-content/uploads/2007/12/microformat_hcalendar.png" alt="hCalendar Encoded Microformat" width="80" height="15" /><br />Download iCal file</a></div><p><a class="url" href="http://www.openarchives.org/ore/documents/ore-hopkins-press-release.pdf" title="Press Release for ORE Open Meeting"><abbr class="dtstart" title="20080404">April 4th, 2008</abbr> &mdash; <span class="summary">OAI-ORE European Open Meeting</span> at <span class="location">University of Southampton</span></a><div class="description">On April 4, 2008 the Open Archives Initiative (OAI) will hold a public meeting at the University of Southampton, in conjunction with the Open Repositories 2008 conference, to introduce the Object Reuse and Exchange (ORE) specifications.  Supported by JISC.</div></div><p>We&#8217;re looking forward to your questions and comments on the OAI-ORE draft documents.<p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://www.talkr.com/app/fetch.app?feed_id=16975&#038;perma_link=http://dltj.org/2007/12/ore-draft-specs/ on December 30th, 2010.</p><h2>Footnotes</h2><ol class="footnotes"><li id="footnote_0_300" class="footnote">Technically called &#8220;URIs&#8221;, but let&#8217;s not go down that path for the sake of trying to speak the vernacular of the public web and not that of the technicalities of the underlying standards.</li><li id="footnote_1_300" class="footnote">I&#8217;m honored to be among those serving on the ORE Technical Committee.</li></ol>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/ore-draft-specs/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Update to &#8216;Embedded Web Video in a Standards-Compliant, Accessible, and Successful Way&#8217;</title><link>http://dltj.org/article/update-to-embedded-web-video/</link> <comments>http://dltj.org/article/update-to-embedded-web-video/#comments</comments> <pubDate>Wed, 21 Feb 2007 20:41:09 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[Raw Technology]]></category> <category><![CDATA[accessibility]]></category> <category><![CDATA[digital libraries]]></category> <category><![CDATA[perl]]></category> <category><![CDATA[section508]]></category> <category><![CDATA[video]]></category> <category><![CDATA[web standards]]></category><guid isPermaLink="false">http://dltj.org/2007/02/update-to-embedded-web-video/</guid> <description><![CDATA[With the release of Microsoft&#8217;s Windows Media Player version 11, the Microsoft Media Server (MMS) protocol is officially no longer supported. (Except, of course, for the confusing/amusing footnote on that page that says &#8216;mms://&#8217; URIs are &#8220;highly recommended&#8221; as a &#8230; <a href="http://dltj.org/article/update-to-embedded-web-video/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/02/update-to-embedded-web-video/"></abbr><p>With the release of Microsoft&#8217;s <a href="http://www.microsoft.com/windows/windowsmedia/player/11/default.aspx" title="Windows Media Player 11">Windows Media Player version 11</a>, the Microsoft Media Server (MMS) protocol is <a href="http://www.microsoft.com/windows/windowsmedia/licensing/netprokit.aspx#WindowsMediaNetworkingProtocolsCompatibility" title="Windows Media Porting Kits: Other Windows Media Technologies">officially no longer supported</a>.  (Except, of course, for the confusing/amusing footnote on that page that says &#8216;mms://&#8217; URIs are &#8220;highly recommended&#8221; as a <a href="http://msdn2.microsoft.com/en-gb/library/aa390673.aspx" title="Protocol Rollover">protocol rollover URL</a> &mdash; only Microsoft can at the same time make something deprecated and highly recommended.)  As <span class="removed_link" title="http://blog.ryaneby.com/archives/windows-media-player-11-and-mms/">Ryan Eby noted earlier this year</span>, those generating ASX files for Windows Media Player need to adjust their scripts.</p><p>Last year I published an entry called <a href="http://dltj.org/2006/09/standards-compliant-web-video/">Embedded Web Video in a Standards-Compliant, Accessible, and Successful Way</a> on how to embed (without using the non-standard &lt;EMBED&gt; tag) video on an HTML page.  It has been one of the most widely read articles on <i>DLTJ.org</i>, and so I wanted to publish an updated version of the script from that article to take into account this new wrinkle from Microsoft.  The change is at line #41 below:</p><div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl -w</span>
<span style="color: #666666; font-style: italic;"># Copyright (C) 2006-2007 OhioLINK</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># This file is part of the OhioLINK Digital Resource Commons (DRC) Project.</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># The OhioLINK DRC is free software; you can redistribute it and/or</span>
<span style="color: #666666; font-style: italic;"># modify it under the terms of the Affero General Public License as</span>
<span style="color: #666666; font-style: italic;"># published by Affero, Inc. -- either version 1 of the License, or</span>
<span style="color: #666666; font-style: italic;"># (at your option) any later version.</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># The OhioLINK DRC Project is distributed in the hope that it will be</span>
<span style="color: #666666; font-style: italic;"># useful, but WITHOUT ANY WARRANTY -- without even the implied warranty</span>
<span style="color: #666666; font-style: italic;"># of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<span style="color: #666666; font-style: italic;"># Affero General Public License for more details.</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># You should have received a copy of the Affero General Public</span>
<span style="color: #666666; font-style: italic;"># License in the LICENSE.txt file that comes with the DRC project;</span>
<span style="color: #666666; font-style: italic;"># if not, write to DRC Development Team, OhioLINK, 2455 North Star Rd,</span>
<span style="color: #666666; font-style: italic;"># Suite 300, Columbus, OH 43221, USA.</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #0000ff;">$ENV</span><span style="color: #009900;">&#123;</span>PATH_INFO<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Location: http://no-path-info-given/<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$format</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$id</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ENV</span><span style="color: #009900;">&#123;</span>PATH_INFO<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=~</span> <span style="color: #000066;">q</span><span style="color: #666666; font-style: italic;">#^/+(.*?)/(.*)$#;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$format</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/Quicktime/i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Location: http://video.ohiolink.edu/blah/Quicktime/$id<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$format</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/Real/i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Location: http://video.ohiolink.edu:8080/ramgen/blah/Real/$id<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$format</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/Windows/i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$winType</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$winFile</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$id</span> <span style="color: #339933;">=~</span> <span style="color: #000066;">q</span><span style="color: #666666; font-style: italic;">#^(.*?)/(.*)$#;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$winType</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/asx/i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #0000ff;">$winFile</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">s/\\..*$//</span><span style="color: #339933;">;</span>
      <span style="color: #000066;">print</span> <span style="color: #339933;">&gt;&gt;</span> <span style="color: #ff0000;">&quot;EoMarkup&quot;</span><span style="color: #339933;">;</span>
Content<span style="color: #339933;">-</span>type<span style="color: #339933;">:</span> video<span style="color: #339933;">/</span>x<span style="color: #339933;">-</span>ms<span style="color: #339933;">-</span>asf
&nbsp;
<span style="color: #339933;">&lt;</span>asx version<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;3.0&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #009999;">&lt;copyright&gt;</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span> <span style="color: #cc66cc;">2005</span> <span style="color: #339933;">-</span> xxx<span style="color: #339933;">&lt;/</span>copyright<span style="color: #339933;">&gt;</span>
<span style="color: #009999;">&lt;entry&gt;</span>
<span style="color: #339933;">&lt;</span>ref href<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;mms://video.ohiolink.edu/blah/Windows/$winFile.wmv?SAMI=http://rave.ohiolink.edu/dmc/blah/windows/smi/$winFile.smi&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>ref href<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;http://video.ohiolink.edu/blah/Windows/$winFile.wmv?SAMI=http://rave.ohiolink.edu/dmc/blah/windows/smi/$winFile.smi&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #009999;">&lt;copyright&gt;</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span> <span style="color: #cc66cc;">2005</span> <span style="color: #339933;">-</span> xxx<span style="color: #339933;">&lt;/</span>copyright<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>ref<span style="color: #339933;">&gt;&lt;/</span>entry<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>asx<span style="color: #339933;">&gt;</span>
EoMarkup
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$winType</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/wmv/i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Location: mms://video.ohiolink.edu/blah/Windows/$winFile<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$winType</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/smi/i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">use</span> LWP<span style="color: #339933;">::</span><span style="color: #006600;">UserAgent</span><span style="color: #339933;">;</span>
      <span style="color: #0000ff;">$ua</span> <span style="color: #339933;">=</span> LWP<span style="color: #339933;">::</span><span style="color: #006600;">UserAgent</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #339933;">;</span>
      <span style="color: #0000ff;">$ua</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">agent</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;$0-lwp/0.1 &quot;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">$ua</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">agent</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #0000ff;">$req</span> <span style="color: #339933;">=</span> HTTP<span style="color: #339933;">::</span><span style="color: #006600;">Request</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span>GET <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">&quot;http://video.ohiolink.edu:8080/blah/Windows/$winFile&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #666666; font-style: italic;"># send request</span>
      <span style="color: #0000ff;">$res</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ua</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">request</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$req</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #666666; font-style: italic;"># check the outcome</span>
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$res</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">is_success</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Content-type: application/smil<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> <span style="color: #0000ff;">$res</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">decoded_content</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Location: http://error-from-remote-server/$winType/$winFile/&quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$res</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">code</span><span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;/&quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$res</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">message</span><span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n&quot;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Location: http://invalid-Windows-format-given/$winType/$winFile<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Location: http://invalid-format-given/$format/$id<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n<span style="color: #000099; font-weight: bold;">\\</span>r<span style="color: #000099; font-weight: bold;">\\</span>n&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div><p>Thanks to Neil Bennett at the University of Southern Maine for contacting OhioLINK about the problem, providing some very helpful diagnostics, and pointing us to the URL to the protocol table mentioned above.  It is also worth noting that the A List Apart website posted a new article about <a href="http://alistapart.com/articles/flashembedcagematch" title="A List Apart: Articles: Flash Embedding Cage Match">sane ways of embedding Flash content</a> that builds upon the same work in the original &#8216;Embedded Web Video&#8230;&#8217; article.  It might be time to update some of the techniques used in the original article, but that&#8217;ll need to wait for another time.<p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://blog.ryaneby.com/archives/windows-media-player-11-and-mms/ on January 19th, 2011.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/update-to-embedded-web-video/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Working With the Web Architecture</title><link>http://dltj.org/article/web-architecture/</link> <comments>http://dltj.org/article/web-architecture/#comments</comments> <pubDate>Fri, 16 Feb 2007 15:29:09 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[Linking Technologies]]></category> <category><![CDATA[Raw Technology]]></category> <category><![CDATA[digital libraries]]></category> <category><![CDATA[Object Reuse and Exchange]]></category> <category><![CDATA[web architecture]]></category> <category><![CDATA[web standards]]></category><guid isPermaLink="false">http://dltj.org/2007/02/web-architecture/</guid> <description><![CDATA[As you may have noticed, the web has evolved a set of common principles that are a mix of ratified standards and ad hoc practices. The notion of a Web Architecture was codified in a W3C technical report called &#8220;Architecture &#8230; <a href="http://dltj.org/article/web-architecture/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/02/web-architecture/"></abbr><p>As you may have noticed, the web has evolved a set of common principles that are a mix of ratified standards and ad hoc practices.  The notion of a Web Architecture was codified in a W3C technical report called &#8220;Architecture of the World Wide Web&#8221; <a href="http://www.w3.org/TR/2004/REC-webarch-20041215/" title="Architecture of the World Wide Web, Volume One">http://www.w3.org/TR/2004/REC-webarch-20041215/</a> or simply &#8216;Web Architecture.&#8217;  Those projects and protocols that align with the &#8216;Web Architecture&#8217; are more likely to be picked up and used than those that do not.  As a result, the <a href="http://www.openarchives.org/ore/" title="Open Archives Initiative Protocol - Object Exchange and Reuse">OAI Object Reuse and Exchange</a> (ORE) project seeks to provide an infrastructure for web-based information systems that exploit and enhance the Web Architecture, and therefore overlay cleanly on the existing web.</p><p>Given that we want to align closely with this &#8216;Web Architecture&#8217; how far does the Web Architecture report go to define what is needed to make an ORE environment happen?  The answer lies in the definition of three terms and the interaction of these three concepts.</p><ul><li>Resource: &#8220;A network data object or service that can be identified by a URI&#8230;. Resources may be available in multiple representations (e.g. multiple languages, data formats, size, and resolutions) or vary in other ways.&#8221; <sup><a href="http://dltj.org/article/web-architecture/#footnote_0_182" id="identifier_0_182" class="footnote-link footnote-identifier-link" title="&amp;#8220;Hypertext Transfer Protocol &amp;#8212; HTTP/1.1&amp;#8243; RFC 2616. Available from http://www.ietf.org/rfc/rfc2616 Accessed Feb 15 2007.">1</a></sup></li><li>Uniform Resource Identifier (URI):  &#8220;A compact string of characters for identifying an abstract or physical resource.&#8221; <sup><a href="http://dltj.org/article/web-architecture/#footnote_1_182" id="identifier_1_182" class="footnote-link footnote-identifier-link" title="&amp;#8220;Uniform Resource Identifiers (URI): Generic Syntax&amp;#8221; RFC 2396. Available from http://www.rfc-editor.org/rfc/rfc2396.txt Accessed Feb 15 2007.">2</a></sup></li><li>Representation: &#8220;An entity included with a response that is subject to content negotiation&#8230;. There may exist multiple representations associated with a particular response status.&#8221; <sup><a href="http://dltj.org/article/web-architecture/#footnote_0_182" id="identifier_2_182" class="footnote-link footnote-identifier-link" title="&amp;#8220;Hypertext Transfer Protocol &amp;#8212; HTTP/1.1&amp;#8243; RFC 2616. Available from http://www.ietf.org/rfc/rfc2616 Accessed Feb 15 2007.">1</a></sup></li></ul><div style="float: right; margin: 0 0 1em 1.5em; padding 0 0 1em 1.5em; border: 2px solid grey;"><a id="p183" rel="attachment" class="imagelink" href="http://dltj.org/2007/02/web-architecture/illustration-shows-the-relationship-between-identifier-resource-and-representation/" title="Illustration shows the relationship between identifier, resource, and representation."><img id="image183" style="width: 200px;" src="http://cdn.dltj.org/wp-content/uploads/2007/02/uri-res-rep.png" alt="Illustration shows the relationship between identifier, resource, and representation." /></a></div><p>This is perhaps best explained by this graphic from the &#8220;Architecture of the World Wide Web&#8221; document.  All three terms are included:  a URI identifies a resource which is in turn expressed as one representation.  The key part of how the web works, though, lies in the definition of &#8220;representation&#8221; &mdash; <em>that there may exist multiple representations</em> for a single URI.  Believe it or not, you already know this.  The representation of the resource identified by the URI &#8216;<tt>cnn.com</tt>&#8216; at noon today is different from the one that existed at noon yesterday.  You might say, &#8220;well so what&#8230;it is a dynamic website,&#8221; and I would agree &mdash; what is important here is that the web architecture does not give you a way to identify with a URI that representation of the <tt>cnn.com</tt> resource at noon yesterday.  Put another way, in the words of the Web Architecture technical report, &#8220;Agents [web browsers and the like] may use a URI to access the referenced resource; this is called dereferencing the URI.&#8221; <sup><a href="http://dltj.org/article/web-architecture/#footnote_2_182" id="identifier_3_182" class="footnote-link footnote-identifier-link" title="&amp;#8220;Architecture of the World Wide Web, Volume One&amp;#8221; paragraph #117.  Available from http://www.w3.org/TR/2004/REC-webarch-20041215/#p117 Accessed Feb 15 2007.">3</a></sup> The representation comes into being as a result of a service request by an agent for a resource via a URI.</p><p>The Web Architecture technical report lists four factors that determine which representation(s) are retrieved as a result of a service request: <sup><a href="http://dltj.org/article/web-architecture/#footnote_3_182" id="identifier_4_182" class="footnote-link footnote-identifier-link" title="&amp;#8220;Architecture of the World Wide Web, Volume One&amp;#8221; paragraph #122.  http://www.w3.org/TR/2004/REC-webarch-20041215/#p117 Accessed Feb 15 2007.">4</a></sup></p><ol><li>Whether the URI owner makes available any representations at all;</li><li>Whether the agent making the request has access privileges for those representations&#8230;;</li><li>If the URI owner has provided more than one representation (in different formats such as HTML, PNG, or RDF; in different languages such as English and Spanish; or transformed dynamically according to the hardware or software capabilities of the recipient), the resulting representation may depend on negotiation between the user agent and server.</li><li>The time of the request; the world changes over time, so representations of resources are also likely to change over time.</li></ol><p>When a URI is accessed by a browser, one goes through a content negotiation to get a representation.  Representations may vary by device or time or IP address or authorization or any number of factors.  In a graph or type-based thinking, a resource is a first class object:  it is linkable &mdash; one can cite a resource. Representations, on the other hand, are second class objects:  identified only in the context of a resource. A representation is not linkable, there may be many representations per resource, and a representation only comes about as a result of an action.</p><p><h2>Observations</h2><br />This notion of the &#8216;Web Architecture&#8217; is clearly dominant now, so what does the Web Architecture &mdash; resources, URIs, and representations &mdash; mean in the context of the OAI Object Reuse and Exchange work?  One would be well advised to use its existing capabilities where they are appropriate and build specialized extensions that sit on top in such a way as to not contradict its fundamental aspects.  This means cleanly layering new capabilities that meet the needs of our problem space.  In a subsequent posting, I&#8217;ll outline the need for some <a href="http://dltj.org/2007/02/ore-model-services">ORE-specific extensions to the Web Architecture</a>.</p><h2>Footnotes</h2><ol class="footnotes"><li id="footnote_0_182" class="footnote">&#8220;Hypertext Transfer Protocol &#8212; HTTP/1.1&#8243; RFC 2616. Available from <a href="http://www.ietf.org/rfc/rfc2616" title="RFC 2616 &#039;Hypertext Transfer Protocol -- HTTP/1.1&#039;">http://www.ietf.org/rfc/rfc2616</a> Accessed Feb 15 2007.</li><li id="footnote_1_182" class="footnote">&#8220;Uniform Resource Identifiers (URI): Generic Syntax&#8221; RFC 2396. Available from <a href="http://cdn.dltj.org/wp-content/uploads/2007/02/rfc2396.txt.gzip" title="RFC 2396 &#039;Uniform Resource Identifiers (URI): Generic Syntax&#039;">http://www.rfc-editor.org/rfc/rfc2396.txt</a> Accessed Feb 15 2007.</li><li id="footnote_2_182" class="footnote">&#8220;Architecture of the World Wide Web, Volume One&#8221; paragraph #117.  Available from <a href="http://www.w3.org/TR/2004/REC-webarch-20041215/#p117" title="Architecture of the World Wide Web, Volume One">http://www.w3.org/TR/2004/REC-webarch-20041215/#p117</a> Accessed Feb 15 2007.</li><li id="footnote_3_182" class="footnote">&#8220;Architecture of the World Wide Web, Volume One&#8221; paragraph #122. <a href="http://www.w3.org/TR/2004/REC-webarch-20041215/#p117" title="Architecture of the World Wide Web, Volume One">http://www.w3.org/TR/2004/REC-webarch-20041215/#p117</a> Accessed Feb 15 2007.</li></ol><div class='series_links'><a href='http://dltj.org/article/ore-introduction/' title='Introducing the OAI Object Reuse and Exchange Initiative'>Previous in series</a> <a href='http://dltj.org/article/ore-model-services/' title='The Intersection of the Web Architecture with Scholarly Communication'>Next in series</a></div>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/web-architecture/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Embedded Web Video in a Standards-Compliant, Accessible, and Successful Way</title><link>http://dltj.org/article/standards-compliant-web-video/</link> <comments>http://dltj.org/article/standards-compliant-web-video/#comments</comments> <pubDate>Tue, 26 Sep 2006 00:59:14 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[Raw Technology]]></category> <category><![CDATA[accessibility]]></category> <category><![CDATA[section508]]></category> <category><![CDATA[video]]></category> <category><![CDATA[web standards]]></category><guid isPermaLink="false">http://dltj.org/2006/09/standards-compliant-web-video/</guid> <description><![CDATA[The word &#8220;Successful&#8221; in the title, when juxtaposed with &#8220;Standards-Compliant&#8221; and &#8220;Accessible,&#8221; should be big, bold and flashing (except that the flashing style would then go against web accessibility best practice). The goal is to embed a video clip into &#8230; <a href="http://dltj.org/article/standards-compliant-web-video/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2006/09/standards-compliant-web-video/"></abbr><p>The word &#8220;Successful&#8221; in the title, when juxtaposed with &#8220;Standards-Compliant&#8221; and &#8220;Accessible,&#8221; should be big, bold and flashing (except that the flashing style would then go against web accessibility best practice).  The goal is to embed a video clip into a web page that validates as &#8220;XHTML4.01 Transitional&#8221;, includes a Closed Captioning text track to be displayed in the web page, and could be viewed in one of three flavors:  Windows Media, QuickTime, and Real.  And the content being presented is about using accessible technologies in the classroom, so it had to be &#8220;right.&#8221;  This task was much harder than I thought, and I&#8217;ll offer much harder than it should have been.  Piecing together sources too numerous to mention, I managed to make it happen &#8230; with just a few caveats.  Here, documented for all time, or at least until dltj.org goes away or the next major browser/streaming-client revision (which ever comes first) is how it can be done.</p><p><h2>The Content</h2><br />I hope someday soon to actually post a link to this content online where you can see at least the public face of this solution at play.  The content is for a series of web-based modules for faculty and administrators to help improve the quality of education for students with disabilities.  It is top-notch stuff, and it has been a real honor to work with the team that put it together.  For my piece of it, though, they gave me a set of directories, broken out by media type, with this content:</p><dl><dt>Windows/</dt><dd>.wmv (the video) and .smi (the closed caption text track)</dd><dt>Real/</dt><dd>.rm (the video), .rt (the closed caption text track) and .smi (the container that pulls the first two together)</dd><dt>Quicktime/</dt><dd>.mov (the video)</dd></dl><p>Now right out of the gate we&#8217;re fudging things a little bit.  For whatever reason the team developing the content decided to punt when it came to the text track in Quicktime.  I don&#8217;t know if there was an insurmountable barrier or some other reason, but the practical upshot is that the Quicktime version of the video includes the text track an &#8220;open caption&#8221; encoded right into the video stream.  That makes Quicktime, from my perspective, very easy to deal with.</p><p>Those with a keen eye will notice that both the Windows Media and the Real Media version have  a .smi file.  This is true, but they are not identical.  Windows media wants to use a .asx file as its container object and only uses the .smi for the text stream.  The Real Media version has the text stream in .rt files.  Could these be combined?  Perhaps, but I&#8217;ve got real-world problems to solve and this is what I was given.  In any case, I don&#8217;t think it makes the end result any easier or harder than it would be otherwise.</p><p><h2>Serving Up the Content</h2><br />We use a Helix Streaming Media server from Real Networks, Inc., as our content server, but that isn&#8217;t the really interesting part of this quest.  Another requirement, was that the URLs to these various media files needed to be persistent, <em>is</em> an interesting problem.  The HTML that will include the URLs could be copied and distributed to hundreds if not thousands of sites eventually, so updating the URLs in web pages because a machine name changed or we decide to use a Darwin Streaming Server rather than a Helix Streaming Server for Quicktime would be impossible to get done right.  OhioLINK (my employer), being a content provider for member libraries, created a persistent URL service years ago for its content called &#8220;RAVE&#8221; (or <b><u>R</u></b>andom <b><u>A</u></b>ccess to <b><u>V</u></b>irtually <b><u>E</u></b>verything), so it made sense to have the URLs to the media pieces be &#8220;RAVE URLs&#8221;.  RAVE URLs are handled by PERL scripts running on an Apache virtual host called &#8220;rave.ohiolink.edu&#8221;.  These PERL scripts read the parameters of the request and issue an HTTP 302 (&#8220;Moved Temporarily&#8221;) redirect to the real location of the content.  In doing so, we only need to change the address of the content in one place &#8212; the RAVE script &#8212; when the location moves (rather than in the hundreds of web pages or bookmarks or what-have-you).</p><p>For the purposes of this project, these RAVE URLs were defined as this (the http protocol prefix is omitted so over-anxious RSS readers will not attempt to turn them into hyperlinks; &#8220;blah&#8221; is a placeholder for the project name; and [id] represents the identifier for the video segment):</p><dl style="margin-left: 3em"><dt>rave.ohiolink.edu/dmc/blah/quicktime/[id]</dt><dd>Redirects to the location of the Quicktime file (a hinted .mov file, so it starts playing in the browser right away)</dd><dt>rave.ohiolink.edu/dmc/blah/real/[id]</dt><dd>Redirects to the location of the .smi container file via the mms protocol through the Helix streaming server</dd><dt>rave.ohiolink.edu/dmc/blah/windows/wmv/[id]</dt><dd>Redirects to the location of the wmv video file via the mms protocol through the Helix streaming server</dd><dt>rave.ohiolink.edu/dmc/blah/windows/smi/[id]</dt><dd>Pulls the .smi file off of the streaming server and sends it back to the browser with the appropriate MIME type</dd><dt>rave.ohiolink.edu/dmc/blah/windows/asx/[id]</dt><dd>Dynamically creates a .asx container that pulls together the <code>windows/smi</code> and the <code>windows/wmv</code> files</dd></dl><p>Here are the first of the tricky bits.  First, it seems like Windows Media Player can&#8217;t cope with a 302 redirect message in response to its request for a .smi file.  &#8220;Can&#8217;t cope&#8221; can be restated as &#8220;ignores&#8221;; it doesn&#8217;t throw an error, it just plays the file as if there was no closed captioning text.  To get around this, the RAVE script has a bit of PERL where it asks like a web client to pull the .smi file off of the video server and send it back out to the media player.</p><div style="padding 1em; border: 1px solid red; margin: 1em; background: yellow; color: black;">Note &mdash; the Perl script included below was updated in February 2007 to include <a href="http://dltj.org/2007/02/update-to-embedded-web-video/">a fix for the deprecation of the MMS protocol</a> in Windows Media Player.</div><p>Second &#8212; again for those with eagle eyes &#8212; is the dynamic generation of an .asx file.  As it turns out, one can relate a .smi text-track file with a .wmv video file by including it as a SAMI parameter on the URL.  By far the best practice for doing this seems to be to relate the .smi and the .wmv files in a .asx container file.  So we create one on-the-fly.  The PERL code looks like this:</p><div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl -w</span>
<span style="color: #666666; font-style: italic;"># Copyright (C) 2006 OhioLINK</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># This file is part of the OhioLINK Digital Resource Commons (DRC) Project.</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># The OhioLINK DRC is free software; you can redistribute it and/or</span>
<span style="color: #666666; font-style: italic;"># modify it under the terms of the Affero General Public License as</span>
<span style="color: #666666; font-style: italic;"># published by Affero, Inc. -- either version 1 of the License, or</span>
<span style="color: #666666; font-style: italic;"># (at your option) any later version.</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># The OhioLINK DRC Project is distributed in the hope that it will be</span>
<span style="color: #666666; font-style: italic;"># useful, but WITHOUT ANY WARRANTY -- without even the implied warranty</span>
<span style="color: #666666; font-style: italic;"># of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<span style="color: #666666; font-style: italic;"># Affero General Public License for more details.</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># You should have received a copy of the Affero General Public</span>
<span style="color: #666666; font-style: italic;"># License in the LICENSE.txt file that comes with the DRC project;</span>
<span style="color: #666666; font-style: italic;"># if not, write to DRC Development Team, OhioLINK, 2455 North Star Rd, </span>
<span style="color: #666666; font-style: italic;"># Suite 300, Columbus, OH 43221, USA.</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #0000ff;">$ENV</span><span style="color: #009900;">&#123;</span>PATH_INFO<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Location: http://no-path-info-given/<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$format</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$id</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ENV</span><span style="color: #009900;">&#123;</span>PATH_INFO<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=~</span> <span style="color: #000066;">q</span><span style="color: #666666; font-style: italic;">#^/+(.*?)/(.*)$#;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$format</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/Quicktime/i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Location: http://video.ohiolink.edu/blah/Quicktime/$id<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$format</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/Real/i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Location: http://video.ohiolink.edu:8080/ramgen/blah/Real/$id<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span> 
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$format</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/Windows/i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$winType</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$winFile</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$id</span> <span style="color: #339933;">=~</span> <span style="color: #000066;">q</span><span style="color: #666666; font-style: italic;">#^(.*?)/(.*)$#;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$winType</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/asx/i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #0000ff;">$winFile</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">s/\..*$//</span><span style="color: #339933;">;</span>
      <span style="color: #000066;">print</span> <span style="color: #339933;">&gt;&gt;</span> <span style="color: #ff0000;">&quot;EoMarkup&quot;</span><span style="color: #339933;">;</span>
Content<span style="color: #339933;">-</span>type<span style="color: #339933;">:</span> video<span style="color: #339933;">/</span>x<span style="color: #339933;">-</span>ms<span style="color: #339933;">-</span>asf
&nbsp;
<span style="color: #339933;">&lt;</span>asx version<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;3.0&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #009999;">&lt;copyright&gt;</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span> <span style="color: #cc66cc;">2005</span> <span style="color: #339933;">-</span> xxx<span style="color: #339933;">&lt;/</span>copyright<span style="color: #339933;">&gt;</span>
<span style="color: #009999;">&lt;entry&gt;</span>
<span style="color: #339933;">&lt;</span>ref href<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;mms://video.ohiolink.edu/blah/Windows/$winFile.wmv?SAMI=http://rave.ohiolink.edu/dmc/blah/windows/smi/$winFile.smi&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #009999;">&lt;copyright&gt;</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span> <span style="color: #cc66cc;">2005</span> <span style="color: #339933;">-</span> xxx<span style="color: #339933;">&lt;/</span>copyright<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>ref<span style="color: #339933;">&gt;&lt;/</span>entry<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>asx<span style="color: #339933;">&gt;</span> 
EoMarkup
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$winType</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/wmv/i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Location: mms://video.ohiolink.edu/blah/Windows/$winFile<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$winType</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/smi/i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">use</span> LWP<span style="color: #339933;">::</span><span style="color: #006600;">UserAgent</span><span style="color: #339933;">;</span>
      <span style="color: #0000ff;">$ua</span> <span style="color: #339933;">=</span> LWP<span style="color: #339933;">::</span><span style="color: #006600;">UserAgent</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #339933;">;</span>
      <span style="color: #0000ff;">$ua</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">agent</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;$0-lwp/0.1 &quot;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">$ua</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">agent</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #0000ff;">$req</span> <span style="color: #339933;">=</span> HTTP<span style="color: #339933;">::</span><span style="color: #006600;">Request</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span>GET <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">&quot;http://video.ohiolink.edu:8080/blah/Windows/$winFile&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #666666; font-style: italic;"># send request</span>
      <span style="color: #0000ff;">$res</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ua</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">request</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$req</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #666666; font-style: italic;"># check the outcome</span>
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$res</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">is_success</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Content-type: application/smil<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> <span style="color: #0000ff;">$res</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">decoded_content</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Location: http://error-from-remote-server/$winType/$winFile/&quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$res</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">code</span><span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;/&quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$res</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">message</span><span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Location: http://invalid-Windows-format-given/$winType/$winFile<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Location: http://invalid-format-given/$format/$id<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div><p>The first part of the script parses the PATH_INFO variable &#8212; everything left over from the <i>blah</i> script name &#8212; and if what is requested is the Real Media or the Quicktime version of the video it sends the redirect back to the client (in the form of the &#8220;Location:&#8221; header with Apache HTTP daemon handling the 302 response code).  If what is requested is the Windows variety, it further parses the PATH_INFO piece for the file type and acts according to that:  for wmv, it redirects; for asx, it generates the .asx file; and for .smi, it pulls the content off the video server and returns it to the client.</p><p><h2>The Markup</h2><br />So now that we can serve up the video content with persistent URLs, we need to tackle the HTML markup.  As a general rule, we can&#8217;t use the <a href="http://www.webstandards.org/learn/articles/askw3c/may2005/" title="Adding Multimedia in Web Documents (part 2) - The Web Standards Project">popular yet non-standard <code>&lt;embed&gt;</code> tag</a>; since it is not part of any formal specification, validation will always fail.  As a consequence, use in future browsers is less assured.  So we need to use <code>&lt;object&gt;</code> &#8212; and unfortunately due to varied, if not outright broken implementations of the <code>&lt;object&gt;</code> tag, we need to be a little tricky in how we code it.  Other tricks are in play here as well &#8212; check the list of &#8220;Resources Consulted&#8221; below for more information.</p><p>Also note that many of the recommendations out there start off with something like &#8220;if you have media to show, <em>don&#8217;t</em> embed it into your web page; but if you must, here is one way to do it.&#8221;  The reason for this is pretty simple, if not obvious after a little thought:  folks using alternate browsing/computing techniques (e.g. keyboard only for limited mobility, auditory only for sight impaired, visual only for the hearing impaired, etc.) lose much of their ability to control the flow of information because it is tied up in the functionally-limited browser rather than the native media player.  These same recommendations go on to say that if you do embed the media into the web page, provide a link for the user to access it using the native media player.</p><p>So based on the URLs to the media objects described above, this is what the HTML markup looks like:</p><p><h3>Quicktime</h3><br /><br clear="all" /></p><div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;object classid=&quot;clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B&quot; codebase=&quot;http://www.apple.com/qtactivex/qtplugin.cab&quot; width=&quot;320&quot; height=&quot;380&quot;&gt;
  &lt;param name=&quot;src&quot; value=&quot;http://rave.ohiolink.edu/dmc/blah/quicktime/[id].mov&quot; /&gt;
  &lt;param name=&quot;controller&quot; value=&quot;true&quot; /&gt;
  &lt;param name=&quot;autoplay&quot; value=&quot;true&quot; /&gt;
  &lt;!--[if !IE]&gt;--&gt;
    &lt;/object&gt;&lt;object type=&quot;video/quicktime&quot; data=&quot;http://rave.ohiolink.edu/dmc/blah/quicktime/[id].mov&quot; width=&quot;320&quot; height=&quot;380&quot;&gt;
     &lt;param name=&quot;autoplay&quot; value=&quot;true&quot; /&gt;
     &lt;param name=&quot;controller&quot; value=&quot;true&quot; /&gt;
    &lt;/object&gt;
   &lt;!--&lt;![endif]--&gt;
&nbsp;
&amp;lt;br /&amp;gt;
&lt;a href=&quot;http://rave.ohiolink.edu/dmc/blah/quicktime/[id].mov&quot; title=&quot;View in Native Player&quot;&gt;View Video with External Player&lt;/a&gt;</pre></div></div><p><h3>Windows Media</h3><br /><br clear="all" /></p><div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;object classid=&quot;clsid:6bf52a52-394a-11d3-b153-00c04f79faa6&quot; type=&quot;application/x-oleobject&quot; width=&quot;320&quot; height=&quot;304&quot; id=&quot;Player1&quot;&gt;
  &lt;param name=&quot;url&quot; value=&quot;http://rave.ohiolink.edu/dmc/blah/windows/asx/[id].asx&quot; /&gt;
  &lt;param name=&quot;src&quot; value=&quot;http://rave.ohiolink.edu/dmc/blah/windows/asx/[id].asx&quot; /&gt;
  &lt;param name=&quot;autostart&quot; value=&quot;true&quot; /&gt;
  &lt;param name=&quot;showcontrols&quot; value=&quot;true&quot; /&gt;
  &lt;param name=&quot;uimode&quot; value=&quot;mini&quot; /&gt;
  &lt;param name=&quot;captioningID&quot; value=&quot;CapText&quot; /&gt;
  &lt;param name=&quot;SAMIFileName&quot; value=&quot;http://rave.ohiolink.edu/dmc/blah/windows/smi/scott.smi&quot; /&gt;
    &lt;!--[if !IE]&gt;--&gt;
     &lt;/object&gt;&lt;object type=&quot;video/x-ms-wmv&quot; data=&quot;http://rave.ohiolink.edu/dmc/blah/windows/asx/[id].asx&quot; width=&quot;320&quot; height=&quot;304&quot; id=&quot;Player2&quot;&gt;
     &lt;param name=&quot;src&quot; value=&quot;http://rave.ohiolink.edu/dmc/blah/windows/asx/[id].asx&quot; /&gt;
     &lt;param name=&quot;autostart&quot; value=&quot;true&quot; /&gt;
     &lt;param name=&quot;showcontrols&quot; value=&quot;true&quot; /&gt;
     &lt;param name=&quot;uimode&quot; value=&quot;mini&quot; /&gt;
     &lt;param name=&quot;captioningID&quot; value=&quot;CapText&quot; /&gt;
     &lt;param name=&quot;SAMIFileName&quot; value=&quot;http://rave.ohiolink.edu/dmc/blah/Windows/smi/[id].smi&quot; /&gt;
    &lt;/object&gt;
   &lt;!--!&lt;[endif]--&gt;
&nbsp;
&amp;lt;br /&amp;gt;
&lt;a href=&quot;http://rave.ohiolink.edu/dmc/blah/windows/asx/[id].asx&quot; title=&quot;View in Native Player&quot;&gt;View Video with External Player (including captions)&lt;/a&gt;</pre></div></div><p><h3>Real Media</h3><br />One last caveat.  As if the shenanigans above weren&#8217;t bad enough, apparently as part of a court settlement against Microsoft a number of years ago, there was an injunction placed against the creator of Internet Explorer that prevented that browser from automatically launching content embedded in a web page.  For whatever reason (I didn&#8217;t have time to investigate <em>why</em> this happened), it only impacts Real Media content.  Somehow, though, it is okay for the browser to start it if the action is called from an external piece of JavaScript.  Go figure.  You can read more about it at Real Media&#8217;s support site for <a href="http://www.realnetworks.com/resources/howto/embedded/iechanges/index.html" title="">Web Page Embedding &gt; Internet Explorer Changes</a>.  In actuality, though, it makes the Real Media part of the equation pretty easy:</p><div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;script language=&quot;JavaScript&quot; type=&quot;text/javascript&quot;&gt;
  AC_RunRealContent( 
	&quot;id&quot;, &quot;player&quot;,  
	&quot;width&quot;, &quot;320&quot;,  
	&quot;height&quot;, &quot;280&quot;,  
	&quot;CONTROLS&quot;, &quot;imagewindow&quot;,  
	&quot;CONSOLE&quot;, &quot;radio&quot;,  
	&quot;AUTOSTART&quot;, &quot;TRUE&quot;,  
	&quot;type&quot;, &quot;audio/x-pn-realaudio-plugin&quot;,  
	&quot;SRC&quot;, &quot;http://rave.ohiolink.edu/dmc/blah/real/[id].smi&quot;
  );
  window.document.write('&amp;lt;br /&amp;gt;');
  AC_RunRealContent( 
	&quot;id&quot;, &quot;controls&quot;,  
	&quot;width&quot;, &quot;320&quot;,  
	&quot;height&quot;, &quot;36&quot;,  
	&quot;CONTROLS&quot;, &quot;ControlPanel&quot;,  
	&quot;CONSOLE&quot;, &quot;radio&quot;, 
	&quot;type&quot;, &quot;audio/x-pn-realaudio-plugin&quot;,  
	&quot;SRC&quot;, &quot;http://rave.ohiolink.edu/dmc/blah/real/[id].smi&quot;
  );
&lt;/script&gt;
&amp;lt;br /&amp;gt;
&lt;a href=&quot;http://rave.ohiolink.edu/dmc/fame/Real/scott.smi&quot; title=&quot;View with Native Player&quot;&gt;View Video with External Player (including captions)&lt;/a&gt;</pre></div></div><p><h2>Conclusion</h2></p><ol><li>It seems to work for me and the machines I test with; your mileage may vary.</li><li>If you know of a better way to do it, please let me know!</li></ol><p><h2>Resources Consulted</h2><br />Here is a short list of the most helpful resources used to accomplish this feat:</p><ul><li>&#8220;<a href="http://alistapart.com/articles/byebyeembed" title="A List Apart: Articles: Bye Bye Embed">Bye Bye Embed</a>&#8221; by Elizabeth Castro on A List Apart</li><li>&#8220;<a href="http://www.webaim.org/techniques/captions/" title="WebAIM: Web Captioning Overview">Web Captioning</a>&#8221; in the Web Accessibility In Mind project</li></ul>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/standards-compliant-web-video/feed/</wfw:commentRss> <slash:comments>8</slash:comments> </item> </channel> </rss>
<!-- Served from: dltj.org @ 2012-02-11 12:28:22 by W3 Total Cache -->
