{"id":218,"date":"2009-01-03T16:56:53","date_gmt":"2009-01-03T21:56:53","guid":{"rendered":"http:\/\/dilettantes.code4lib.org\/?page_id=218"},"modified":"2025-11-17T12:53:15","modified_gmt":"2025-11-17T17:53:15","slug":"ead-publisher","status":"publish","type":"page","link":"https:\/\/rossfsinger.me\/blog\/projects\/ead-publisher\/","title":{"rendered":"EAD Publisher"},"content":{"rendered":"<p>This project was designed to take <a href=\"http:\/\/www.loc.gov\/ead\/\" target=\"_blank\" rel=\"noopener\">EAD 2002 XML finding aids<\/a>, and provide archivists with a simple way to upload them, provide versioning to changes, produce a full-text searchable index of them and make a fairly simple &#8220;website&#8221; to display them.<\/p>\n<p>The HTML interface allows the archivists to add a description, display title, sort title and place the finding aids into categories, which then have their own browsable pages.<\/p>\n<p>The finding aids pages themselves are created via a combination of XSLT (for the descriptive elements of the collection) and Ruby templates (for the Box\/Folder\/Item lists).\u00a0 The initial plan of this project was to create a sophisticated object model for the EAD so more interesting things could be done with the EAD&#8217;s HTML (such as linking from the the subject headings or bibliographies), although this never was fully realized.\u00a0 There were two main reasons for this:<\/p>\n<ol>\n<li>EAD is a bloody awful mess.\u00a0 EAD&#8217;s data model is extremely complicated and very open to local archivists&#8217; interpretation.\u00a0 There are presentation tags intermingled with semantic tags and some of the data isn&#8217;t really atomic enough to parse by machine.\u00a0 The time I was able to spend working on this project was limited, so I was never able to design a working internal data model for the finding aids and had to stick to using the EAD documents themselves.<\/li>\n<li>Ruby&#8217;s XML parsers at the time of development were woeful.\u00c2\u00a0 <a href=\"http:\/\/libxml.rubyforge.org\/\" target=\"_blank\" rel=\"noopener\">LibXML2&#8217;s Ruby libraries<\/a> were very flaky and <a href=\"http:\/\/www.germane-software.com\/software\/rexml\/\" target=\"_blank\" rel=\"noopener\">REXML<\/a> was (still is) so slow that it would grind to a halt on XML files the size of many finding aids.\u00a0 Newer Ruby libraries, such as <a href=\"http:\/\/caldersphere.rubyforge.org\/jrexml\/\" target=\"_blank\" rel=\"noopener\">JREXML<\/a> and <a href=\"http:\/\/nokogiri.rubyforge.org\/nokogiri\/\" target=\"_blank\" rel=\"noopener\">Nokogiri<\/a>, may make this a possibility to reconsider.<\/li>\n<\/ol>\n<p>This project was a bit of a burden for me at the time.\u00a0 Archives is a department in the Georgia Tech libraries, but at the time they had no developer resources of their own.\u00a0 This meant that they had to rely on me (the primary developer for the library as a whole) to provide a way to publish their EAD files.\u00a0 I wanted to write something far more sophisticated for them, an application where they could actually <em>create<\/em> the finding aids (since I could, then, have some control over how the data was formatted for the things I later wanted to do with it).\u00a0 However, archives had already committed themselves somewhat to using <a href=\"http:\/\/www.archiviststoolkit.org\/\" target=\"_blank\" rel=\"noopener\">Archivist&#8217;s Toolkit<\/a> and we ran into a conflict with how I was able to prioritize development for them.\u00a0 Archives&#8217; total web traffic, across all their pages, was less than 1% of the library&#8217;s total.\u00a0 At the same time, this project was a huge time sink taking up a vast amount of my time for about a month and a half.\u00a0 It was really hard to justify along with the all the other things that needed to be written for the library.<\/p>\n<p>There was still some nice features that were included in this, though, such as the OpenSearch interface and the addition of an OAI-PMH server, thanks to <a href=\"http:\/\/oai.rubyforge.org\/classes\/OAI\/Provider.html\" target=\"_blank\" rel=\"noopener\">Will Groppe&#8217;s OAI server implementation<\/a>.<\/p>\n<p><a href=\"http:\/\/www.library.gatech.edu\/archives\/finding-aids\/\" target=\"_blank\" rel=\"noopener\">Here is Georgia Tech&#8217;s implementation in action<\/a>.<\/p>\n<p>You can <a href=\"\/files\/projects\/findingaids.gz\">download the source as a .gz here<\/a>.\u00a0 It is available under an <a href=\"http:\/\/www.opensource.org\/licenses\/mit-license.php\" target=\"_blank\" rel=\"noopener\">MIT License<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This project was designed to take EAD 2002 XML finding aids, and provide archivists with a simple way to upload them, provide versioning to changes, produce a full-text searchable index of them and make a fairly simple &#8220;website&#8221; to display them. The HTML interface allows the archivists to add a description, display title, sort title [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":137,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-218","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/pages\/218","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/types\/page"}],"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=218"}],"version-history":[{"count":4,"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/pages\/218\/revisions"}],"predecessor-version":[{"id":516,"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/pages\/218\/revisions\/516"}],"up":[{"embeddable":true,"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/pages\/137"}],"wp:attachment":[{"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/media?parent=218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}