{"id":299,"date":"2009-03-30T12:41:42","date_gmt":"2009-03-30T17:41:42","guid":{"rendered":"http:\/\/dilettantes.code4lib.org\/?p=299"},"modified":"2009-03-30T12:41:42","modified_gmt":"2009-03-30T17:41:42","slug":"a-uri-scheme-for-sudocs","status":"publish","type":"post","link":"https:\/\/rossfsinger.me\/blog\/2009\/03\/a-uri-scheme-for-sudocs\/","title":{"rendered":"A URI Scheme for SuDocs"},"content":{"rendered":"<p><a href=\"http:\/\/bibwild.wordpress.com\/\" target=\"_blank\">Jonathan Rochkind<\/a> recently started <a href=\"http:\/\/www.mail-archive.com\/code4lib%40listserv.nd.edu\/msg04865.html\" target=\"_blank\">a thread on the Code4lib mailing<\/a> list asking how to register an <a href=\"http:\/\/info-uri.info\/registry\/docs\/misc\/faq.html\" target=\"_blank\">info URI<\/a> for <a title=\"Superintendents of Documents Classification System\" href=\"http:\/\/www.gpo.gov\/su_docs\/fdlp\/pubs\/explain.html\" target=\"_blank\">SuDocs<\/a>.\u00c2\u00a0 Ray Denenberg responded with an explanation of the process.\u00c2\u00a0 I won&#8217;t get into my opinions of info URIs or the merits of either side of the ensuing debate that spun out from this thread, but my takeaway was that <em>Jonathan wasn&#8217;t really looking for an info URI, anyway<\/em>.<\/p>\n<p>What Jonathan wanted was:<\/p>\n<ul>\n<li>A generic URI model to define SuDocs<\/li>\n<li>For this model to be maintained and hosted by somebody other than him<\/li>\n<li>If possible, the URIs be resolvable to something that made sense for the supplied SuDoc<\/li>\n<\/ul>\n<p>I think these are reasonable desires.<\/p>\n<p>I also thought that there were existing structures out there that could meet his requirements without going through the &#8220;start up costs&#8221; of registering an info URI.\u00c2\u00a0 Also, info URIs are not <em>of the web<\/em>, so after going through the work of creating a &#8216;standard&#8217;, you cannot actually use it directly to figure out what the SuDoc is referring to.<\/p>\n<p>SuDocs (like all other aspects of Government Documents) are arcane, niche and not understood by anyone other than GovDoc librarians, who seem to be rare.\u00c2\u00a0 That being said, there is a pretty convenient web presence implicit in SuDoc &#8212; in order for a SuDoc to exist, it needs to appear in the <a href=\"http:\/\/catalog.gpo.gov\/\" target=\"_blank\">GPO&#8217;s catalog<\/a>.\u00c2\u00a0 Since anything that appears in the GPO&#8217;s catalog can be seen on the web, we have a basis for a dereferenceable URI structure.<\/p>\n<p>The GPO uses Ex Libris&#8217; Aleph and whatever Aleph&#8217;s out of the box web OPAC is for their catalog.\u00c2\u00a0 Last week, I was Googling for some information about SRU and Aleph and it led me to <a href=\"http:\/\/www.white-clouds.com\/iclc\/cliej\/cl24wen.htm\" target=\"_blank\">this page about constructing CCL queries into Aleph<\/a> (note, please disregard almost everything written on this page about SRU, CQL, etc., as it&#8217;s almost completely b.s.).\u00c2\u00a0 Figuring there must some way to search on SuDocs, I tried a couple of combinations of things, until I found <a href=\"http:\/\/catalog.gpo.gov\/F\/?func=file&amp;file_name=help-1#expert\" target=\"_blank\">this page in the GPO catalog<\/a>.\u00c2\u00a0 Ok, so the index for SuDocs is called &#8220;GVD&#8221;.<\/p>\n<p>This gives us URLs like:\u00c2\u00a0 <a href=\"http:\/\/catalog.gpo.gov\/F\/?func=find-c&amp;ccl_term=GVD%3DE%202.11\/3:EL%202\" target=\"_blank\">http:\/\/catalog.gpo.gov\/F\/?func=find-c&amp;ccl_term=GVD%3DE%202.11\/3:EL%202<\/a><\/p>\n<p>Now, this <em>could<\/em> work, but it&#8217;s incredibly awkward.\u00c2\u00a0 It&#8217;s also extremely fragile since it&#8217;s software (in this case, Aleph) dependent, and if it was to break, requires the GPO to redirect us to the right place.<\/p>\n<p>This is, of course, exactly what <a href=\"http:\/\/purl.org\/\" target=\"_blank\">PURL<\/a>s were designed to do.\u00c2\u00a0 I had never actually set up a PURL and almost didn&#8217;t for this, since the purl.org service said that it wasn&#8217;t working properly so it would be disabled for another week.\u00c2\u00a0 However, all the links were there, so I forged ahead.\u00c2\u00a0 I was in the process of setting up a regular PURL, when I ran across <a href=\"http:\/\/purl.oclc.org\/docs\/purl_faq.html#toc1.9\" target=\"_blank\">partial redirects<\/a>.\u00c2\u00a0 I figured something like this had to exist for PURLs that were used for RDF vocabularies and the like, but wasn&#8217;t aware of how they work.<\/p>\n<p>Anyway, they&#8217;re extremly simple.\u00c2\u00a0 Basically you set up a base URL (http:\/\/purl.org\/NET\/foo\/) and anything requested past that base URL (e.g. http:\/\/purl.org\/NET\/foo\/bar) will be redirected to the PURL endpoint verbatim.<\/p>\n<p>So, I set up a partial redirect PURL at the base:\u00c2\u00a0 http:\/\/purl.org\/NET\/sudoc\/<\/p>\n<p>The expectation that it would be followed by a properly URL escaped SuDoc:\u00c2\u00a0 E 2.11\/3:EL 2 becomes <a href=\"http:\/\/purl.org\/NET\/sudoc\/E%202.11\/3:EL%202\" target=\"_blank\">http:\/\/purl.org\/NET\/sudoc\/E%202.11\/3:EL%202<\/a> which then tacks that SuDoc onto  <a href=\"http:\/\/catalog.gpo.gov\/F\/?func=find-c&amp;ccl_term=GVD%3DE%202.11\/3:EL%202\" target=\"_blank\">http:\/\/catalog.gpo.gov\/F\/?func=find-c&amp;ccl_term=GVD%3D<\/a> and redirects you to <a href=\"http:\/\/catalog.gpo.gov\/F\/?func=find-c&amp;ccl_term=GVD%3DE%202.11\/3:EL%202\" target=\"_blank\">http:\/\/catalog.gpo.gov\/F\/?func=find-c&amp;ccl_term=GVD%3DE%202.11\/3:EL%202<\/a>.<\/p>\n<p>What you have then is a unique identifier for a SuDoc that resolves to a human readable representation of what the URI stands for.\u00c2\u00a0 If the GPO changes OPACs or Ex Libris changes Aleph&#8217;s URL scheme or the GPO comes up with a better representation of SuDoc, it doesn&#8217;t matter as long as the actual SuDoc class number can be used to redirect the user to the new location.<\/p>\n<p>Obviously, there&#8217;s an expectation here that PURLs remain indefinitely and that purl.org is never lost to a third party that repurposes it for other uses.\u00c2\u00a0 However, there are major parts of the web that rely on purl.org, so there are <em>a lot<\/em> of people that would fight to not see this happen.<\/p>\n<p>Basically, I think these are the sorts of simple solutions that I feel we should be using to solve these sorts of problems on the web.\u00c2\u00a0 We are no longer the center of the information universe and it&#8217;s time that we accepted that and begin to use the tools that the rest of the world is using to solve the same problems that everybody else is dealing with.<\/p>\n<p>How many other &#8216;identifiers&#8217; could be mint persistent, dereferenceable URIs this way?\u00c2\u00a0 I look forward to finding out.<\/p>\n<p>By the way, there are currently three possible points of failure for this URI scheme:\u00c2\u00a0 purl.org, GPO and me.\u00c2\u00a0 I would prefer not to be a single point of failure, so if you would like to be added as a maintainer to this PURL, please let me know and I would be happy to add you.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jonathan Rochkind recently started a thread on the Code4lib mailing list asking how to register an info URI for SuDocs.\u00c2\u00a0 Ray Denenberg responded with an explanation of the process.\u00c2\u00a0 I won&#8217;t get into my opinions of info URIs or the merits of either side of the ensuing debate that spun out from this thread, but [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[59,60,61],"tags":[],"class_list":["post-299","post","type-post","status-publish","format-standard","hentry","category-problem-solving","category-sudoc","category-uris"],"_links":{"self":[{"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/posts\/299","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/comments?post=299"}],"version-history":[{"count":1,"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/posts\/299\/revisions"}],"predecessor-version":[{"id":300,"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/posts\/299\/revisions\/300"}],"wp:attachment":[{"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/media?parent=299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/categories?post=299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/tags?post=299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}