{"id":695,"date":"2013-12-02T08:44:14","date_gmt":"2013-12-02T07:44:14","guid":{"rendered":"http:\/\/exponentialdecay.co.uk\/blog\/?p=695"},"modified":"2025-06-26T17:17:59","modified_gmt":"2025-06-26T17:17:59","slug":"architecture-of-the-fr-org","status":"publish","type":"post","link":"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/","title":{"rendered":"Architecture of The-FR.org"},"content":{"rendered":"<p>Last week I <a title=\"exponentialdecay.co.uk: the-fr.org\" href=\"https:\/\/exponentialdecay.co.uk\/blog\/the-fr-org-the-format-registry\/\" target=\"_blank\" rel=\"noopener noreferrer\">blogged<\/a> about the publication of a new linked data format registry based on the work I did previously at The National Archives, UK.<\/p>\n<p>Where the work goes, we will have to see. <a title=\"GitHub.com: The Format Registry\" href=\"https:\/\/github.com\/exponential-decay\/the-format-registry\" target=\"_blank\" rel=\"noopener noreferrer\">Open sourcing<\/a> it was an important goal of the short sprint. Partly because I hope it demonstrates an architecture that can be adopted for a similar registry, and it may also provide a code-base that can be adapted for similar, linked open data projects. This blog provides an overview of that architecture&#8230;<\/p>\n<p><!--more--><\/p>\n<p>First, I must acknowledge the <a title=\"Google Code: Puelia LOD API\" href=\"https:\/\/code.google.com\/p\/puelia-php\/\" target=\"_blank\" rel=\"noopener noreferrer\">Puelia<\/a> Linked Open Data API that was released by Talis in the UK. I&#8217;ve used this API previously and part of my understanding of how it works has translated across into this work. It&#8217;s a deceptively simple model and there might be recognisable features in this. I have, however, created my own platform from scratch and for various reasons that was a more desirable approach for what I wanted to achieve.<\/p>\n<p><strong>Export of data from PRONOM&#8230;<\/strong><\/p>\n<p>The basic seed for the registry, as with a handful of others in recent years, <a title=\"soton.ac.uk: p2-registry\" href=\"http:\/\/p2-registry.ecs.soton.ac.uk\/\" target=\"_blank\" rel=\"noopener noreferrer\">P2<\/a>, and <a title=\"UDFR.org: Home Page\" href=\"http:\/\/www.udfr.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">UDFR<\/a>, to name two, is the baseline PRONOM dataset. XML is exposed for this data, and can be scraped by accessing the following URLs, using an incremental numbering scheme:<\/p>\n<ul>\n<li>http:\/\/www.nationalarchives.gov.uk\/PRONOM\/fmt\/{no}<\/li>\n<li>http:\/\/www.nationalarchives.gov.uk\/PRONOM\/x-fmt\/{no}<\/li>\n<\/ul>\n<p><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/01-pronom-extract.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-685 alignleft\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/01-pronom-extract.png\" alt=\"Extract from PRONOM\" width=\"1186\" height=\"676\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/01-pronom-extract.png 1186w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/01-pronom-extract-300x170.png 300w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/01-pronom-extract-1024x583.png 1024w\" sizes=\"auto, (max-width: 1186px) 100vw, 1186px\" \/><\/a><\/p>\n<p><strong>Archiving the PRONOM dataset<\/strong><\/p>\n<p>Decisions made on any records in a registry warrant the maintenance of legacy data as an audit trail. Should anything change, the discrepancy can be located by looking at previous versions of the data stored. The PRONOM export is kept in various locations on the server for different uses, and different potential uses. The XML is maintained in private timestamped folders on the server. This is simply because it costs less bandwidth to make zipped versions of the same data available to the public. This can be used in future to add legacy triples to the already available linked data. The most up-to-date PRONOM data is also copied to a separate folder. From this folder, triples are created without the need for additional logic for access.<\/p>\n<p><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/02-archive-pronom.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-686\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/02-archive-pronom.png\" alt=\"Archive PRONOM Data\" width=\"1186\" height=\"676\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/02-archive-pronom.png 1186w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/02-archive-pronom-300x170.png 300w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/02-archive-pronom-1024x583.png 1024w\" sizes=\"auto, (max-width: 1186px) 100vw, 1186px\" \/><\/a><\/p>\n<p><strong>XML is converted to triples&#8230;<\/strong><\/p>\n<p>We search the <em>current<\/em> PRONOM data directory for any XML within and read each file individually; matching any nodes we&#8217;re interested in with a mapping routine to create triples. URIs are given for each PUID in the PRONOM dataset and each node matched to its correct predicate and value.<\/p>\n<p><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/03-pronom-to-triples.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-687\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/03-pronom-to-triples.png\" alt=\"PRONOM XML Converted to Triples\" width=\"1186\" height=\"676\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/03-pronom-to-triples.png 1186w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/03-pronom-to-triples-300x170.png 300w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/03-pronom-to-triples-1024x583.png 1024w\" sizes=\"auto, (max-width: 1186px) 100vw, 1186px\" \/><\/a><\/p>\n<p><strong>Triples loaded to the Triplestore<\/strong><\/p>\n<p>The mapping process results in a <a title=\"Wikipedia.org: N-Triples\" href=\"http:\/\/en.wikipedia.org\/wiki\/N-Triples\" target=\"_blank\" rel=\"noopener noreferrer\">N-Triples<\/a> file (*.NT) which is uploaded to an <a title=\"GitHub.com: ARC2\" href=\"https:\/\/github.com\/semsol\/arc2\" target=\"_blank\" rel=\"noopener noreferrer\">ARC2<\/a> triplestore. At this point, as we have a <a title=\"the-fr.org: SPARQL endpoint\" href=\"http:\/\/the-fr.org\/public\/sparql\/endpoint.php\" target=\"_blank\" rel=\"noopener noreferrer\">SPARQL endpoint<\/a>, we have a foundation that can be exploited by anyone wishing to explore the dataset, and we have a foundation on which we can build a web GUI to provide linked open data.<\/p>\n<p><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/04-triples-to-sparql.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-688\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/04-triples-to-sparql.png\" alt=\"Triples Loaded Into Triplestore\" width=\"1186\" height=\"676\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/04-triples-to-sparql.png 1186w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/04-triples-to-sparql-300x170.png 300w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/04-triples-to-sparql-1024x583.png 1024w\" sizes=\"auto, (max-width: 1186px) 100vw, 1186px\" \/><\/a><\/p>\n<p><strong>ASK<\/strong><\/p>\n<p>We&#8217;re <a title=\"Wikipedia.org: Linked Data Principles\" href=\"http:\/\/en.wikipedia.org\/wiki\/Linked_data#Principles\" target=\"_blank\" rel=\"noopener noreferrer\">interested in<\/a> providing a HTML representation, and machine-readable representation for any of the URIs we talk about in our triplestore. When a user requests a URI it needs to dereference to one of those forms. We begin by checking that there is data by using an ASK <a title=\"the-fr.org: ASK\" href=\"http:\/\/the-fr.org\/public\/sparql\/endpoint.php?query=ask+where+%7B%0D%0A%0D%0A%3Chttp%3A%2F%2Fthe-fr.org%2Fid%2Ffile-format%2F1%3E+%3Fp+%3Fo+.%0D%0A%7D&amp;output=plain&amp;jsonp=&amp;key=&amp;show_inline=1\" target=\"_blank\" rel=\"noopener noreferrer\">query<\/a>.<\/p>\n<p><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/05-ask-sparql.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-689\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/05-ask-sparql.png\" alt=\"ASK Query on Triplestore\" width=\"1186\" height=\"676\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/05-ask-sparql.png 1186w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/05-ask-sparql-300x170.png 300w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/05-ask-sparql-1024x583.png 1024w\" sizes=\"auto, (max-width: 1186px) 100vw, 1186px\" \/><\/a><\/p>\n<p><strong>DESCRIBE<\/strong><\/p>\n<p>If the ASK query returns &#8216;true&#8217; we can then go back to the triplestore to perform a describe <a title=\"the-fr.org: Describe &lt;http:\/\/the-fr.org\/id\/file-format\/8&gt;\" href=\"http:\/\/the-fr.org\/public\/sparql\/endpoint.php?query=describe+%3Chttp%3A%2F%2Fthe-fr.org%2Fid%2Ffile-format%2F1%3E&amp;output=&amp;jsonp=&amp;key=&amp;show_inline=1\" target=\"_blank\" rel=\"noopener noreferrer\">query<\/a>.<\/p>\n<p><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/06-describe-sparql.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-690\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/06-describe-sparql.png\" alt=\"Describe Query on Triplestore\" width=\"1186\" height=\"676\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/06-describe-sparql.png 1186w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/06-describe-sparql-300x170.png 300w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/06-describe-sparql-1024x583.png 1024w\" sizes=\"auto, (max-width: 1186px) 100vw, 1186px\" \/><\/a><\/p>\n<p><strong>Transform RDF\/XML to Markdown via XSL and output to HTML<\/strong><\/p>\n<p><a title=\"Wikipedia.org: RDF\/XML\" href=\"http:\/\/en.wikipedia.org\/wiki\/RDF\/XML\" target=\"_blank\" rel=\"noopener noreferrer\">RDF\/XML<\/a> is returned from the DESCRIBE query. This is transformed using <a title=\"Wikipedia.org: XSL\" href=\"http:\/\/en.wikipedia.org\/wiki\/XSL\" target=\"_blank\" rel=\"noopener noreferrer\">XSL<\/a> via an <a title=\"PHP.net: XSL Transformation\" href=\"http:\/\/php.net\/manual\/en\/book.xsl.php\" target=\"_blank\" rel=\"noopener noreferrer\">XSL<\/a> transformation engine into <a title=\"daringfireball.net: Markdown\" href=\"http:\/\/daringfireball.net\/projects\/markdown\/\" target=\"_blank\" rel=\"noopener noreferrer\">markdown<\/a> text.<\/p>\n<p><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/07-xsl-to-md.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-693\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/07-xsl-to-md.png\" alt=\"RDF to Markdown\" width=\"1186\" height=\"676\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/07-xsl-to-md.png 1186w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/07-xsl-to-md-300x170.png 300w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/07-xsl-to-md-1024x583.png 1024w\" sizes=\"auto, (max-width: 1186px) 100vw, 1186px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/08-the-fr.org_.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-694\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/08-the-fr.org_.png\" alt=\"The-FR.org\" width=\"1186\" height=\"676\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/08-the-fr.org_.png 1186w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/08-the-fr.org_-300x170.png 300w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/08-the-fr.org_-1024x583.png 1024w\" sizes=\"auto, (max-width: 1186px) 100vw, 1186px\" \/><\/a><\/p>\n<p>The markdown is wrapped in HTML and presented back to the user.<\/p>\n<p>That is the basic workflow for the publication of HTML about the data in our triplestore. If a user requests data via a <strong><em>\/data\/<\/em><\/strong>\u00a0URI, then the request handler follows the same basic steps, but instead of going to the server and translating the response to markdown and HTML, it asks for a specific representation from the SPARQL endpoint, e.g. RDF, JSON, TSV. The response header is set accordingly to allow users to download data with the appropriate MIME type.<\/p>\n<p><b>.htaccess<\/b><\/p>\n<p>The key to making this work is the <a title=\"GitHub.com: the-fr.org .htaccess \" href=\"https:\/\/github.com\/exponential-decay\/the-format-registry\/blob\/master\/.htaccess\" target=\"_blank\" rel=\"noopener noreferrer\">.htaccess<\/a> file which rewrites certain URIs and routes requests to the Apache HTTP server through to the appropriate response handlers. There are three primary URIs of interest:<\/p>\n<ul>\n<li>\/id\/file-format\/{no}<\/li>\n<li>\/doc\/file-format\/{no}<\/li>\n<li>\/data\/file-format\/{no}<\/li>\n<\/ul>\n<p>&#8216;id&#8217; URIs provide a unique name for our file-formats. The doc and data URIs return HTML and data, respectively. The type of data returned by the the &#8216;data&#8217; URIs is determined by the file extension attached to the request.<\/p>\n<p>There are URIs for our classes and properties. E.g.<\/p>\n<ul>\n<li><a title=\"the-fr.org: File Format Class\" href=\"http:\/\/the-fr.org\/def\/format-registry\/FileFormat\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/the-fr.org\/def\/format-registry\/FileFormat<\/a><\/li>\n<li><a title=\"the-fr.org: PUID Property\" href=\"http:\/\/the-fr.org\/prop\/format-registry\/puid\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/the-fr.org\/prop\/format-registry\/puid<\/a><\/li>\n<\/ul>\n<p>There are API URIs being developed to provide alternative routes into the data stored in the triplestore. These are described in the API <a title=\"the-fr.org: API Documentation\" href=\"http:\/\/the-fr.org\/public\/documentation\/api.php\" target=\"_blank\" rel=\"noopener noreferrer\">documentation<\/a>.<\/p>\n<p>And that&#8217;s the architecture of the project thus far. If you have any comments or questions, feel free to ask below. Hopefully it makes some sense and hopefully the source code is useful to anyone embarking on a similar project.<\/p>\n<p>Finally, in summary, here is all that information as a short animated GIF:<\/p>\n<p><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/the-fr-org-architecture.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-711\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/the-fr-org-architecture.gif\" alt=\"Architecture of the-fr.org\" width=\"616\" height=\"351\" \/><\/a><\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_695\" class=\"pvc_stats total_only  \" data-element-id=\"695\" style=\"\"><i class=\"pvc-stats-icon small\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Last week I <a title=\"exponentialdecay.co.uk: the-fr.org\" href=\"https:\/\/exponentialdecay.co.uk\/blog\/the-fr-org-the-format-registry\/\" target=\"_blank\" rel=\"noopener noreferrer\">blogged<\/a> about the publication of a new linked data format registry based on the work I did previously at The National Archives, UK.<\/p>\n<p>Where the work goes, we will have to see. <a title=\"GitHub.com: The Format Registry\" href=\"https:\/\/github.com\/exponential-decay\/the-format-registry\" target=\"_blank\" rel=\"noopener noreferrer\">Open sourcing<\/a> it was an important goal of the short sprint. Partly because I hope it demonstrates an architecture that can be adopted for a similar registry, and it may also provide a code-base that can be adapted for similar, linked open data projects. This blog provides an overview of that architecture&#8230;<\/p>\n<div class=\"link-more\"><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &ldquo;Architecture of The-FR.org&rdquo;<\/span>&hellip;<\/a><\/div>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_695\" class=\"pvc_stats total_only  \" data-element-id=\"695\" style=\"\"><i class=\"pvc-stats-icon small\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":1,"featured_media":696,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"federated","footnotes":""},"categories":[3,20,54],"tags":[21,162,74,16,56,58,35,57],"class_list":["post-695","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-digital-preservation","category-just-code","category-linked-open-data","tag-data","tag-format-registry","tag-linked-open-data","tag-pronom","tag-pronom-lite","tag-software-architecture","tag-sparql","tag-the-fr-org","entry"],"a3_pvc":{"activated":true,"total_views":3914,"today_views":0},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Architecture of The-FR.org - ross spencer :: exponentialdecay.digipres :: blog<\/title>\n<meta name=\"description\" content=\"Looking at the architecture of the-fr.org a linked open data file-format registry harnessing PRONOM as triples and providing SPARQL querying.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Architecture of The-FR.org - ross spencer :: exponentialdecay.digipres :: blog\" \/>\n<meta property=\"og:description\" content=\"Looking at the architecture of the-fr.org a linked open data file-format registry harnessing PRONOM as triples and providing SPARQL querying.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/\" \/>\n<meta property=\"og:site_name\" content=\"ross spencer :: exponentialdecay.digipres :: blog\" \/>\n<meta property=\"article:published_time\" content=\"2013-12-02T07:44:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-26T17:17:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/00-architecture-of-the-fr-org.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1186\" \/>\n\t<meta property=\"og:image:height\" content=\"676\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ross Spencer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@beet_keeper\" \/>\n<meta name=\"twitter:site\" content=\"@beet_keeper\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ross Spencer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/architecture-of-the-fr-org\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/architecture-of-the-fr-org\\\/\"},\"author\":{\"name\":\"Ross Spencer\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\"},\"headline\":\"Architecture of The-FR.org\",\"datePublished\":\"2013-12-02T07:44:14+00:00\",\"dateModified\":\"2025-06-26T17:17:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/architecture-of-the-fr-org\\\/\"},\"wordCount\":864,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\"},\"image\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/architecture-of-the-fr-org\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2013\\\/12\\\/00-architecture-of-the-fr-org.png\",\"keywords\":[\"Data\",\"format-registry\",\"Linked Open Data\",\"PRONOM\",\"PRONOM-lite\",\"Software Architecture\",\"SPARQL\",\"the-fr.org\"],\"articleSection\":[\"Digital Preservation\",\"Just Code\",\"Linked Open Data\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/architecture-of-the-fr-org\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/architecture-of-the-fr-org\\\/\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/architecture-of-the-fr-org\\\/\",\"name\":\"Architecture of The-FR.org - ross spencer :: exponentialdecay.digipres :: blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/architecture-of-the-fr-org\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/architecture-of-the-fr-org\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2013\\\/12\\\/00-architecture-of-the-fr-org.png\",\"datePublished\":\"2013-12-02T07:44:14+00:00\",\"dateModified\":\"2025-06-26T17:17:59+00:00\",\"description\":\"Looking at the architecture of the-fr.org a linked open data file-format registry harnessing PRONOM as triples and providing SPARQL querying.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/architecture-of-the-fr-org\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/architecture-of-the-fr-org\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/architecture-of-the-fr-org\\\/#primaryimage\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2013\\\/12\\\/00-architecture-of-the-fr-org.png\",\"contentUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2013\\\/12\\\/00-architecture-of-the-fr-org.png\",\"width\":1186,\"height\":676,\"caption\":\"Architecture of The-FR.org\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/architecture-of-the-fr-org\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Architecture of The-FR.org\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/\",\"name\":\"ross spencer :: exponentialdecay.digipres :: blog\",\"description\":\"Digital preservation analyst, researcher, and software developer\",\"publisher\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\",\"name\":\"Ross Spencer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\",\"contentUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\",\"width\":2560,\"height\":2560,\"caption\":\"Ross Spencer\"},\"logo\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\"},\"description\":\"Digital preservation domain expert and full-stack software developer.\",\"sameAs\":[\"http:\\\/\\\/www.exponentialdecay.co.uk\\\/blog\",\"https:\\\/\\\/www.instagram.com\\\/b33tk33p3r\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/ross-spencer-b6b9b758\\\/\",\"https:\\\/\\\/x.com\\\/beet_keeper\"],\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/author\\\/exponentialdecay\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Architecture of The-FR.org - ross spencer :: exponentialdecay.digipres :: blog","description":"Looking at the architecture of the-fr.org a linked open data file-format registry harnessing PRONOM as triples and providing SPARQL querying.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/","og_locale":"en_US","og_type":"article","og_title":"Architecture of The-FR.org - ross spencer :: exponentialdecay.digipres :: blog","og_description":"Looking at the architecture of the-fr.org a linked open data file-format registry harnessing PRONOM as triples and providing SPARQL querying.","og_url":"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/","og_site_name":"ross spencer :: exponentialdecay.digipres :: blog","article_published_time":"2013-12-02T07:44:14+00:00","article_modified_time":"2025-06-26T17:17:59+00:00","og_image":[{"width":1186,"height":676,"url":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/00-architecture-of-the-fr-org.png","type":"image\/png"}],"author":"Ross Spencer","twitter_card":"summary_large_image","twitter_creator":"@beet_keeper","twitter_site":"@beet_keeper","twitter_misc":{"Written by":"Ross Spencer","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/#article","isPartOf":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/"},"author":{"name":"Ross Spencer","@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716"},"headline":"Architecture of The-FR.org","datePublished":"2013-12-02T07:44:14+00:00","dateModified":"2025-06-26T17:17:59+00:00","mainEntityOfPage":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/"},"wordCount":864,"commentCount":1,"publisher":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716"},"image":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/#primaryimage"},"thumbnailUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/00-architecture-of-the-fr-org.png","keywords":["Data","format-registry","Linked Open Data","PRONOM","PRONOM-lite","Software Architecture","SPARQL","the-fr.org"],"articleSection":["Digital Preservation","Just Code","Linked Open Data"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/","url":"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/","name":"Architecture of The-FR.org - ross spencer :: exponentialdecay.digipres :: blog","isPartOf":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/#primaryimage"},"image":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/#primaryimage"},"thumbnailUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/00-architecture-of-the-fr-org.png","datePublished":"2013-12-02T07:44:14+00:00","dateModified":"2025-06-26T17:17:59+00:00","description":"Looking at the architecture of the-fr.org a linked open data file-format registry harnessing PRONOM as triples and providing SPARQL querying.","breadcrumb":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/#primaryimage","url":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/00-architecture-of-the-fr-org.png","contentUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2013\/12\/00-architecture-of-the-fr-org.png","width":1186,"height":676,"caption":"Architecture of The-FR.org"},{"@type":"BreadcrumbList","@id":"https:\/\/exponentialdecay.co.uk\/blog\/architecture-of-the-fr-org\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/exponentialdecay.co.uk\/blog\/"},{"@type":"ListItem","position":2,"name":"Architecture of The-FR.org"}]},{"@type":"WebSite","@id":"https:\/\/exponentialdecay.co.uk\/blog\/#website","url":"https:\/\/exponentialdecay.co.uk\/blog\/","name":"ross spencer :: exponentialdecay.digipres :: blog","description":"Digital preservation analyst, researcher, and software developer","publisher":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/exponentialdecay.co.uk\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716","name":"Ross Spencer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png","url":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png","contentUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png","width":2560,"height":2560,"caption":"Ross Spencer"},"logo":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png"},"description":"Digital preservation domain expert and full-stack software developer.","sameAs":["http:\/\/www.exponentialdecay.co.uk\/blog","https:\/\/www.instagram.com\/b33tk33p3r\/","https:\/\/www.linkedin.com\/in\/ross-spencer-b6b9b758\/","https:\/\/x.com\/beet_keeper"],"url":"https:\/\/exponentialdecay.co.uk\/blog\/author\/exponentialdecay\/"}]}},"views":5639,"_links":{"self":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts\/695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=695"}],"version-history":[{"count":23,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts\/695\/revisions"}],"predecessor-version":[{"id":2518,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts\/695\/revisions\/2518"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/media\/696"}],"wp:attachment":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}