CINXE.COM
July 2013 - Duke Collaboratory for Classics Computing (DC3)
<!DOCTYPE html> <!--[if IE 7]> <html class="ie ie7" lang="en-US"> <![endif]--> <!--[if !(IE 7) | !(IE 8) ]><!--> <html lang="en-US"> <!--<![endif]--> <head> <meta charset="UTF-8"> <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> <meta name="viewport" content="width=device-width"> <title>July 2013 - Duke Collaboratory for Classics Computing (DC3)</title> <link rel="profile" href="//gmpg.org/xfn/11"> <link rel="pingback" href="https://blogs.library.duke.edu/dcthree/xmlrpc.php"> <!--[if lt IE 9]> <script src="https://blogs.library.duke.edu/dcthree/wp-content/themes/twentyfourteen/js/html5.js"></script> <![endif]--> <meta name='robots' content='noindex, follow' /> <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> <!-- This site is optimized with the Yoast SEO plugin v24.6 - https://yoast.com/wordpress/plugins/seo/ --> <meta property="og:locale" content="en_US" /> <meta property="og:type" content="website" /> <meta property="og:title" content="July 2013 - Duke Collaboratory for Classics Computing (DC3)" /> <meta property="og:url" content="https://blogs.library.duke.edu/dcthree/2013/07/" /> <meta property="og:site_name" content="Duke Collaboratory for Classics Computing (DC3)" /> <meta name="twitter:card" content="summary_large_image" /> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"CollectionPage","@id":"https://blogs.library.duke.edu/dcthree/2013/07/","url":"https://blogs.library.duke.edu/dcthree/2013/07/","name":"July 2013 - Duke Collaboratory for Classics Computing (DC3)","isPartOf":{"@id":"https://blogs.library.duke.edu/dcthree/#website"},"breadcrumb":{"@id":"https://blogs.library.duke.edu/dcthree/2013/07/#breadcrumb"},"inLanguage":"en-US"},{"@type":"BreadcrumbList","@id":"https://blogs.library.duke.edu/dcthree/2013/07/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://blogs.library.duke.edu/dcthree/"},{"@type":"ListItem","position":2,"name":"Archives for July 2013"}]},{"@type":"WebSite","@id":"https://blogs.library.duke.edu/dcthree/#website","url":"https://blogs.library.duke.edu/dcthree/","name":"Duke Collaboratory for Classics Computing (DC3)","description":"a collection of parts flying in loose formation","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://blogs.library.duke.edu/dcthree/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}</script> <!-- / Yoast SEO plugin. --> <link rel="alternate" type="application/rss+xml" title="Duke Collaboratory for Classics Computing (DC3) » Feed" href="https://blogs.library.duke.edu/dcthree/feed/" /> <link rel="alternate" type="application/rss+xml" title="Duke Collaboratory for Classics Computing (DC3) » Comments Feed" href="https://blogs.library.duke.edu/dcthree/comments/feed/" /> <script> window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/blogs.library.duke.edu\/dcthree\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.7.2"}}; /*! This file is auto-generated */ !function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\u2b1b","\ud83d\udc26\u200b\u2b1b")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings); </script> <style id='wp-emoji-styles-inline-css'> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='twentyfourteen-lato-css' href='https://blogs.library.duke.edu/dcthree/wp-content/themes/twentyfourteen/fonts/font-lato.css?ver=20230328' media='all' /> <link rel='stylesheet' id='genericons-css' href='https://blogs.library.duke.edu/dcthree/wp-content/themes/twentyfourteen/genericons/genericons.css?ver=3.0.3' media='all' /> <link rel='stylesheet' id='twentyfourteen-style-css' href='https://blogs.library.duke.edu/dcthree/wp-content/themes/dul-2014/style.css?ver=20241112' media='all' /> <link rel='stylesheet' id='twentyfourteen-block-style-css' href='https://blogs.library.duke.edu/dcthree/wp-content/themes/twentyfourteen/css/blocks.css?ver=20240708' media='all' /> <!--[if lt IE 9]> <link rel='stylesheet' id='twentyfourteen-ie-css' href='https://blogs.library.duke.edu/dcthree/wp-content/themes/twentyfourteen/css/ie.css?ver=20140711' media='all' /> <![endif]--> <style id='akismet-widget-style-inline-css'> .a-stats { --akismet-color-mid-green: #357b49; --akismet-color-white: #fff; --akismet-color-light-grey: #f6f7f7; max-width: 350px; width: auto; } .a-stats * { all: unset; box-sizing: border-box; } .a-stats strong { font-weight: 600; } .a-stats a.a-stats__link, .a-stats a.a-stats__link:visited, .a-stats a.a-stats__link:active { background: var(--akismet-color-mid-green); border: none; box-shadow: none; border-radius: 8px; color: var(--akismet-color-white); cursor: pointer; display: block; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen-Sans', 'Ubuntu', 'Cantarell', 'Helvetica Neue', sans-serif; font-weight: 500; padding: 12px; text-align: center; text-decoration: none; transition: all 0.2s ease; } /* Extra specificity to deal with TwentyTwentyOne focus style */ .widget .a-stats a.a-stats__link:focus { background: var(--akismet-color-mid-green); color: var(--akismet-color-white); text-decoration: none; } .a-stats a.a-stats__link:hover { filter: brightness(110%); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06), 0 0 2px rgba(0, 0, 0, 0.16); } .a-stats .count { color: var(--akismet-color-white); display: block; font-size: 1.5em; line-height: 1.4; padding: 0 13px; white-space: nowrap; } </style> <script src="https://blogs.library.duke.edu/dcthree/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script> <script src="https://blogs.library.duke.edu/dcthree/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script> <script src="https://blogs.library.duke.edu/dcthree/wp-content/themes/twentyfourteen/js/functions.js?ver=20230526" id="twentyfourteen-script-js" defer data-wp-strategy="defer"></script> <link rel="https://api.w.org/" href="https://blogs.library.duke.edu/dcthree/wp-json/" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://blogs.library.duke.edu/dcthree/xmlrpc.php?rsd" /> <meta name="generator" content="WordPress 6.7.2" /> <link href='//fonts.googleapis.com/css?family=Libre+Baskerville:400,700,400italic' rel='stylesheet' type='text/css'> <!-- Matomo --> <script> var _paq = window._paq = window._paq || []; _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="//analytics.lib.duke.edu/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '28']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script> <!-- End Matomo Code --> </head> <body class="archive date wp-embed-responsive group-blog header-image list-view full-width"> <div id="page" class="hfeed site"> <div id="site-header"> <a href="https://blogs.library.duke.edu/dcthree/" rel="home"> <img alt="Duke Collaboratory for Classics Computing (DC3)" src="https://blogs.library.duke.edu/dcthree/files/2014/11/dc3.jpg" width="1260" height="200" alt=""> </a> </div> <div id="library_logo"><a href="//library.duke.edu" title="Duke University Libraries"><img src="/wp-content/themes/dul-2014/images/library_logo_transparent.png" alt="Duke University Libraries" border="0"></a></div> <nav id="primary-navigation" class="site-navigation primary-navigation" role="navigation"> <button class="menu-toggle">Primary Menu</button> <a class="screen-reader-text skip-link" href="#content">Skip to content</a> <div class="menu-main-container"><ul id="menu-main" class="nav-menu"><li id="menu-item-235" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-235"><a href="https://blogs.library.duke.edu/dcthree/partners/">Partners</a></li> <li id="menu-item-236" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-236"><a href="https://blogs.library.duke.edu/dcthree/people/">People</a></li> <li id="menu-item-237" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-237"><a href="https://blogs.library.duke.edu/dcthree/projects/">Projects</a></li> </ul></div> </nav> <div id="main" class="site-main"> <section id="primary" class="content-area"> <div id="content" class="site-content" role="main"> <header class="page-header"> <h1 class="page-title"> Monthly Archives: July 2013 </h1> </header><!-- .page-header --> <article id="post-81" class="post-81 post type-post status-publish format-standard hentry category-uncategorized"> <header class="entry-header"> <div class="entry-meta"> <span class="cat-links"><a href="https://blogs.library.duke.edu/dcthree/category/uncategorized/" rel="category tag">Uncategorized</a></span> </div> <h1 class="entry-title"><a href="https://blogs.library.duke.edu/dcthree/2013/07/27/the-trouble-with-triples/" rel="bookmark">The Trouble with Triples</a></h1> <div class="entry-meta"> <span class="entry-date"><a href="https://blogs.library.duke.edu/dcthree/2013/07/27/the-trouble-with-triples/" rel="bookmark"><time class="entry-date" datetime="2013-07-27T00:45:18-05:00">July 27, 2013</time></a></span> <span class="byline"><span class="author vcard"><a class="url fn n" href="https://blogs.library.duke.edu/dcthree/author/hac13duke-edu/" rel="author">Hugh Cayless</a></span></span> <span class="comments-link"><a href="https://blogs.library.duke.edu/dcthree/2013/07/27/the-trouble-with-triples/#comments">5 Comments</a></span> </div><!-- .entry-meta --> </header><!-- .entry-header --> <div class="entry-content"> <span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Focoins.info%3Agenerator&rft.title=The+Trouble+with+Triples&rft.aulast=Cayless&rft.aufirst=Hugh&rft.subject=Uncategorized&rft.source=Duke+Collaboratory+for+Classics+Computing+%28DC3%29&rft.date=2013-07-27&rft.type=blogPost&rft.format=text&rft.identifier=https://blogs.library.duke.edu/dcthree/2013/07/27/the-trouble-with-triples/&rft.language=English"></span> <p>In this week’s post, I’m going to stick my neck out and criticize RDF and its suitability for encoding data in the Humanities. I should start by stipulating that we have a big investment in RDF: Papyri.info is driven by an RDF triplestore and we’re working on an <a href="http://lawd.info">RDF vocabulary</a> to help extend our ability to represent our data. That said, let’s start with the basics: an RDF triple is made up of three URIs or two URIs and a “Literal” (a bit of text, perhaps). So you get things like:</p> <p><code><http://papyri.info/ddbdp/psi;9> <http://purl.org/dc/terms/hasPart> <http://papyri.info/ddbdp/psi;9;1026/source><br /> </code><br /> Or, to put it another way, the volume identified by the URI http://papyri.info/ddbdp/psi;9 contains the text identified by the URI http://papyri.info/ddbdp/psi;9;1026/source. Triples in a triple store are members of a “Graph”. In this case the graph is identified by the URI <code>http://papyri.info/graph</code>. So in fact, the triples we talk about are really quads, with a subject, predicate, object, and context:</p> <p><code><http://papyri.info/ddbdp/psi;9> <http://purl.org/dc/terms/hasPart> <http://papyri.info/ddbdp/psi;9;1026/source> <http://papyri.info/graph><br /> </code><br /> So far, so good. The great problem with this design is that we don’t really have a good way of talking about triples. As we start to move beyond a self-contained and internally controlled system to one where data are shared between partner projects, we’re starting to care more about triple provenance. Humanities data are full of guesses, estimates, contradictions, and arguments, so it’s not only likely that we’ll acquire triples that contradict each other, it’s desirable. But we <em>have</em> to be able to source our statements. This may be a basic incompatibility between Humanities data and the RDF data model. Our statements are not in the form “X Y Z”, but “W asserts/implies X Y Z”.</p> <p>There is the method called “reification”, in which a single RDF triple is exploded into a Statement, with subject, predicate, and object properties, so a single triple becomes four triples. Eric Hellman <a href="http://go-to-hellman.blogspot.com/2009/11/blank-node-bother-and-rdf-copymess.html">wrote about reification</a> a few years back:</p> <blockquote><p>Unfortunately, RDF, the data model underlying Linked Data and the Semantic Web, has no built-in mechanism to attach data to its source. To some extent, this is a deliberate choice in the design of the model, and also a deep one. True facts can’t really have sources, so a knowledge representation system that includes connections of facts to their sources is, in a way, polluted. Instead, RDF takes the point of view that statements are asserted, and if you want to deal with assertions and how they are asserted in a clean logic system, the assertions should be reified.</p></blockquote> <p>Hellman notes <a href="http://go-to-hellman.blogspot.com/2009/05/part-3-reification-considered-harmful.html">other problems with reification</a> in a later post. But let’s reify my statement anyway:</p> <pre><code style="font-size:10px"><http://example.com/myTriple> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement> <http://example.com/myTriple> <http://www.w3.org/1999/02/22-rdf-syntax-ns#subject> <http://papyri.info/ddbdp/psi;9> <http://example.com/myTriple> <http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate> <http://purl.org/dc/terms/hasPart> <http://example.com/myTriple> <http://www.w3.org/1999/02/22-rdf-syntax-ns#object> <http://papyri.info/ddbdp/psi;9;1026/source> </code> </pre> <p>So, merely by adding another five triples for every original (greatly increasing the size of my dataset), I can now say things about my triple. Unfortunately, graphs are not part of the RDF specification, so I can’t actually say that my Statement belongs to the <code><http://papyri.info/graph></code> context. You may ask, what happens if I want to say something about an assertion about my original triple (when it was made, for example, and by whom). I will respond by gibbering at you and going to hide under the desk.</p> <p>No. This is lunacy. The one workaround I can see using the existing setup is to coopt the graph (or context) element of the quad, and use that as a handle for making statements about our statements. There are a few downsides to that approach though: one is that it makes querying with SPARQL messy, another is that now you have to manage a multiplicity of graphs, which is something you might not want to do. You also risk losing provenance data if you merge graphs together. And it somewhat mangles the concept and usefulness of the graph as a collection of statements (you may want to group stuff for reasons other than provenance). Portability is a problem too, because most of the serialization formats out there don’t deal with quads.</p> <p>A better approach might be that taken by <a href="http://www.datomic.com/">Datomic</a>, which adds to every triple an automatic id (maybe based on a hash of the triple itself to help manage duplication and provide integrity checks). Given that extra handle, it would be simple to tack on statements about the provenance of a triple, to note when multiple sources agree (or disagree) about assertions, and so on. A number of triplestores already do something like this internally, but it really needs to be folded into the data model either of RDF or its successor. For SPARQL, this might be as easy as adding an id(subject, predicate, object) function that would return the URI identifying the given triple. Then you could find out what had been said about a triple with a simple query:</p> <p><code>SELECT ?p ?o<br /> FROM <graph><br /> WHERE { id(<subject_uri>, <predicate_uri>, <object_uri>) ?p ?o }<br /> </code></p> <p>Compare that to the reification version:</p> <p><code>PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#><br /> SELECT ?p ?o<br /> FROM <graph><br /> WHERE { ?statement ?p ?o .<br /> ?statement rdf:subject <subject_uri> .<br /> ?statement rdf:predicate <predicate_uri> .<br /> ?statement rdf:object <object_uri> }<br /> </code></p> <p>Actually, we could get a good deal of traction just from having a standard URI format for triple IDs and an algorithm for producing them. Maybe a prefix like <code><urn:3ID/></code> and then a SHA1 hash of the triple, serialized as N3? So our original triple would have the ID <code><urn:3ID/eb9dfed3b6304ca955baa554c836306d8c61736b></code>. We still wouldn’t be in a world where you could look up a triple given its ID, but having a standard way to produce IDs might help push things in that direction. Since we aren’t in a world where triple provenance has much priority, I’m still pondering about the best ways to deal with the problem. What do you think?</p> </div><!-- .entry-content --> </article><!-- #post-81 --> <nav class="navigation paging-navigation"> <h1 class="screen-reader-text"> Posts navigation </h1> <div class="pagination loop-pagination"> <span aria-current="page" class="page-numbers current">1</span> <a class="page-numbers" href="https://blogs.library.duke.edu/dcthree/2013/07/page/2/">2</a> <span class="page-numbers dots">…</span> <a class="page-numbers" href="https://blogs.library.duke.edu/dcthree/2013/07/page/4/">4</a> <a class="next page-numbers" href="https://blogs.library.duke.edu/dcthree/2013/07/page/2/">Next →</a> </div><!-- .pagination --> </nav><!-- .navigation --> </div><!-- #content --> </section><!-- #primary --> <div id="secondary"> <h2 class="site-description">a collection of parts flying in loose formation</h2> <div id="primary-sidebar" class="primary-sidebar widget-area" role="complementary"> <aside id="text-2" class="widget widget_text"><h1 class="widget-title">About</h1> <div class="textwidget">The Duke Collaboratory for Classics Computing, the DC3, is a no-nonsense, interdisciplinary, results-oriented research group devoted to the creation and care of standards, services, and tooling for digital classics and beyond. We aim to be flexible, durable, and to leverage the strengths of our many partnerships so as to be a collection of parts flying in loose formation. Like the plane. <p> <p>The DC3 manages papyri.info data and tooling, experiments in the development of new complementary resources, and engages in teaching and outreach at Duke and beyond.</div> </aside><aside id="search-3" class="widget widget_search"><h1 class="widget-title">Search the DC3 Blog</h1><form role="search" method="get" class="search-form" action="https://blogs.library.duke.edu/dcthree/"> <label> <span class="screen-reader-text">Search for:</span> <input type="search" class="search-field" placeholder="Search …" value="" name="s" /> </label> <input type="submit" class="search-submit" value="Search" /> </form></aside> <aside id="recent-posts-2" class="widget widget_recent_entries"> <h1 class="widget-title">Recent Posts</h1><nav aria-label="Recent Posts"> <ul> <li> <a href="https://blogs.library.duke.edu/dcthree/2018/01/10/digital-servius/">Digital Servius</a> <span class="post-date">January 10, 2018</span> </li> <li> <a href="https://blogs.library.duke.edu/dcthree/2016/08/04/theres-new-whale-town/">There’s a new whale in town</a> <span class="post-date">August 4, 2016</span> </li> <li> <a href="https://blogs.library.duke.edu/dcthree/2016/02/04/harpokration-done-but-not-even-almost/">Harpokration, done but not even almost.</a> <span class="post-date">February 4, 2016</span> </li> <li> <a href="https://blogs.library.duke.edu/dcthree/2015/05/26/harpokration-on-line/">Harpokration On Line</a> <span class="post-date">May 26, 2015</span> </li> <li> <a href="https://blogs.library.duke.edu/dcthree/2015/04/02/text-of-shifting-frontiers-in-the-digital-humanities/">Text of “Shifting Frontiers in the Digital Humanities”</a> <span class="post-date">April 2, 2015</span> </li> </ul> </nav></aside><aside id="archives-3" class="widget widget_archive"><h1 class="widget-title">Archives</h1><nav aria-label="Archives"> <ul> <li><a href='https://blogs.library.duke.edu/dcthree/2018/01/'>January 2018</a></li> <li><a href='https://blogs.library.duke.edu/dcthree/2016/08/'>August 2016</a></li> <li><a href='https://blogs.library.duke.edu/dcthree/2016/02/'>February 2016</a></li> <li><a href='https://blogs.library.duke.edu/dcthree/2015/05/'>May 2015</a></li> <li><a href='https://blogs.library.duke.edu/dcthree/2015/04/'>April 2015</a></li> <li><a href='https://blogs.library.duke.edu/dcthree/2015/03/'>March 2015</a></li> <li><a href='https://blogs.library.duke.edu/dcthree/2014/09/'>September 2014</a></li> <li><a href='https://blogs.library.duke.edu/dcthree/2014/08/'>August 2014</a></li> <li><a href='https://blogs.library.duke.edu/dcthree/2014/02/'>February 2014</a></li> <li><a href='https://blogs.library.duke.edu/dcthree/2013/12/'>December 2013</a></li> <li><a href='https://blogs.library.duke.edu/dcthree/2013/11/'>November 2013</a></li> <li><a href='https://blogs.library.duke.edu/dcthree/2013/08/'>August 2013</a></li> <li><a href='https://blogs.library.duke.edu/dcthree/2013/07/' aria-current="page">July 2013</a></li> <li><a href='https://blogs.library.duke.edu/dcthree/2013/06/'>June 2013</a></li> </ul> </nav></aside> </div><!-- #primary-sidebar --> </div><!-- #secondary --> </div><!-- #main --> <footer id="colophon" class="site-footer" role="contentinfo"> <div class="site-info"> <a href="https://blogs.library.duke.edu/dcthree/" rel="home">Duke Collaboratory for Classics Computing (DC3)</a> </div><!-- .site-info --> </footer><!-- #colophon --> </div><!-- #page --> </body> </html>