<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Handle on Crossref</title><link>https://www-crossref-org.pluma.sjfc.edu/categories/handle/</link><description>Recent content in Handle on Crossref</description><generator>Hugo 0.139.4</generator><language>en-us</language><managingEditor>support@crossref.org (Crossref/Cazinc/Benoît Benedetti)</managingEditor><webMaster>support@crossref.org (Crossref/Cazinc/Benoît Benedetti)</webMaster><lastBuildDate>Mon, 30 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www-crossref-org.pluma.sjfc.edu/categories/handle/" rel="self" type="application/rss+xml"/><item><title>DOI resolution and deposit outage on 17 March 2026</title><link>https://www-crossref-org.pluma.sjfc.edu/blog/doi-resolution-and-deposit-outage-on-17-march-2026/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><author>Dominika Tkaczyk</author><guid>https://www-crossref-org.pluma.sjfc.edu/blog/doi-resolution-and-deposit-outage-on-17-march-2026/</guid><description>&lt;p>On 17 March 2026, we experienced an outage that affected DOI resolution for Crossref DOIs and the deposit of metadata records by Crossref members. In this summary, we outline what happened, the impact on our community, and the steps we are taking to strengthen our systems and processes as a result.&lt;/p>
&lt;p>Starting around 06:30 UTC, a surge of traffic to the Handle System, governed by &lt;a href="https://www-doi-org.pluma.sjfc.edu" target="_blank">the DOI Foundation&lt;/a> and operated by &lt;a href="https://www.cnri.reston.va.us" target="_blank">CNRI&lt;/a>, caused instability across several handle servers. As a result, users couldn&amp;rsquo;t resolve Crossref DOIs. Because the Crossref system relies on the Handle System to register new DOIs and update resolution information for existing ones, metadata deposits by Crossref members were also failing.&lt;/p>
&lt;p>Although the handle service was &lt;a href="https://doi.statuspage.io/incidents/f4cqcppc1q41" target="_blank">restored by 09:30 UTC&lt;/a>, the Crossref system held onto stale authentication sessions and did not automatically recover. Once we restarted the affected servers, deposit processing returned to normal around 10:18 UTC. We later reprocessed the failed submissions to ensure that members did not need to take any action.&lt;/p>
&lt;p>While incidents like this are disruptive for our community, several aspects of our response worked well. Our support and technology teams reacted quickly, and we were able to restore the deposit workflow promptly. We were also able to reach CNRI through established communication channels, and they responded out of hours to begin mitigation.&lt;/p>
&lt;p>The incident also highlighted areas where we can improve our processes and resilience. In addition to &lt;a href="https://doi.statuspage.io/incidents/f4cqcppc1q41" target="_blank">the changes made by CNRI&lt;/a> (more backend handle servers and tighter rate limiting), Crossref is taking the following actions:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Knowledge sharing and documentation: Crossref, like all Registration Agencies, relies on the Handle System. We are reviewing the technical documentation describing how the Crossref system integrates with the Handle System, and we will continue working with CNRI to stay informed as the handle infrastructure evolves.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Improving handle session management: We are reviewing how our system manages handle sessions to explore how recovery could occur automatically after connection disruptions.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Submission rerun process improvements: We will review, clarify, and document the workflow for identifying and rerunning affected member submissions after disruptions to deposit processing.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Reliable DOI resolution and deposit processing are central to the research ecosystem. We&amp;rsquo;re committed to continuously improving the resilience of our systems and we will continue to learn from incidents like this one to strengthen them further.&lt;/p>
&lt;p>If you have any questions, &lt;a href="mailto:support@crossref.org">we are always happy to hear from you&lt;/a>.&lt;/p>
&lt;p>You can stay informed about the status of our services by subscribing to updates at &lt;a href="https://status-crossref-org.pluma.sjfc.edu/" target="_blank">status.crossref.org&lt;/a>&lt;/p></description></item><item><title>January 2015 DOI Outage: Followup Report</title><link>https://www-crossref-org.pluma.sjfc.edu/blog/january-2015-doi-outage-followup-report/</link><pubDate>Tue, 17 Mar 2015 00:00:00 +0000</pubDate><author>Geoffrey Bilder</author><guid>https://www-crossref-org.pluma.sjfc.edu/blog/january-2015-doi-outage-followup-report/</guid><description>&lt;h2 id="span-backgroundspan">&lt;span >Background&lt;/span>&lt;/h2>
&lt;p>&lt;span >On January 20th, 2015 the main DOI HTTP proxy at doi.org experienced a partial, rolling global outage. The system was never completely down, but for at least part of the subsequent 48 hours, up to 50% of DOI resolution traffic was effectively broken. This was true for almost all DOI registration agencies, including Crossref, &lt;a href="http://www.datacite.org">DataCite&lt;/a> and &lt;a href="http://www.medra.org.pluma.sjfc.edu">mEDRA&lt;/a>.&lt;/span>&lt;/p>
&lt;p>&lt;span >At the time we kept people updated on what we knew via Twitter, mailing lists and our &lt;a href="https://www-crossref-org.pluma.sjfc.edu/blog/problems-with-dx.doi.org-on-january-20th-2015-what-we-know./">technical blog at CrossTech&lt;/a>. We also promised that, once we’d done a thorough investigation, we’d report back. Well, we haven’t finished investigating all implications of the outage. There are both substantial technical and governance issues to investigate. But last week we provided a preliminary report to the Crossref board on the basic technical issues, and we thought we’d share that publicly now.&lt;/p>
&lt;/span>
&lt;h2 id="span-the-gory-detailsspan">&lt;span >The Gory Details&lt;/span>&lt;/h2>
&lt;p>&lt;span >First, the outage of January 20th was not caused by a software or hardware failure, but was instead due to an administrative error at the Corporation for National Research Initiatives (CNRI). The domain name “doi.org” is managed by CNRI on behalf of the International DOI Foundation (IDF). The domain name was not on “auto-renew” and CNRI staff simply forgot to manually renew the domain. Once the domain name was renewed, it took about 48 hours for the fix to propagate through the DNS system and for the DOI resolution service to return to normal. Working with CNRI we analysed traffic through the Handle HTTP proxy and here’s the graph:&lt;/span>&lt;figure id="attachment_537" class="wp-caption alignnone">&lt;/p>
&lt;p>&lt;img class="size-full wp-image-537" src="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/doi_outage_impact.jpeg" alt="Chart of Handle HTTP proxy traffic during outage" width="800" height="545" srcset="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/doi_outage_impact.jpeg 800w, https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/doi_outage_impact-300x204.jpeg 300w, https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/doi_outage_impact-624x425.jpeg 624w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px" />&lt;figcaption class="wp-caption-text">The above graph shows traffic over a 24 hour period on each day from January 12, 2015 through February 10th, 2015. The heavy blue line for January 20th and the heavy red line for January 21st show how referrals declined as the doi.org domain was first deleted, and then added back to DNS.&lt;/figcaption>&lt;/figure>&lt;/p>
&lt;p>&lt;span >It could have been much worse. The domain registrar (GoDaddy) at least had a “&lt;a href="https://www.godaddy.com/en-ph/help/what-happens-when-my-domain-expires-609">renewal grace and registry redemption period&lt;/a>” which meant that even though CNRI forgot to pay its bill to renew the domain, the domain was simply “parked” and could easily be renewed by them. This is the standard setting for GoDaddy. Cheaper domain registrars might not include this kind of protection by default. Had there been no grace period, then it would have been possible for somebody other than CNRI to quickly buy the domain name as soon as it expired. There are many automated processes which search for and register recently expired domain names. Had this happened, at the very least it would have been expensive for CNRI to buy the domain back. The interruption to DOI resolutions during this period would have also been almost complete.&lt;/span>&lt;/p>
&lt;p>&lt;span >So we got off relatively easy. The domain name is now on auto-renew. The outage was not as bad as it could have been. It was addressed quickly and we can be reasonably confident that the same administrative error will not happen again. Crossref even managed to garner some public praise for the way in which we handled the outage. It is tempting to heave a sigh of relief and move on.&lt;/span>&lt;/p>
&lt;p>&lt;span >We also know that everybody involved at CNRI, the IDF and Crossref have felt truly dreadful about what happened. So it is also tempting to not re-open old wounds.&lt;/span>&lt;/p>
&lt;p>&lt;span >But it would be a mistake if we did not examine a fundamental strategic issue that this partial outage has raised: How can Crossref claim that its DOIs are ‘persistent’ if Crossref does not control some of the key infrastructure on which it depends? What can we do to address these dependencies?&lt;/span>&lt;/p>
&lt;h2 id="span-what-do-we-mean-by-persistentspanfigure-idattachment_540--classwp-caption-alignnone">&lt;span >What do we mean by “persistent?”&lt;/span>&lt;figure id="attachment_540" class="wp-caption alignnone">&lt;/h2>
&lt;p>&lt;img class="size-full wp-image-540" src="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image02.png" alt="@kaythaney tweets on definition of &amp;quot;persistent&amp;quot;" width="542" height="66" srcset="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image02.png 542w, https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image02-300x37.png 300w" sizes="(max-width: 542px) 85vw, 542px" />&lt;figcaption class="wp-caption-text">&lt;/span> &lt;span >@kaythaney tweets on definition of “persistent”&lt;/span>&lt;/figcaption>&lt;/figure>&lt;/p>
&lt;p>&lt;span >To start with, we should probably explore what we mean by ‘persistent’. We use the word “persistent” or “persistence” about 470 times on the Crossref web site. The word “persistent” appears central to our image of ourselves and of the services that we provide. We describe our core, mandatory service as the “Crossref Persistent Citation Infrastructure.”&lt;/span>&lt;/p>
&lt;p>&lt;span >The primary sense of the word “persistent” in the New Oxford American Dictionary is:&lt;/span>&lt;/p>
&lt;blockquote>
&lt;p>&lt;span >Continuing firmly or obstinately in a course of action in spite of difficulty or opposition.&lt;/span>&lt;/p>
&lt;/blockquote>
&lt;p>&lt;span >We play on this sense of the word as a synonym for “stubborn” when we half-jokingly say that, “Crossref DOIs are as persistent as Crossref staff.” Underlying this joke is a truth, which is that persistence is primarily a social issue, not a technical issue.&lt;/span>&lt;/p>
&lt;p>&lt;span >Yet presumably we once chose to use the word “persistent” instead of “perpetual” or “permanent” for other reasons. “Persistence” implies longevity, without committing to “forever.” Scholarly publishers, perhaps more than most industries, understand the long term. After all, the scholarly record dates back to at least 1665 and we know that the scholarly community values even our oldest journal backfiles. By using the word “persistent” as opposed to the more emphatic “permanent” we are essentially acknowledging that we, as an industry, understand the complexity and expense of stewarding the content for even a few hundred years to say nothing of “forever.” Only the chronologically naïve would recklessly coin terms like “permalink” for standard HTTP links which have a documented half-life of well under a decade.&lt;/span>&lt;/p>
&lt;p>&lt;span >So “persistent” implies longevity- without committing to forever- but this still begs questions. What time span is long enough to qualify as “persistent?” What, in particular, do we mean by “persistent” when we talk about Crossref’s “Persistent Citation Infrastructure?” or of Crossref DOIs being “persistent identifiers?”&lt;/span>&lt;/p>
&lt;h2 id="span-what-do-we-mean-by-persistent-identifiersspanfigure-idattachment_541--classwp-caption-alignnone">&lt;span >What do we mean by “persistent identifiers?”&lt;/span>&lt;figure id="attachment_541" class="wp-caption alignnone">&lt;/h2>
&lt;p>&lt;img class="size-full wp-image-541" src="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image03.png" alt="@violetailik tweets on outage and implication for term &amp;quot;persistent identifier&amp;quot;" width="543" height="64" srcset="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image03.png 543w, https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image03-300x35.png 300w" sizes="(max-width: 543px) 85vw, 543px" />&lt;figcaption class="wp-caption-text">&lt;/span> &lt;span >]&lt;a href="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image03.png">5&lt;/a> @violetailik tweets on outage and implication for term “persistent identifier”&lt;/span>&lt;/figcaption>&lt;/figure>&lt;/p>
&lt;p>&lt;span >First, we often make the mistake of talking about “persistent identifiers” as if there is some technical magic that makes them continue working when things like HTTP URIs break. The very term “persistent identifier” encourages this kind of magical thinking and, ideally, we would instead talk about “persist-able” identifiers. That is, those that have some form of indirection built into them. There are many technologies that do this- Handles, DOIs, Purls, ARKs and every URL shortener in existence. Each of them simply introduces a pointer mapping between an identifier and location where a resource or content resides. This mapping can be updated when the content moves, thus preserving the link. Of course, just because an identifier is persist-able doesn’t mean it is persistent. If Purls or DOIs are not updated when content moves, then they are no more persistent than normal URLs.&lt;/span>&lt;/p>
&lt;p>&lt;span >&lt;a href="http://andrew.treloar.net/">Andrew Treloar&lt;/a> points out that when we talk about “persistent identifiers,” we tend to conflate several things:&lt;/span>&lt;/p>
&lt;ol >
&lt;li>
&lt;span >The persistence of the identifier- that is the token or string itself.&lt;/span>
&lt;/li>
&lt;li>
&lt;span >The persistence of the thing being pointed at by the identifier. For example, the content.&lt;/span>
&lt;/li>
&lt;li>
&lt;span >The persistence of the mapping of the identifier to the thing being identified.&lt;/span>
&lt;/li>
&lt;li>
&lt;span >The persistence of the resolver that allows one to follow the mapping of the identifier to the thing being identified.&lt;/span>
&lt;/li>
&lt;li>
&lt;span >The persistence of a mechanism for updating the mapping of the identifier to the thing being identified.&lt;/span>
&lt;/li>
&lt;/ol>
&lt;p>&lt;span >If any of the above fails, then “persistence” fails. This is probably why we tend to conflate them in the first place.&lt;/span>&lt;/p>
&lt;p>&lt;span >Each of these aspects of “persistence” is worthy of much closer scrutiny, however, in the most recent case of the January outage of “doi.org,” the problem specifically occurred with item “D”- the persistence of the resolver. When CNRI failed to renew the domain name for “doi.org” on time, the DOI resolver was rendered unavailable to a large percentage of people over a period of about 48 hours as global DNS servers first removed, and then added back the “doi.org” domain.&lt;/span>&lt;/p>
&lt;h2 id="span-turtles-all-the-way-downa-hrefhttpenwikipediaorgwikiturtles_all_the_way_downaspan">&lt;span >Turtles all the way down&lt;a href="http://en.wikipedia.org/wiki/Turtles_all_the_way_down">*&lt;/a>&lt;/span>&lt;/h2>
&lt;p>&lt;span >The initial public reaction to the outage was, almost unanimous in one respect- people assumed that the problem originated with Crossref.&lt;/span>&lt;figure id="attachment_544" class="wp-caption alignnone">&lt;/p>
&lt;p>&lt;img class="size-full wp-image-544" src="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image06.png" alt="@iainh_z tweets to Crossref enquiring about failed DOI resoluton" width="543" height="69" srcset="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image06.png 543w, https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image06-300x38.png 300w" sizes="(max-width: 543px) 85vw, 543px" />&lt;figcaption class="wp-caption-text">&lt;/span> &lt;span >@iainh_z tweets to Crossref enquiring about failed DOI resoluton&lt;/span>&lt;/figcaption>&lt;/figure> &lt;figure id="attachment_543" class="wp-caption alignnone">&lt;img class="size-full wp-image-543" src="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image05.png" alt="@LibSkrat tweets at Crossref about DOI outage" width="540" height="65" srcset="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image05.png 540w, https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image05-300x36.png 300w" sizes="(max-width: 540px) 85vw, 540px" />&lt;figcaption class="wp-caption-text">&lt;/span> &lt;span >@LibSkrat tweets at Crossref about DOI outage&lt;/span>&lt;/figcaption>&lt;/figure>&lt;/p>
&lt;p>&lt;span >This is both surprising and unsurprising. It is surprising because we have fairly recent data indicating that lots of people recognise the DOI brand, but not the Crossref brand. Chances are, that this relatively superficial “brand” awareness does not correlate with understanding how the system works or how it relates to persistence. It is likely plenty of people clicked on DOIs at the time of the outage and, when they didn’t work, simply shrugged or cursed under their breath. They were aware of the term ‘DOI’ but not of the promise of “persistence”. Hence, they did not take to twitter to complain about it, and if they did, they probably wouldn’t have known who to complain to or even how to complain to them (neither CNRI or the IDF has a Twitter account).&lt;/span>&lt;/p>
&lt;p>&lt;span >But the focus on Crossref is also unsurprising. Crossref is by far the largest and most visible DOI Registration Agency. Many otherwise knowledgeable people in the industry simply don’t know that there are even other RAs.&lt;/span>&lt;/p>
&lt;p>&lt;span >They also generally didn’t know of the strategic dependencies that exist in the Crossref system. By “strategic dependencies” we are not talking about the vendors, equipment and services that virtually every online enterprise depends on. These kinds of services are largely fungible. Their failures may be inconvenient and even dramatic, but they are rarely existential.&lt;/span>&lt;/p>
&lt;p>&lt;span >Instead we are talking about dependencies that underpin Crossref’s ability to deliver on its mission. Dependencies that not only affect Crossref’s operations, but also its ability to self-govern and meet the needs of its membership. In this case there are three major dependencies: Two of which are specific to Crossref and other DOI registration agencies and one which is shared by virtually all online enterprises today. The organisations are: The International DOI Foundation (IDF), Corporation for National Research Initiatives (CNRI) and the Internet Corporation for Assigned Names and Numbers (ICANN).&lt;/span>&lt;figure id="attachment_545" class="wp-caption alignnone">&lt;/p>
&lt;p>&lt;img class="size-full wp-image-545" src="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image07.png" alt="Dependency of RAs on IDF, CNRI and ICANN. Turtles all the way down." width="800" height="571" srcset="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image07.png 800w, https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image07-300x214.png 300w, https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image07-624x445.png 624w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px" />&lt;figcaption class="wp-caption-text">&lt;/span> &lt;span >Dependency of RAs on IDF, CNRI and ICANN. Turtles all the way down.&lt;/span>&lt;/figcaption>&lt;/figure>&lt;/p>
&lt;p>&lt;span >Each of these agencies has technology, governance and policy impacts on Crossref and the other DOI registration agencies, but here we will focus on the technological dependencies.&lt;/span>&lt;/p>
&lt;p>&lt;span >At the top of the diagram are a subset of the various DOI Registration Agencies. Each RA uses the DOI for a particular constituency (e.g. scholarly publishers) and application (e.g. citation). Sometimes these constituencies/applications overlap (as with mEDRA, Crossref and DataCite), but sometimes they are orthogonal to the other RAs, as is the case with EIDR. All, however, are members of the IDF.&lt;/span>&lt;/p>
&lt;p>&lt;span >The IDF sets technical policies and development agendas for the DOI infrastructure. This includes recommendations about how RAs should display and link DOIs. Of course all of these decisions have an impact on the RAs. However, the IDF provides little technical infrastructure of its own as it has no full-time staff. Instead it outsources the operation of the system to CNRI, this includes the management of the doi.org domain which the IDF owns.&lt;/span>&lt;/p>
&lt;p>&lt;span >The actual DOI infrastructure is hosted on a platform called the &lt;a href="http://en.wikipedia.org/wiki/Handle_System">Handle System&lt;/a> which was developed by and is currently run by CNRI. The Handle System is part of a quite complex and sophisticated platform for managing digital objects that was originally developed for &lt;a href="http://en.wikipedia.org/wiki/DARPA">DARPA&lt;/a>. A subset of the Handle system is designated for use by DOIs and is identified by the “10” prefix (e.g. 10.5555/12345678). The Handle system itself is not based on HTTP (the web protocol). Indeed, one of the much touted features of the Handle System is that it isn’t based on any specific resolution technology. This was seen as a great virtue in the late 1990s when the DOI system was developed and the internet had just witnessed an explosion of seemingly transient, competing protocols (e.g. &lt;a href="http://en.wikipedia.org/wiki/Gopher_%28protocol%29">Gopher&lt;/a>, &lt;a href="http://en.wikipedia.org/wiki/Wide_area_information_server">WAIS&lt;/a>, &lt;a href="http://en.wikipedia.org/wiki/Archie_search_engine">Archie&lt;/a>, &lt;a href="http://www.mprove.de/diplom/text/2.1.15_hyperg.html">HyperWave/Hyper-G&lt;/a>, HTTP, etc.). But what looked like a wild-west of protocols quickly settled into an HTTP hegemony. In practice, virtually all DOI interactions with the Handle system are via HTTP and so, in order to interact with the web, the Handle System employs a “Handle proxy” which translates back and forth between HTTP, and the native Handle system. This all may sound complicated, and the backend of the Handle system is really very sophisticated, but it turns out that the DOI really uses only a fraction of the Handle system’s features. In fact, the vast majority of DOI interactions merely use the Handle system as a giant lookup table which allows one to translate an identifier into a web location. For example, it will take a DOI Handle like this:&lt;/span>&lt;/p>
&lt;pre>&lt;span >10.5555/12345678&lt;/span>&lt;/pre>
&lt;p>&lt;span >and redirect it to (as of this writing) the following URL:&lt;/span>&lt;/p>
&lt;pre>&lt;span >http://psychoceramics.labs.crossref.org.pluma.sjfc.edu/10.5555-12345678.html&lt;/span>&lt;/pre>
&lt;p>&lt;span >This whole transformation is normally never seen by a user. It is handled transparently by the web browser, which does the lookup and redirection in the background using HTTP and talking to the Handle Proxy. In the late 1990s, even doing this simple translation quickly, at scale with a robust distributed infrastructure, was not easy. These days however we see dozens if not hundreds of “URL Shorteners” doing exactly the same thing at far greater scale than the Handle System.&lt;/span>&lt;/p>
&lt;p>&lt;span >It may seem a shame that more of the Handle Systems features are not used, but the truth is the much touted platform independence of the Handle System rapidly became more of a liability and impediment to persistence than an aid. To be blunt, if in X years a new technology comes out that supersedes the web, what do we think the societal priority is going to be?&lt;/span>&lt;/p>
&lt;ul>
&lt;li>&lt;span >To provide a robust and transparent transition from the &lt;a href="http://en.wiktionary.org/wiki/squillion">squillions&lt;/a> of existing HTTP URI identifiers that the entire world depends on?&lt;/span>&lt;/li>
&lt;li>&lt;span >To provide a robust and transparent transition from the tiny subset of Handle-based identifiers that are used by about a hundred million specialist resources?&lt;/span>&lt;/li>
&lt;/ul>
&lt;p>&lt;span >Quite simply, the more the Handle/DOI systems diverge from common web protocols and practice, then the more we will jeopardise the longevity of our so-called persistent identifiers.&lt;/span>&lt;/p>
&lt;p>&lt;span >So, in the end, DOI registration agencies really only use the Handle system for translating web addresses. All of the other services and features one might associate with DOIs (reference resolution, metadata lookup, content negotiation, OAI-PMH, REST APIs, Crossmark, CrossCheck, TDM Services, FundRef etc) are all provided at the RA level.&lt;/span>&lt;/p>
&lt;p>&lt;span >But this address resolution is still critical. And it is exactly what failed for many users on January 20th 2015. And to be clear, it wasn’t the robust and scaleable Handle System that failed. It wasn’t the Handle Proxy that failed. And it certainly wasn’t any RA-controlled technology that failed. These systems were all up and running. What happened was that the standard handle proxy that the IDF recommends RAs use, “dx.doi.org”, was effectively rendered invisible to wide portions the internet because the “doi.org” domain was not renewed. This underscores two important points.&lt;/span>&lt;/p>
&lt;p>&lt;span >The first is that it doesn’t much matter what precisely caused the outage. In this case it was an administrative error. But the effect would have been similar if the Handle proxies had failed of if the Handle system itself had somehow collapsed. In the end, Crossref and all DOI registration agencies are existentially dependent on the Handle system running and being accessible.&lt;/span>&lt;/p>
&lt;p>&lt;span >The second is that the entire chain of dependencies from the RAs down through CNRI are also dependent on the DNS system which, in turn, is governed by ICANN. We should really not be making too much of the purported technology independence of the DOI and Handle systems. To be fair, this limitation is inherent to all persistent identifier schemes that aim to work with the web. It really is “&lt;a href="http://en.wikipedia.org/wiki/Turtles_all_the_way_down">turtles all the way down.&lt;/a>”&lt;/span>&lt;/p>
&lt;h2 id="span-what-didnt-fail-on-january-19th20th-and-whyspan">&lt;span >What didn’t fail on January 19th/20th and why?&lt;/span>&lt;/h2>
&lt;p>&lt;span >You may have noticed a lot of hedging in our description of the outage of January 19th/20th. For one thing, we use the term “rolling outage.” Access to the Handle Proxy via “dx.doi.org” was never completely unavailable during the period. As we’ve explained, this is because the error was discovered very quickly and the domain was renewed hours after it expired. The nature of DNS propagation meant that even as some DNS servers were deleting the “doi.org” entry, others were adding it back to their tables. In some ways this was really confusing because it meant it was difficult to predict where the system was working and where it wasn’t. Ultimately it all stabilised after the standard 48-hour DNS propagation cycle.&lt;/span>&lt;/p>
&lt;p>&lt;span >But there were also some Handle-based services that simply were not affected at all by the outage. During the outage, a few people asked us if there was an alternative way to resolve DOIs. The answer was “yes,” there were several. It turns out that “doi.org” is not the only DNS name that points to the Handle Proxy. People could easily substitute “dx.doi.org” with “dx.crossref.org” or “dx.medra.org” or “hdl.handle.net” and “resolve” any DOI. Many of Crossref’s internal services use these internal names and so the services continued to work. This is partly why we only discovered the “doi.org” was down from people reporting it on Twitter.&lt;/span>&lt;/p>
&lt;p>&lt;span >And, of course, there were other services that were not affected by the outage. Crossmark, the REST API, and Crossref Metadata Search all continued to work during the outage.&lt;/span>&lt;/p>
&lt;h2 id="span-protecting-ourselvesspan">&lt;span >Protecting ourselves&lt;/span>&lt;/h2>
&lt;p>&lt;span >So what can we do to reduce our dependencies and/or the risks intrinsic to those dependencies?&lt;/span>&lt;/p>
&lt;p>&lt;span >Obviously, the simplest way to have avoided the outage would have been to ensure that the “doi.org” domain was set to automatically renew. That’s been done. Is there anything else we should do? A few ideas have been floated that might allow us to provide even more resilience. They range greatly in complexity and involvement.&lt;/span>&lt;/p>
&lt;ol>
&lt;li>&lt;span >Provide well-publicised public status dashboards that show what systems are up and which clearly map dependencies so that people could, for instance, see that the doi.org server was not visible to systems that depended on it. Of course, if such a dashboard had been hosted at doi.org, nobody would have been able to connect to it. Stoopid turtles.&lt;/span>&lt;/li>
&lt;li>&lt;span >Encourage DOI RAs to have the members point to Handle proxies using domain names under the RA’s control. Simply put, if Crossref members had been using “dx.crossref.org” instead of “dx.doi.org”, then Crossref DOIs would have continued to work throughout the outage of “doi.org”. The same with mEDRA, and the other RAs. This way each RA would have control over another critical piece of their infrastructure. It would also mean that if any single RA made a similar domain name renewal mistake, the impact would be isolated to a particular constituency. Finally, using RA-specific domains for resolving DOIs might also make it clear that different DOIs are managed by different RAs and might have different services associated with them. Perhaps Crossref would spend less time supporting non-Crossref DOIs?&lt;/span>&lt;/li>
&lt;li>&lt;span >Provide a parallel, backup resolution technology that could be pointed to in the event of a catastrophic Handle System failure. For example we could run a parallel system based on &lt;a href="http://en.wikipedia.org/wiki/Persistent_uniform_resource_locator">PURLs&lt;/a>, &lt;a href="http://en.wikipedia.org/wiki/Archival_Resource_Key">ARKs&lt;/a> or another persist-able identifier infrastructure.&lt;/span>&lt;/li>
&lt;li>&lt;span >Explore working with ICANN to get the handle resolvers moved under the special “.arpa” top level domain (TLD). This TLD (&lt;a href="https://tools.ietf.org/html/rfc3172">RFC 3172&lt;/a>) is reserved for services that are considered to be “critical to the operation of the internet.” This is an option that was first discussed at &lt;a href="http://www.circleid.com/posts/20111215_providing_persistent_domain_names_under_arpa/">a meeting of persistent identifier providers in 2011&lt;/a>.&lt;/span>&lt;/li>
&lt;/ol>
&lt;p>&lt;span >These are all tactical approaches to addressing the specific technical problem of the Handle System becoming unavailable, but they do not address deeper issues relating to our strategic dependence on several third parties. Even though the IDF and CNRI provide us with pretty simple and limited functionality, that functionality is critical to our operations and our claim to be providing persistent identifiers. Yet these technologies are not in our direct control. We had to scramble to get hold of people to fix the problem. For a while, we were not able to tell our users or members what was happening because we did not know ourselves.&lt;/span>&lt;/p>
&lt;p>&lt;span >The irony is that &lt;em>Crossref&lt;/em> was held to account, and we were in the firing line the entire time. Again, this was almost unavoidable. In addition to being the largest DOI RA, we are also the only RA that has any significant social media presence and support resources. Still, it meant that we were the public face of the outage while the IDF and CNRI remained in the background.&lt;/span>&lt;/p>
&lt;p>&lt;span >And this is partly why our board has encouraged us to investigate another option:&lt;/span>&lt;/p>
&lt;ol start="5">
&lt;li>
&lt;span >Explore what it would take to remove Crossref dependencies on the IDF and CNRI.&lt;/span>
&lt;/li>
&lt;/ol>
&lt;p>&lt;span >Crossref is just part of a chain of dependencies the goes from our members down through the IDF, CNRI and, ultimately, ICANN. Our claim to providing a persistent identifier structure depends entirely on the IDF and CNRI. Here we have explored some of the technical dependencies. But there are also complex governance and policy implications of these dependencies. Each organisation has membership rules, guidelines and governance structures which can impact Crossref members. Indeed, the IDF and CNRI are themselves members of groups (ISO and DONA, respectively) which might ultimately have policy or governance impact for DOI registration agencies. We will need to understand the strategic implications of these non technical dependencies as well.&lt;/span>&lt;/p>
&lt;p>&lt;span >Note that the Crossref board has merely asked us to “explore” what it would take to remove dependencies. They have not asked us to actually take any action. Crossref has been massively supportive of the IDF and CNRI, and they have been massively supportive of us. Still, over the years we have all grown and our respective circumstances have changed. It is important that occasionally we question what we might have once considered to be axioms. As we discussed above, we use the term “persistent” which, in turn, is a synonym for “stubborn.” At the very least we need to document the inter-dependencies that we have so that we can understand just how stubborn we can reasonably expect our identifiers to be.&lt;/span>&lt;/p>
&lt;p>&lt;span >The outage of January 20th was a humbling experience. But in a way we were lucky: Forgetting to renew the domain name was a silly and prosaic way to partially bring down a persistent identifier infrastructure, but it was also relatively easy to fix. Inevitably, there was a little snark and some pointed barbs directed at us during the outage, but we were truly overwhelmed by the support and constructive criticism we received as well. We have also been left with a clear message that, in order for this good-will to continue, we need to follow-up with a public, detailed and candid analysis of our infrastructure and its dependencies. Consider this to be the first section of a multi-part report.&lt;/span>&lt;figure id="attachment_539" class="wp-caption alignnone">&lt;/p>
&lt;p>&lt;img class="size-full wp-image-539" src="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image01.png" alt="@kevingashley tweets asking for followup analysis" width="544" height="63" srcset="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image01.png 544w, https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image01-300x35.png 300w" sizes="(max-width: 544px) 85vw, 544px" />&lt;figcaption class="wp-caption-text">&lt;/span> &lt;span >@kevingashley tweets asking for followup analysis&lt;/span>&lt;/figcaption>&lt;/figure> &lt;figure id="attachment_542" class="wp-caption alignnone">&lt;img class="size-full wp-image-542" src="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image04.png" alt="@WilliamKilbride tweets asking for followup and lessons learned" width="539" height="63" srcset="https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image04.png 539w, https://www-crossref-org.pluma.sjfc.edu/wp/blog/uploads/2015/03/image04-300x35.png 300w" sizes="(max-width: 539px) 85vw, 539px" />&lt;figcaption class="wp-caption-text">&lt;/span> &lt;span >@WilliamKilbride tweets asking for followup and lessons learned&lt;/span>&lt;/figcaption>&lt;/figure>&lt;/p>
&lt;h3 id="span-image-creditsspan">&lt;span >Image Credits&lt;/span>&lt;/h3>
&lt;p>&lt;span >Turtle image CC-BY “Unrecognised MJ” from the Noun Project&lt;/span>&lt;/p></description></item><item><title>Problems with dx.doi.org on January 20th 2015- what we know.</title><link>https://www-crossref-org.pluma.sjfc.edu/blog/problems-with-dx.doi.org-on-january-20th-2015-what-we-know./</link><pubDate>Wed, 21 Jan 2015 00:00:00 +0000</pubDate><author>Geoffrey Bilder</author><guid>https://www-crossref-org.pluma.sjfc.edu/blog/problems-with-dx.doi.org-on-january-20th-2015-what-we-know./</guid><description>&lt;p>&lt;span >&lt;a href="http://www.urbandictionary.com/define.php?term=Hells%20Teeth">Hell’s teeth&lt;/a>.&lt;/span>&lt;/p>
&lt;p>&lt;span >So today (January 20th, 2015) the DOI HTTP resolver at dx.doi.org started to fail intermittently around the world. The doi.org domain is managed by &lt;a href="http://www.cnri.reston.va.us/">CNRI&lt;/a> on behalf of the &lt;a href="http://www.doi.org.pluma.sjfc.edu/">International DOI Foundation&lt;/a>. This means that the problem affected all DOI registration agencies including Crossref, &lt;a href="https://www.datacite.org/">DataCite&lt;/a>, &lt;a href="https://www-medra-org.pluma.sjfc.edu/">mEDRA&lt;/a> etc. This also means that more popularly known end-user services like &lt;a href="http://figshare.com/">FigShare&lt;/a> and &lt;a href="https://zenodo.org/">Zenodo&lt;/a> were affected. The problem has been fixed, but the fix will take some time to propagate throughout the DNS system. You can monitor the progress here:&lt;/span>&lt;/p>
&lt;p>&lt;span >&lt;a href="https://www.whatsmydns.net/#A/doi.org">&lt;a href="https://www.whatsmydns.net/#A/doi.org" target="_blank">https://www.whatsmydns.net/#A/doi.org&lt;/a>&lt;/a>&lt;/span>&lt;/p>
&lt;p>&lt;span >Now for the embarrassing stuff…&lt;/span>&lt;/p>
&lt;p>&lt;span >At first lots of people were speculating that the problem had to do with somebody forgetting to renew the dx.doi.org domain name. Our information from CNRI was that the problem had to do with a mistaken change to a DNS record and that the domain name wasn’t the issue. We corrected people who were reporting that domain name renewal as the cause, but eventually we learned that it was actually true. We have had it confirmed that the problem originated with CNRI manually renewing the domain name at the last minute. Ugh. &lt;span >CNRI will issue a statement soon. We’ll link to it as soon as they do.&lt;/span> UPDATE (Jan 21st): CNRI has sent Crossref a statement. They do not have it on their site yet, so we have can included it &lt;a href="#cnri">below&lt;/a>.&lt;/span>&lt;/p>
&lt;p>&lt;span >In the mean time, if you are having trouble resolving DOIs, a neat trick to know is that you can do so using the Handle system directly. For example:&lt;/span>&lt;/p>
&lt;p>&lt;span >&lt;a href="http://hdl.handle.net/10.5555/12345678">&lt;a href="http://hdl.handle.net/10.5555/12345678" target="_blank">http://hdl.handle.net/10.5555/12345678&lt;/a>&lt;/a>&lt;/span>&lt;/p>
&lt;p>&lt;span >Crossref will, of course, also analyse what occurred, and issue a public report as well. Obviously, this report will include an analysis of how the outage effected DOI referrals to our members.&lt;/span>&lt;/p>
&lt;p>&lt;span >The amazingly cool thing is that everybody online has been very supportive and has helped us to diagnose the problem. Some have even said that the event underscores a point we often make about so-called “persistent-identifiers”- which is that they are not magic technology; the “persistence” is the result of a social contract. We like to say that Crossref DOIs are as persistent as Crossref staff. Well, to that phrase we have to add “and IDF staff” and “CNRI staff” and “ICANN staff”. It is &lt;a href="http://en.wikipedia.org/wiki/Turtles_all_the_way_down">turtles all the way down&lt;/a>.&lt;/span>&lt;/p>
&lt;p>&lt;span >We don’t want to dismiss this event as an inevitable consequence of interdependent systems.And we don’t want to pass the buck. We need to learn something practical from this. How can we guard against this type of problem in the future? Again, people following this issue on Twitter have already been helping with suggestions and ideas. Can we crowd-source the monitoring of persistent identifier SLAs? Could we leverage Wikipedia, Wikidata or something similar to monitor critical identifiers and other infrastructure like purls, DOIs, handles, PMIDs, perma.cc, etc? Should we be looking at designating special exceptions to the normal rules governing DNS names? Do we need to distribute the risk more? Or is it enough &lt;em>cough&lt;/em> to simply ensure that somebody, somewhere in the dependency chain had enabled DNS protection and auto-renewal for critical infrastructure DNS names?&lt;/span>&lt;/p>
&lt;p>&lt;span >Truly, we are humbled. For all the redundancy built into our systems (multiple servers, multiple hosting sites, Raid drives, redundant power), we were undone by a simple administrative task. Crossref, IDF and CNRI- we all feel &lt;a href="http://www.urbandictionary.com/define.php?term=a%20bit%20crap">a bit crap&lt;/a>. But we’ll get back. We’ll fix things. And we’ll let you know how we do it.&lt;/span>&lt;/p>
&lt;p>&lt;span >We will update this space as we know more. We will also keep people updated on twitter on @CrossrefNews. And we will report back in detail as soon as we can.&lt;/span>&lt;/p>
&lt;hr>
&lt;h3 id="cnri">CNRI Statement&lt;/h3>
&lt;p>&lt;code>&amp;quot;The doi.org domain name was inadvertently allowed to expire for a brief period this morning (Jan 20). It was reinstated shortly after 9am this morning as soon as the relevant CNRI employee learned of it. A reminder email sent earlier this month to renew the registration was apparently missed. We sincerely apologize for any difficulties this may have caused. The domain name has since been placed on automatic renewal, which should prevent any repeat of this event.&amp;quot;&lt;/code>&lt;/p></description></item><item><title>Yer Basic One-Liner</title><link>https://www-crossref-org.pluma.sjfc.edu/blog/yer-basic-one-liner/</link><pubDate>Tue, 14 Oct 2008 00:00:00 +0000</pubDate><author>Tony Hammond</author><guid>https://www-crossref-org.pluma.sjfc.edu/blog/yer-basic-one-liner/</guid><description>&lt;p>&lt;a href="https://www-crossref-org.pluma.sjfc.edu/wp/blog/images/one-line-alert.jpg">&lt;img border="0" alt="one-line-alert-small0.jpg" src="https://www-crossref-org.pluma.sjfc.edu/wp/blog/images/one-line-alert-small0.jpg" width="130" height="150" style="float:right; margin-left=20px" />&lt;/a>&lt;/p>
&lt;p>Here&amp;rsquo;s your basic one-line handle client (all of it) for the browser:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Util&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="nx">getHandleData&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;10.1038/nature05826&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kd">function&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">data&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">alert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Util&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="nx">helloWorld&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">data&lt;/span>&lt;span class="p">));&lt;/span> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Can&amp;rsquo;t see how to make that much shorter (bar tossing spaces). But here&amp;rsquo;s one attempt (shorter though now it&amp;rsquo;s not strictly a one-liner):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">u&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Util&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">u&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">getHandleData&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;10.1038/nature05826&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kd">function&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">_&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">alert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">u&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">helloWorld&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">_&lt;/span>&lt;span class="p">));&lt;/span> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Here I&amp;rsquo;ve used two utility convenience methods from the OpenHandle client library:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Util&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="nx">getHandleData&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">handle&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">callback&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nx">server&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Util&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="nx">helloWorld&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">JSON&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You will though need to include a couple of libraries: &lt;a href="http://archive.is/TF3tq" target="_blank">openhandle.js&lt;/a> and &lt;a href="http://jquery.com/" target="_blank">jquery.js&lt;/a>. (Note that the &lt;span style="font-family: arial, sans-serif; font-size: 8pt; color: #00f; text-decoration: none">getHandleData()&lt;/span> method supplied in the &lt;a href="http://archive.is/TF3tq" target="_blank">openhandle.js&lt;/a> library uses &lt;a href="http://jquery.com/" target="_blank">jQuery&lt;/a>. Feel free to overwrite that.) A complete working document can thus be implemented as:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">html&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">head&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;text/javascript&amp;#34;&lt;/span> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;http://jqueryjs.googlecode.com/files/jquery-1.2.6.js&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;text/javascript&amp;#34;&lt;/span> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;http://openhandle.googlecode.com/files/openhandle-0.2.3.js&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;text/javascript&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">jQuery&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="nx">ready&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kd">function&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="cm">/* action when body content is loaded */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">u&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Util&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="nx">u&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">getHandleData&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;10.1038/nature05826&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kd">function&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">_&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">alert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">u&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">helloWorld&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">_&lt;/span>&lt;span class="p">));&lt;/span> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">head&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">body&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Boo!
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">body&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">html&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Let me know if this doesn&amp;rsquo;t work for you. I&amp;rsquo;ve tried to test this and seems to function OK but sure as the sun rises I ain&amp;rsquo;t no &lt;a href="http://www.slideshare.net/jeresig/secrets-of-javascript-libraries?src=embed" target="_blank">JS ninja&lt;/a>.&lt;/p>
&lt;p>Of course, we normally want to do more than just dump the values. So, given that it&amp;rsquo;s pretty straightforward to grab and to manipulate a handle&amp;rsquo;s data values over the Web, how can we put this into practice?&lt;/p>
&lt;p>Let&amp;rsquo;s consider a couple of Crossref use cases.&lt;/p>
&lt;p>&lt;em>(Disclaimer: These examples are not intended as being in any way a replacement for the existing Crossref services but merely show how those services could be implemented on the client side. These illustrations will be useful for new bespoke services accessing other data elements that may be registered with the DOI.)&lt;/em>&lt;/p>
&lt;p>&lt;strong>Single Resolution&lt;/strong>&lt;/p>
&lt;p>Here is how one could implement the regular URL redirect service from the client:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">handle&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;10.1038/nature05826&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">callback&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kd">function&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">json&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">hv&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Handle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">json&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">getValuesByType&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">‘&lt;/span>&lt;span class="nx">URL&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">HandleValue&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">hv&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">getData&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// alert(&amp;#34;Redirecting to &amp;#34; + url);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nb">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">location&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">url&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Util&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="nx">getHandleData&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">handle&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">callback&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;code>getValuesByType(‘URL')[0]&lt;/code> call returns the first handle value of type &amp;lsquo;URL&amp;rsquo;. The next line just parses this value as a handle value object and gets the data field, i.e. the URL itself.&lt;/p>
&lt;p>Note here that this client can show the URL that the user will be redirected to. With normal DOI resolution the resolution takes place on the proxy server (&lt;a href="http://dx.doi.org.pluma.sjfc.edu/" target="_blank">dx.doi.org&lt;/a>) and the URL is not available to the user - until they are so redirected. In fact, the user may never get to see the URL stored in the handle value if this is the head of a redirect chain.&lt;/p>
&lt;p>To recap, Crossref DOIs are not resolved by the user to URLs - rather, they invoke a service on the server which returns a content page.&lt;/p>
&lt;p>&lt;strong>Multiple Resolution&lt;/strong>&lt;/p>
&lt;p>Let&amp;rsquo;s now take a look at a case of Crossref multiple resolution. This code uses the &lt;code>getValues()&lt;/code> method to return all values:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">handle&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;10.1130/B25510.1&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">callback&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kd">function&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">json&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">s&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">hv&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="k">new&lt;/span> &lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Handle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">json&lt;/span>&lt;span class="p">)).&lt;/span>&lt;span class="nx">getValues&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kd">var&lt;/span> &lt;span class="nx">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nx">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="nx">hv&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">length&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nx">i&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">v&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">HandleValue&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">hv&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nx">i&lt;/span>&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">s&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="nx">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">getType&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;: &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">getData&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">alert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">s&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Util&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="nx">getHandleData&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">handle&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">callback&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>which yields&lt;/p>
&lt;pre tabindex="0">&lt;code>700050: 200508231619480000
HS_ADMIN: [object Object]
URL.0: http://www.gsajournals.org/gsaonline/?request=get-abstract&amp;amp;doi=10%2E1130%2FB25510%2E1
URL.1: http://bulletin.geoscienceworld.org/cgi/doi/10.1130/B25510.1
CR-LR: &amp;lt;MR&amp;gt;&amp;lt;LI label=&amp;#34;GeoScienceWorld&amp;#34; resource=&amp;#34;URL.1&amp;#34; /&amp;gt;&amp;lt;LI label=&amp;#34;Geological Society of America&amp;#34; resource=&amp;#34;URL.0&amp;#34; /&amp;gt;
&lt;/code>&lt;/pre>&lt;p>Oops! Too much information. This includes types such as &amp;lsquo;700050&amp;rsquo; and &amp;lsquo;HS_ADMIN&amp;rsquo; which are used by the Crossref application, and not intended for the end user. Maybe we should just limit it to the URL types with &lt;code>getValuesByType('URL')&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">getValuesByType&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">‘&lt;/span>&lt;span class="nx">URL&lt;/span>&lt;span class="s1">&amp;#39;):
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">var handle = &amp;#34;10.1130/B25510.1&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">var callback = function(json) {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> var s = &amp;#34;&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> var hv = (new OpenHandle.Handle(json)).getValuesByType(‘URL&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kd">var&lt;/span> &lt;span class="nx">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nx">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="nx">hv&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">length&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nx">i&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">v&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">HandleValue&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">hv&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nx">i&lt;/span>&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">s&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="nx">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">getType&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;: &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">getData&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">alert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">s&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Util&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="nx">getHandleData&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">handle&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">callback&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>which yields&lt;/p>
&lt;pre tabindex="0">&lt;code>URL.0: http://www.gsajournals.org/gsaonline/?request=get-abstract&amp;amp;doi=10%2E1130%2FB25510%2E1
URL.1: http://bulletin.geoscienceworld.org/cgi/doi/10.1130/B25510.1
&lt;/code>&lt;/pre>&lt;p>_(By the way, the previous example shows the unregulated state of handle types. We have everything but the kitchen sink in this one example:&lt;/p>
&lt;ul>
&lt;li>simple types, both well-known (&amp;lsquo;URL&amp;rsquo;) and opaque (&amp;lsquo;700050&amp;rsquo;)
&lt;ul>
&lt;li>
&lt;p>compound, or namespaced, types with various hierarchy delimiters: dot (&amp;lsquo;URL.0&amp;rsquo;, &amp;lsquo;URL.1&amp;rsquo;), underscore (&amp;lsquo;HS_ADMIN&amp;rsquo;), and hyphen (&amp;lsquo;CR-LR&amp;rsquo;)&lt;/ul>
Well, they&amp;rsquo;re all in there now so we gotta deal with that, but generally one would probably have preferred well-known types and where namespaces are used the usual dot notation as this is a) familiar to programmers, and b) supported by the handle client library code. The underscore is used in the handle RFCs for system types so that can be viewed as a sort of inline namespacing. Seems to be no obvious excuse for hyphens though.)&lt;/i>&lt;/p>
&lt;p>Back to the example we can see that the first URL goes to a Crossref service which we can dispense with since this example is to be run client side. That leaves us with the two actual URL targets. But how to differentiate those for a user choice? That&amp;rsquo;s where that other type &amp;lsquo;CR-LR&amp;rsquo; comes in which provides an XML fragment that relates label to type. There are obviously many ways to support resource labelling - this is just the method used by Crossref.&lt;/p>
&lt;p>Let&amp;rsquo;s parse out the XML fragment for labels and resources and save those in an object keyed on resource:&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">labels&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">hv_&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="k">new&lt;/span> &lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Handle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">json&lt;/span>&lt;span class="p">)).&lt;/span>&lt;span class="nx">getValuesByType&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">‘&lt;/span>&lt;span class="nx">CR&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">LR&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">v&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">HandleValue&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">hv_&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">xml&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">getData&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">li&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">xml&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">match&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/&amp;lt;li [^\&amp;gt;]* \/&amp;gt;/ig&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kd">var&lt;/span> &lt;span class="nx">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nx">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="nx">li&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">length&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nx">i&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">li&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nx">i&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">match&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">/label=\&amp;#34;([^\&amp;#34;]+)\&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">resource&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="s2">&amp;#34;([^\&amp;#34;]+)\&amp;#34;&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="nx">i&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">labels&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nx">a&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">a&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now we&amp;rsquo;ll also need to build a similar object for the URLs:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">urls&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">hv&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="k">new&lt;/span> &lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Handle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">json&lt;/span>&lt;span class="p">)).&lt;/span>&lt;span class="nx">getValuesByType&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">‘&lt;/span>&lt;span class="nx">URL&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kd">var&lt;/span> &lt;span class="nx">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nx">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="nx">hv&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">length&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nx">i&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">v&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nx">OpenHandle&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">HandleValue&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">hv&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nx">i&lt;/span>&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">urls&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nx">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">getType&lt;/span>&lt;span class="p">()]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">getData&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>And now with both these objects we can build a set of labelled links as:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">s&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">item&lt;/span> &lt;span class="k">in&lt;/span> &lt;span class="nx">labels&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">s&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;a href=\&amp;#34;&amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">urls&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nx">item&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;\&amp;#34;&amp;gt;&amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">labels&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nx">item&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;/a&amp;gt;&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">alert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">s&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>to yield&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">a&lt;/span> &lt;span class="na">href&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;http://bulletin.geoscienceworld.org/cgi/doi/10.1130/B25510.1&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>GeoScienceWorld&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">a&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">a&lt;/span> &lt;span class="na">href&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;http://www.gsajournals.org/gsaonline/?request=get-abstract&amp;amp;doi=10%2E1130%2FB25510%2E1&amp;#34;&lt;/span>&lt;span class="na">gt&lt;/span>&lt;span class="err">;&lt;/span>&lt;span class="na">Geological&lt;/span> &lt;span class="na">Society&lt;/span> &lt;span class="na">of&lt;/span> &lt;span class="na">America&lt;/span>&lt;span class="err">&amp;lt;/&lt;/span>&lt;span class="na">a&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>How to build a page with those labelled links is now a simple exercise. (The actual Crossref service for &lt;a href="http://dx.doi.org.pluma.sjfc.edu/10.1130/B25510.1" target="_blank">doi:10.1130/B25510.1&lt;/a> returns a page with labelled links, logos, and metadata pulled from the Crossref database.)&lt;/p>
&lt;p>&lt;strong>Next Steps&lt;/strong>&lt;/p>
&lt;p>The aim of this work has been to show that getting access to handle data values and manipulating those values in the browser can be fairly straightforward. How additional values get to be added to DOIs (or other handles) and what those values refer to is another matter, but services to access such values do not need to be centralized. User-generated services are also a possibility.&lt;/p></description></item><item><title>OpenHandle JavaScript API</title><link>https://www-crossref-org.pluma.sjfc.edu/blog/openhandle-javascript-api/</link><pubDate>Wed, 08 Oct 2008 00:00:00 +0000</pubDate><author>Tony Hammond</author><guid>https://www-crossref-org.pluma.sjfc.edu/blog/openhandle-javascript-api/</guid><description>&lt;p>&lt;a href="http://nurture.nature.com.pluma.sjfc.edu/openhandle/docs/openhandle-api.pdf" target="_blank">&lt;img border="0" alt="openhandle-api-small.png" src="https://www-crossref-org.pluma.sjfc.edu/wp/blog/images/openhandle-api-small.png" width="340" height="257" />&lt;/a> (Click figure for &lt;a href="http://nurture.nature.com.pluma.sjfc.edu/openhandle/docs/openhandle-api.pdf" target="_blank">PDF&lt;/a>.)&lt;/p>
&lt;p>I just posted updated versions of the &lt;a href="http://code.google.com/p/openhandle/" target="_blank">OpenHandle&lt;/a> JavaScript Client Library (&lt;a href="https://web.archive.org/web/20160405130901/http://openhandle.googlecode.com/files/openhandle-0.2.2.js" target="_blank">v0.2.2&lt;/a>) and Utilities (&lt;a href="https://web.archive.org/web/20160323010335/http://openhandle.googlecode.com/files/openhandle-utils-0.2.2.js" target="_blank">v0.2.2&lt;/a>) to the project site. Mainly this post is just by way of saying that there’s now a “cheat sheet” for the API (see figure above, click for &lt;a href="http://nurture.nature.com.pluma.sjfc.edu/openhandle/docs/openhandle-api.pdf" target="_blank">PDF&lt;/a>) which will give some idea of scope. The JavaScript API attempts to reflect the Java Client Library API for Handle data structures, and has in excess of 100 methods. A &lt;a href="http://nurture.nature.com.pluma.sjfc.edu/openhandle/lib/CHANGELOG.txt" target="_blank">change log&lt;/a> is available.&lt;/p>
&lt;p>The new API supports:&lt;/p>
&lt;ul>
&lt;li>Single namespace
&lt;ul>
&lt;li>Introspection
&lt;ul>
&lt;li>Unit testing, see &lt;a href="http://nurture.nature.com.pluma.sjfc.edu/openhandle/unit/test-openhandle.html" target="_blank">here&lt;/a>&lt;/ul>
Why is this of interest to Crossref? Well, if DOIs are ever to begin take advantage of their innate &lt;a href="https://www-crossref-org.pluma.sjfc.edu/blog/multiple-resolution/">Multiple Resolution&lt;/a> capabiities there needs to be nimbler means of accessing the data items stored with a DOI. A JavaScript API would allow the data to be manipulated in the browser down by the user and so enable bespoke services. That, at least, is the idea.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title>Handle Clients #1, #2, #3</title><link>https://www-crossref-org.pluma.sjfc.edu/blog/handle-clients-1-2-3/</link><pubDate>Wed, 01 Oct 2008 00:00:00 +0000</pubDate><author>Tony Hammond</author><guid>https://www-crossref-org.pluma.sjfc.edu/blog/handle-clients-1-2-3/</guid><description>&lt;img border=0 usemap="#GraffleExport" alt="clients-123.png" src="https://www-crossref-org.pluma.sjfc.edu/wp/blog/images/clients-123-0.png/clients-123.png" width="340" height="294" />
&lt;p>Three alternate clients for viewing a Handle (or DOI): #1 (sky - text), #2 (black - tuples), #3 (white - cards) - the image above is clickable. When Handle clients become JavaScript-able, one really can have it one’s own way. (The JavaScript library is here, the demo service interface here - the code for setting up a new service interface can be got from the &lt;a href="https://github.com/tonyhammond/openhandle" target="_blank">OpenHandle project&lt;/a>.)&lt;/p>
&lt;p>&lt;em>Noted: As of February 2023, most of the links in this blog are not longer available.&lt;/em>&lt;/p></description></item><item><title>The Last Mile</title><link>https://www-crossref-org.pluma.sjfc.edu/blog/the-last-mile/</link><pubDate>Wed, 01 Oct 2008 00:00:00 +0000</pubDate><author>Tony Hammond</author><guid>https://www-crossref-org.pluma.sjfc.edu/blog/the-last-mile/</guid><description>&lt;p>&lt;a href="https://www-crossref-org.pluma.sjfc.edu/wp/blog/images/last-mile.png">&lt;img alt="last-mile.png" border="0" src="https://www-crossref-org.pluma.sjfc.edu/wp/blog/images/last-mile.png" width="357" height="252" />&lt;/a>&lt;/p>
&lt;p>The figure above (click to enlarge) is probably self-explanatory but a few words may be in order.&lt;/p>
&lt;p>With no end-to-end delivery of data from the Handle System to the user’s application (browser or reader), getting data out of the Handle System has traditionally meant using the Web (ie. HTTP) as a courier - in effect, this is the “&lt;a href="http://en.wikipedia.org/wiki/Last_mile" target="_blank">last mile&lt;/a>” for Handle data. Typically an upstream (Handle) client provides services to the user. The most well known of these services is the URL redirect service which underpins the Crossref reference linking service. Another hosted service is the web form which displays data stored in the Handle records in a simple HTML table for user browsing. See panel a) in the figure above.&lt;/p>
&lt;p>By contrast, the OpenHandle proposal aims to move data in the Handle record in structured form (JSON or XML) over the Web for downstream processing - either in the user’s browser or on the desktop. See panel b). Advantages are that the Handle data and data structures are moved closer to the user and the services provided are capable of being better targeted and made more relevant. Data mobility as a whole is much improved. The data are accessible using standard Web description and scripting languages. One might almost say (to paraphrase the well-known Java slogan “&lt;a href="http://en.wikipedia.org/wiki/Write_once,_run_anywhere" target="_blank">write once, run anywhere&lt;/a>“) that this is a case of “read once, write anywhere”.&lt;/p></description></item><item><title>Look Ma, No Plugins!</title><link>https://www-crossref-org.pluma.sjfc.edu/blog/look-ma-no-plugins/</link><pubDate>Mon, 22 Sep 2008 00:00:00 +0000</pubDate><author>Tony Hammond</author><guid>https://www-crossref-org.pluma.sjfc.edu/blog/look-ma-no-plugins/</guid><description>&lt;p>&lt;tt>var f = function (OpenHandleJson) {&lt;br />   var h = new OpenHandle(OpenHandleJson);&lt;br />   var hv = h.getHandleValues();&lt;br />   for (var i = 0; i &amp;lt; hv.length; i++) {     var v = new HandleValue(hv[i]);     if (v.hasType(&amp;lsquo;URL&amp;rsquo;)) {       print(v.getData());     }     else if (v.hasType(&amp;lsquo;HS_ADMIN&amp;rsquo;)) {       var a = new AdminRecord(v.getData());       print(a.getAdminPermissionString())     }   } }&lt;/tt>&lt;/p>
&lt;table border="0" width="100%">
&lt;tr>
&lt;td align="right">
&lt;i>"And that, gentlemen, is how we do that." - Apollo 13&lt;/i>
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;p>Following on from my earlier &lt;a href="https://www-crossref-org.pluma.sjfc.edu/blog/client-handle-demo/">Client Handle Demo&lt;/a> post, this entry is just to mention the availability of a port of (part of) the Handle client library (in Java) to JavaScript: openhandle-0.1.1.js which is being maintained on the &lt;a href="https://web.archive.org/web/20160504131854if_/https://code.google.com/archive/p/openhandle/" target="_blank">OpenHandle&lt;/a> site. The JavaScript module contains methods for three classes: &lt;tt>OpenHandle&lt;/tt>, &lt;tt>HandleValue&lt;/tt> and &lt;tt>AdminRecord&lt;/tt>.&lt;/p>
&lt;p>What does all that mean? It means that Handles and their constituent values and value fields can be accessed directly within **&lt;em>any Web browser&lt;/b>&lt;/em> (using an OpenHandle service) which allows a &lt;strong>&lt;em>dynamic Handle client&lt;/em>&lt;/strong> to be generated and presented within a &lt;strong>&lt;em>user context&lt;/em>&lt;/strong>. No plugins required. The port mirrors the class methods in the standard Java client library for Handle.&lt;/p>
&lt;p>As a demo of this JavaScript module in action, see this &lt;a href="http://nurture.nature.com.pluma.sjfc.edu/openhandle/inspect.html" target="_blank">Inspector&lt;/a> app for a card index view of Handle (and by implication DOI) records.&lt;/p>&lt;/p></description></item><item><title>Client Handle Demo</title><link>https://www-crossref-org.pluma.sjfc.edu/blog/client-handle-demo/</link><pubDate>Tue, 01 Jul 2008 00:00:00 +0000</pubDate><author>Tony Hammond</author><guid>https://www-crossref-org.pluma.sjfc.edu/blog/client-handle-demo/</guid><description>&lt;p>This test form shows handle value data being processed by JavaScript &lt;strong>&lt;em>in the browser&lt;/em>&lt;/strong> using an &lt;a href="http://code.google.com/p/openhandle/" target="_blank">OpenHandle&lt;/a> service. This is different from the handle &lt;a href="http://www.handle.net/" target="_blank">proxy server&lt;/a> which processes the handle data on the server - the data here is processed by the client.&lt;/p>
&lt;p>Enter a handle and the standard OpenHandle “Hello World” document is printed. Other processing could equally be applied to the handle values. (Note that the form may not work in web-based feed readers.)&lt;/p>
&lt;div id="response">
&lt;/div></description></item><item><title>Dark Side of the DOI</title><link>https://www-crossref-org.pluma.sjfc.edu/blog/dark-side-of-the-doi/</link><pubDate>Thu, 29 May 2008 00:00:00 +0000</pubDate><author>Tony Hammond</author><guid>https://www-crossref-org.pluma.sjfc.edu/blog/dark-side-of-the-doi/</guid><description>&lt;p>&lt;a href="https://www-crossref-org.pluma.sjfc.edu/wp/blog/images/openhandle_p5_radial.jpg" onclick="window.open('/wp/blog/images/openhandle_p5_radial.jpg','popup','width=902,height=603,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false">&lt;img alt="openhandle_p5_radial.jpg" src="https://www-crossref-org.pluma.sjfc.edu/wp/blog/images/openhandle_p5_radial.jpg" width="450" height="300" />&lt;/a>&lt;/p>
&lt;p>(Click to enlarge.)&lt;/p>
&lt;p>For infotainment only (and because it’s a pretty printing). Glimpse into the dark world of DOI. Here, the handle contents for &lt;a href="http://dx.doi.org.pluma.sjfc.edu/doi:10.1038/nature06930" target="_blank">doi:10.1038/nature06930&lt;/a> exposed as a standard &lt;a href="http://code.google.com/p/openhandle/" target="_blank">OpenHandle&lt;/a> ‘Hello World’ document. Browser image courtesy of &lt;a href="http://ejohn.org/blog/processingjs/" target="_blank">Processing.js&lt;/a> and &lt;a href="http://www.mozilla.com/en-US/firefox/all-rc.html" target="_blank">Firefox 3 RC1&lt;/a>.&lt;/p></description></item><item><title>OpenHandle: Languages Support</title><link>https://www-crossref-org.pluma.sjfc.edu/blog/openhandle-languages-support/</link><pubDate>Mon, 21 Apr 2008 00:00:00 +0000</pubDate><author>Tony Hammond</author><guid>https://www-crossref-org.pluma.sjfc.edu/blog/openhandle-languages-support/</guid><description>&lt;p>Following up the earlier &lt;a href="https://www-crossref-org.pluma.sjfc.edu/blog/openhandle-google-code-project/">post&lt;/a> on &lt;a href="http://code.google.com/p/openhandle/" target="_blank">OpenHandle&lt;/a>, there are now a number of language examples which have been contributed to the project. The diagram below shows the OpenHandle service in schematic with various languages support. Briefly, OpenHandle aims to provide a web services interface to the Handle System to simplify access to the data stored for a given Handle.&lt;/p>
&lt;p>(Note that the diagram is an HTML imagemap and all elements are “clickable”.)&lt;/p>
&lt;p>&lt;em>Note: this diagram is no longer available online as of 2023. We show the code here for reference.&lt;/em>&lt;/p>
&lt;pre tabindex="0">&lt;code>&amp;lt;map name=&amp;#34;GraffleExport&amp;#34;&amp;gt;
&amp;lt;area shape=poly coords=&amp;#34;302,133,273,117,244,133,266,149,261,157,274,150,302,133&amp;#34; href=&amp;#34;http://code.google.com/p/openhandle/wiki/OpenHandleCodeLisp&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;359,93,330,77,302,93,324,109,318,117,332,110,359,93&amp;#34; href=&amp;#34;http://code.google.com/p/openhandle/wiki/OpenHandleCodeFSharp&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;186,93,157,77,129,93,151,109,145,117,159,110,186,93&amp;#34; href=&amp;#34;http://code.google.com/p/openhandle/wiki/OpenHandleCodeAppleScript&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;244,93,215,77,186,93,208,109,203,117,217,110,244,93&amp;#34; href=&amp;#34;http://code.google.com/p/openhandle/wiki/OpenHandleCodeCSharp&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;244,174,215,157,186,174,208,189,203,197,217,190,244,174&amp;#34; href=&amp;#34;http://code.google.com/p/openhandle/wiki/OpenHandleCodePython&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;244,133,215,117,186,133,208,149,203,157,217,150,244,133&amp;#34; href=&amp;#34;http://code.google.com/p/openhandle/wiki/OpenHandleCodeJavaScript&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;186,174,157,157,129,174,151,189,145,197,159,190,186,174&amp;#34; href=&amp;#34;http://code.google.com/p/openhandle/wiki/OpenHandleCodePhp&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;302,93,273,77,244,93,266,109,261,117,274,110,302,93&amp;#34; href=&amp;#34;http://code.google.com/p/openhandle/wiki/OpenHandleCodeErlang&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;359,133,330,117,302,133,324,149,318,157,332,150,359,133&amp;#34; href=&amp;#34;http://code.google.com/p/openhandle/wiki/OpenHandleCodePerl&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;302,174,273,157,244,174,266,189,261,197,274,190,302,174&amp;#34; href=&amp;#34;http://code.google.com/p/openhandle/wiki/OpenHandleCodeRuby&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;359,174,330,157,302,174,324,189,318,197,332,190,359,174&amp;#34; href=&amp;#34;http://code.google.com/p/openhandle/wiki/OpenHandleCodeSmalltalk&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;186,133,157,117,129,133,151,149,145,157,159,150,186,133&amp;#34; href=&amp;#34;http://code.google.com/p/openhandle/wiki/OpenHandleCodeJava&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;255,237,255,260,266,260,244,272,222,260,233,260,233,237,222,237,244,225,266,237,255,237&amp;#34; href=&amp;#34;http://www.ietf.org/rfc/rfc2616.txt&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;174,527,174,495,196,491,217,495,217,527,196,531,174,527&amp;#34; href=&amp;#34;http://hdl.handle.net/&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;270,527,270,495,292,491,314,495,314,527,292,531,270,527&amp;#34; href=&amp;#34;http://hdl.handle.net/&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;152,268,210,268,210,300,152,304,152,268&amp;#34; href=&amp;#34;http://nascent.nature.com.pluma.sjfc.edu/openhandle/handle?id=10100/nature&amp;amp;#038;mimetype=text/plain&amp;amp;#038;format=rdf&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;201,307,258,307,258,339,201,343,201,307&amp;#34; href=&amp;#34;http://nascent.nature.com.pluma.sjfc.edu/openhandle/handle?id=10100/nature&amp;amp;#038;mimetype=text/plain&amp;amp;#038;format=n3&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;267,297,325,297,325,329,267,333,267,297&amp;#34; href=&amp;#34;http://nascent.nature.com.pluma.sjfc.edu/openhandle/handle?id=10100/nature&amp;amp;#038;mimetype=text/plain&amp;amp;#038;format=json&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;255,426,255,450,266,450,244,461,222,450,233,450,233,426,222,426,244,414,266,426,255,426&amp;#34; href=&amp;#34;http://www.ietf.org/rfc/rfc3651.txt&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;262,355,262,388,226,388,226,355,262,355&amp;#34; href=&amp;#34;http://nascent.nature.com.pluma.sjfc.edu/openhandle/handle?id=10100/nature&amp;amp;#038;mimetype=text/plain&amp;amp;#038;format=rdf&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;277,223,292,208,320,208,344,220,330,235,301,235,277,223&amp;#34; href=&amp;#34;http://nascent.nature.com.pluma.sjfc.edu/openhandle/handle?id=10.1000/1&amp;amp;#038;mimetype=text/plain&amp;amp;#038;format=json&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;148,244,162,229,191,229,215,241,201,256,172,256,148,244&amp;#34; href=&amp;#34;http://nascent.nature.com.pluma.sjfc.edu/openhandle/handle?id=10100/nature&amp;amp;#038;mimetype=text/plain&amp;amp;#038;format=json&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;222,507,222,475,244,471,266,475,266,507,244,511,222,507&amp;#34; href=&amp;#34;http://hdl.handle.net/&amp;#34;&amp;gt; &amp;lt;area shape=poly coords=&amp;#34;49,215,89,102,191,62,305,79,401,143,393,282,315,350,198,363,105,317,49,215,120,481,140,501,178,501,199,474,186,442,152,436,122,447,120,481,49,215,57,569,79,571,89,547,71,534,53,548,57,569,49,215,57,569&amp;#34; href=&amp;#34;http://code.google.com/p/openhandle/&amp;#34;&amp;gt;
&amp;lt;/map&amp;gt;
&lt;/code>&lt;/pre></description></item><item><title>OpenHandle: Google Code Project</title><link>https://www-crossref-org.pluma.sjfc.edu/blog/openhandle-google-code-project/</link><pubDate>Fri, 07 Mar 2008 00:00:00 +0000</pubDate><author>Tony Hammond</author><guid>https://www-crossref-org.pluma.sjfc.edu/blog/openhandle-google-code-project/</guid><description>&lt;p>Just announced on the &lt;a href="http://www.handle.net/mail-archive/handle-info/msg00254.html" target="_blank">handle-info&lt;/a> and &lt;a href="http://lists.w3.org/Archives/Public/semantic-web/2008Mar/0054.html" target="_blank">semantic-web&lt;/a> mailing lists is the &lt;a href="http://code.google.com/p/openhandle/" target="_blank">OpenHandle&lt;/a> project on Google Code. This may be of some interest to the DOI community as it allows the handle record underpinning the DOI to be exposed in various common text-based serializations to make the data stored within the records more accessible to Web applications. Initial serializations include RDF/XML, RDF/N3, and JSON.&lt;/p>
&lt;p>We’d be very interested in receiving feedback on this project - either on this blog or over on the &lt;a href="https://code.google.com/archive/p/openhandle/" target="_blank">project wiki&lt;/a>.&lt;/p></description></item></channel></rss>