{"id":2380,"date":"2025-03-19T09:44:02","date_gmt":"2025-03-19T09:44:02","guid":{"rendered":"https:\/\/exponentialdecay.co.uk\/blog\/?p=2380"},"modified":"2025-11-24T18:07:21","modified_gmt":"2025-11-24T18:07:21","slug":"file-format-building-blocks-primitives-in-digital-preservation","status":"publish","type":"post","link":"https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/","title":{"rendered":"File format building blocks: primitives in digital preservation"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">A primitive in software development can be described as:<\/span><\/p>\n<blockquote><p><span style=\"font-weight: 400;\">a fundamental data type or code that can be used to build more complex software programs or interfaces.<\/span><\/p><\/blockquote>\n<p><span style=\"font-weight: 400;\">\u2013 via <\/span><a href=\"https:\/\/web.archive.org\/web\/20241214100954\/https:\/\/www.capterra.com\/glossary\/primitive\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">https:\/\/www.capterra.com\/glossary\/primitive\/<\/span><\/a><span style=\"font-weight: 400;\"> (also Wiki: <a href=\"https:\/\/en.wikipedia.org\/wiki\/Language_primitive\" target=\"_blank\" rel=\"noopener\">language primitives<\/a>)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Like bricks and mortar in the building industry, or oil and acrylic for a painter, a primitive helps a software developer to create increasingly more complex software, from your shell scripts, to entire digital preservation systems.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Primitives also help us to create file formats, as we\u2019ve seen with the Eyeglass example I have <a href=\"https:\/\/exponentialdecay.co.uk\/blog\/shattering-the-eyeglass\/\" target=\"_blank\" rel=\"noopener\">presented previously<\/a>, the file format is at its most fundamental level a representation of a data structure as a binary stream, that can be read out of the data structure onto disk, and likewise from disk to a data structure from code.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For the file format developer we have at our disposal all of the primitives that the software developer has, and like them, we also have \u201cfile formats\u201d <em>(as we tend to understand them in digital preservation terms)<\/em> that serve as our primitives as well.\u00a0<\/span><\/p>\n<p><!--more--><\/p>\n<p><span style=\"font-weight: 400;\">Take for example plain-text (<a href=\"https:\/\/www.nationalarchives.gov.uk\/PRONOM\/x-fmt\/111\" target=\"_blank\" rel=\"noopener\">x-fmt\/111<\/a>) \u2013 if I write this blog in plain-text we have a document, or record, something recognizable as the written language, literally, it&#8217;s a blog. Yet, if I use this same foundational \u201cfile format\u201d and instead write:<\/span><\/p>\n<pre>#! \/usr\/bin\/bash\r\nset -eux\r\necho \u201chello world\u201d\r\n<\/pre>\n<p>I have a shell script that&#8217;s going to be evaluated as at least three commands in a Linux environment.<\/p>\n<p><span style=\"font-weight: 400;\">If I am asked what are the significant properties of either my blog, or the shell-script, through the lens of plain-text it would make very little sense.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Asked however, what the properties of the thing that is the blog are important (the record), or the properties of the shell script that I need to case about then, we would have a very different conversation.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In the second instance I haven\u2019t a simple record or document any longer, I have something approaching code, and with that, an exponentially larger number of dependencies, including what platform it might run on, what commands might be invoked, and something that when run, could succeed or fail depending on different conditions.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The first take away here is that plain-text is a file format primitive, it helps us to build more complex formats.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">We can take this further, like in something approaching research data in XML, or JSON to pick two examples.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">These \u201cformats\u201d, to take a very high-level viewpoint, are built upon plain-text. In PRONOM we have the classification &#8220;text&#8221; and \u201ctext (structured)\u201d (structured text) and this is an important delineation, structured text means that we have a format that is likely to have very specific instructions about how to process the data that is encoded.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">XML for example is a textual representation of a tree structure, and we talk about its elements in terms of roots, nodes, namespaces, parents, and children.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">JSON encodes, platform agnostically, the language primitives, of programming languages, (<a href=\"https:\/\/www.json.org\/json-en.html\" target=\"_blank\" rel=\"noopener\">ECMA-404<\/a>, <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc7159\" target=\"_blank\" rel=\"noopener\">RFC7159<\/a>) &#8211; slices\/arrays, keys, values, dictionaries, and so on.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">XML and JSON both have important properties, both rely on being well-formed and valid, for example, to be functional, e.g. piping JSON in to <a href=\"https:\/\/jqlang.org\/\" target=\"_blank\" rel=\"noopener\">JQ<\/a> will allow it to be queried &#8211; but if the JSON is missing a single curtly-bracket, it can\u2019t really be accessed or queried at all &#8211; at least not without finding the problems with the file and fixing them, e.g. through the lens of <a href=\"https:\/\/jsonlint.com\/\" target=\"_blank\" rel=\"noopener\">JSONLint<\/a>.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Access and query are interesting terms here \u2013 what does accessing and querying something like XML or JSON mean?<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Well, it depends.<\/span><\/p>\n<p>If we extend the concept of a file format primitive to structured text such as XML and JSON, we can begin to understand that w<span style=\"font-weight: 400;\">e don\u2019t simply <a href=\"https:\/\/imgflip.com\/i\/9nu0mh\" target=\"_blank\" rel=\"noopener\">&#8220;write XML&#8221;<\/a> for the sake of writing XML. We write XML alongside its own semantics either implied by some code or programmer&#8217;s purpose, or intention; or written explicitly, through the use of a schema &#8211; this adds the property of validation to XML&#8217;s already very specific ideas of being <em>well-formed and valid<\/em>.<\/span><\/p>\n<p>The point is to access and query the XML means understanding its structure and what it encodes, and how it encodes it.<\/p>\n<p><span style=\"font-weight: 400;\">Likewise, when we write JSON it is usually to be conformant to some sort of specification as well; again, implied, say, through code, or explicit through a technology like <a href=\"https:\/\/json-schema.org\/\" target=\"_blank\" rel=\"noopener\">JSON schema<\/a>.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Stepping back for a second, our technology stack is growing, we have a plain-text file, on which we have Unicode code points for each character in an XML or JSON document, and all of the rules associated with those languages, and alongside those, we have have another plain-text file schema document, encoded in its own format, with its own rules, and describing the rules of the document we have written. It\u2019s getting complex.<\/span><\/p>\n<p><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/simple-tech-stack.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2385\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/simple-tech-stack.png\" alt=\"Image shows a diagram of a simplistic view of the technology stack that goes into the creation of XML as a document (record)\" width=\"1127\" height=\"859\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/simple-tech-stack.png 1127w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/simple-tech-stack-500x381.png 500w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/simple-tech-stack-1024x780.png 1024w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/simple-tech-stack-768x585.png 768w\" sizes=\"auto, (max-width: 1127px) 100vw, 1127px\" \/><\/a><\/p>\n<p>Given this view we can see that preservation of the XML can&#8217;t be done in isolation, but, perhaps less clearly, understanding the XML can&#8217;t be understood without context.<\/p>\n<p>But what context?<\/p>\n<p><span style=\"font-weight: 400;\">If I give you a PRONOM record you need to understand PRONOM&#8217;s XML schema. If I give you a METS document you have to understand the METS schema. Both documents have very different semantics that are needed for the preservation and understanding of either as records.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Lets briefly look at the Eyeglass format again. This time, here are three JSON representations of the data:<\/span><\/p>\n<p><strong>Representation 1: An array of tuples and two strings<\/strong><\/p>\n<pre>[\r\n    [\r\n        \"-3.35\",\r\n        \"+0.50\"\r\n    ],\r\n    [\r\n        \"-0.25\",\r\n        \"-1.00\"\r\n    ],\r\n    [\r\n        130,\r\n        80\r\n    ],\r\n    [\r\n        0,\r\n        0\r\n    ],\r\n    [\r\n        0,\r\n        0\r\n    ],\r\n    [\r\n        0.66,\r\n        0.5\r\n    ],\r\n    [\r\n        12,\r\n        12\r\n    ],\r\n    \"Distance and Close Work.\",\r\n    \"Patient's eyesight needs correction. History of diabetes in family but indicators found. Standard checkup interval recommended.\"\r\n]<\/pre>\n<p><strong>Representation 2: One long array<\/strong><\/p>\n<pre>[\r\n    \"-3.35\",\r\n    \"+0.50\",\r\n    \"-0.25\",\r\n    \"-1.00\",\r\n    130,\r\n    80,\r\n    0,\r\n    0,\r\n    0,\r\n    0,\r\n    0.66,\r\n    0.5,\r\n    12,\r\n    12,\r\n    \"Distance and Close Work.\",\r\n    \"Patient's eyesight needs correction. History of diabetes in family but indicators found. Standard checkup interval recommended.\"\r\n]\r\n<\/pre>\n<p><strong>Representation 3: A collection of name-value pairs<\/strong><\/p>\n<pre>{\r\n    \"sphere\": [\r\n        \"-3.35\",\r\n        \"+0.50\"\r\n    ],\r\n    \"cylinder\": [\r\n        \"-0.25\",\r\n        \"-1.00\"\r\n    ],\r\n    \"axis\": [\r\n        130,\r\n        80\r\n    ],\r\n    \"prism\": [\r\n        0,\r\n        0\r\n    ],\r\n    \"base\": [\r\n        0,\r\n        0\r\n    ],\r\n    \"distance_acuity\": [\r\n        0.66,\r\n        0.5\r\n    ],\r\n    \"near_acuity\": [\r\n        12,\r\n        12\r\n    ],\r\n    \"purpose\": \"Distance and Close Work.\",\r\n    \"observations\": \"Patient's eyesight needs correction. History of diabetes in family but indicators found. Standard checkup interval recommended.\"\r\n}\r\n<\/pre>\n<p><span style=\"font-weight: 400;\">At a human level, &#8220;representation 3&#8221; might be the easiest to understand as the &#8220;keys&#8221; are self-describing; we just need to understand when a value is for the left-eye or right-eye, and we might also want to understand the language of the text, and its encoding. Both representations &#8220;1&#8221; and &#8220;2&#8221; are terse in different ways and it is probably best to assume that the rules for decoding these will be in someone&#8217;s code for the Eyeglass format somewhere. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">All three representations encode <em>exactly<\/em> the same information and they\u2019re not the only ways of encoding it, they are just the first three I landed on. Using JSON as a building block for the Eyeglass format we can be more or less expressive as desired, we can even add more complexity, like <a href=\"https:\/\/en.wikipedia.org\/wiki\/Base64\" target=\"_blank\" rel=\"noopener\">Base64<\/a> for text, we can even sign, or encrypt values (if patient data is sensitive, e.g. like the encryption used in <a href=\"http:\/\/fileformats.archiveteam.org\/wiki\/SOPS\" target=\"_blank\" rel=\"noopener\">SOPS<\/a>).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The question is, which version will I receive at my research data archive if we haven\u2019t reasonable standards around design and documentation of research data? And does it matter if I haven\u2019t a schema to work with that will allow me to reuse any of this information?<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The answer is no, it doesn\u2019t matter. At a human level it is very likely that I haven\u2019t anywhere near enough information to decode what is here without the background information.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This is why a holistic, records based analysis of digital objects is important in digital preservation. You can\u2019t simply take one object out of context and on merit and understand what preservation means. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">With the JSON above, for example, in the context of research data it is far more important for me to know, what the data was, what its schema was, whether the output was repeatable as part of another script, i.e. for the recreation and verification of results. Even understanding if the data could be replayed byte-for-byte is an incredible property, if present. I might have one version of the JSON on disk, and then another I can output in code, and if they align bite-wise, i.e. their checksums match, I have a very strong link between the research project and its outputs <em>(we&#8217;re getting close to those <a href=\"https:\/\/exponentialdecay.co.uk\/blog\/the-sensitivity-index-corrupting-y2k\/\" target=\"_blank\" rel=\"noopener\">diplomatics<\/a> again!)<\/em>.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">When asked to analyse a dataset recently, most of the above was missing in the collecting methodology and documentation. These are bigger problems than the preservation of the data itself.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">When we wrote <a href=\"https:\/\/natlib.govt.nz\/files\/digital-preservation\/NSLA-Format-Model-NRIN-redraft.pdf\" target=\"_blank\" rel=\"noopener\">Re-imagining the Format Model. Introducing the work of the NSLA Digital Preservation Technical Registry<\/a> (and <a href=\"https:\/\/www.digipres.org\/publications\/ipres\/ipres-2014\/papers\/a-next-generation-technical-registry-moving-practice-forward\/\" target=\"_blank\" rel=\"noopener\">iPRES 2014<\/a>) we spoke about four structures that we can use to understand file formats:<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400;\">Specification,<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Implementation,\u00a0<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Composition<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Aspect<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">The main take-away from that paper in the context of this blog is a recognition that file formats are building blocks and context all the way down.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">It&#8217;s unlikely that this paper will catch fire a decade after it was written, but while it doesn&#8217;t, perhaps some terminology to consider when we talk about file-formats is the concept of primitives. When we dissect a file to understand how it might be preserved, we ask what its primitives or foundational elements are. In the case of data formats like XML or JSON, these so-called &#8220;formats&#8221;, even with their own specifications, are only primitives of something much more complex, the record.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Digital preservation is almost always in support of another field, be that archives, museums, or research libraries, or something else. You can save &#8220;data&#8221; but without taking the holistic view you are almost certainly not preserving it.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">At the point of transfer to the archive we&#8217;re already at risk of losing context, we probably want to understand what we can do at point of creation <em>(create-to-maintain)<\/em>, including providing researchers with the digital literacy to understand the impact of their decisions about the use of data structures, and the impact of not having documentation, or repeatable outputs.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In research data, it seems like we might need to get past this first problem, understanding the building blocks, versus the record, to be able to understand the specific issue of preservation.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><em>TLDR;<\/em> If you\u2019re ever asked by someone what the significant properties of JSON are: let them know JSON certainly has <em>interesting<\/em> properties but it&#8217;s only part of the story. <\/span><span style=\"font-weight: 400;\">What&#8217;s its context? Is there a schema available? What does the data represent? How should it be interpreted? Because those &#8220;properties&#8221; really are <em>significant.<\/em><\/span><\/p>\n<hr \/>\n<h2>Born-networked<\/h2>\n<p>It strikes me that some of the language used in Emily Maemura&#8217;s recent writing about describing and understanding web-archives in aggregate, specifically, the idea of being born-networked, has potential application in the research data world.<\/p>\n<p>&#8212; <a href=\"https:\/\/link.springer.com\/article\/10.1007\/s10502-025-09475-z\" target=\"_blank\" rel=\"noopener\">Conceptualizing aggregate-level description in web archives<\/a> (2025)<\/p>\n<hr \/>\n<h2>Nestor<\/h2>\n<p>Nestor have a call-for-papers (CFP) open until May 12 for a special issue on the linking of research data management and long-term archiving. Those reading this blog might be interested in submitting something.<\/p>\n<p>Nestor CFP: <a href=\"https:\/\/bausteine-fdm.de\/calls\" target=\"_blank\" rel=\"noopener\">Linking of research data management and long-term archiving<\/a>.<\/p>\n<p>As Nestor describe it:<\/p>\n<blockquote><p>From the perspective of long-term archiving (LZA), one special feature and challenge of research data is that it cannot be treated as just another type of data or media. &#8220;Research data&#8221; is not just another type alongside, for example, &#8220;audio\/video data&#8221; or &#8220;text data&#8221;. The research context itself is what is special, and the creation or use of data in the research context turns the data into research data. This means in particular that data can become research data even after it has been archived if it is used for research.<\/p><\/blockquote>\n<p>Which very much aligns with the message of this blog.<\/p>\n<hr \/>\n<h2><span style=\"font-weight: 400;\">Welcome to the information layer cake<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Context as we know, is everything to the archive and the archivist. Without it, you just have something, but you don\u2019t know what.<\/span><\/p>\n<p>Stephen Clark describes pretty much all of what I try to touch on above, he describes the <a href=\"https:\/\/www.linkedin.com\/posts\/steffclarke_data-information-recordkeeping-activity-6903793398956875776--KmB\/?trk=public_profile_like_view\" target=\"_blank\" rel=\"noopener\">information layer cake<\/a> to describe data and information (and records) with one very effective image.<\/p>\n<figure id=\"attachment_2386\" aria-describedby=\"caption-attachment-2386\" style=\"width: 602px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/clarke-data-versus-records-e1742333351197.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2386 size-full\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/clarke-data-versus-records-e1742333351197.jpeg\" alt=\"\" width=\"602\" height=\"550\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/clarke-data-versus-records-e1742333351197.jpeg 602w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/clarke-data-versus-records-e1742333351197-500x457.jpeg 500w\" sizes=\"auto, (max-width: 602px) 100vw, 602px\" \/><\/a><figcaption id=\"caption-attachment-2386\" class=\"wp-caption-text\">Image Credit: Stephen Clarke MRIM via <a href=\"https:\/\/www.linkedin.com\/posts\/steffclarke_data-information-recordkeeping-activity-6903793398956875776--KmB\/?trk=public_profile_like_view\">LinkedIn<\/a><\/figcaption><\/figure>\n<hr \/>\n<h2>Create to maintain<\/h2>\n<p>I also just wanted to amplify this blog that I found while writing this one. I like the message about always writing code with a maintenance mindset, the practice it gives you for larger projects, and its other benefits.<\/p>\n<p>&#8212; <a href=\"https:\/\/coding-disappointment.me\/2017\/05\/23\/create-to-maintain\/\" target=\"_blank\" rel=\"noopener\">The coding disappointment: create to maintain<\/a> (2017)<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_2380\" class=\"pvc_stats total_only  \" data-element-id=\"2380\" 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><span style=\"font-weight: 400;\">A primitive in software development can be described as:<\/span><\/p>\n<blockquote><p><span style=\"font-weight: 400;\">a fundamental data type or code that can be used to build more complex software programs or interfaces.<\/span><\/p><\/blockquote>\n<p><span style=\"font-weight: 400;\">\u2013 via <\/span><a href=\"https:\/\/web.archive.org\/web\/20241214100954\/https:\/\/www.capterra.com\/glossary\/primitive\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">https:\/\/www.capterra.com\/glossary\/primitive\/<\/span><\/a><span style=\"font-weight: 400;\"> (also Wiki: <a href=\"https:\/\/en.wikipedia.org\/wiki\/Language_primitive\" target=\"_blank\" rel=\"noopener\">language primitives<\/a>)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Like bricks and mortar in the building industry, or oil and acrylic for a painter, a primitive helps a software developer to create increasingly more complex software, from your shell scripts, to entire digital preservation systems.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Primitives also help us to create file formats, as we\u2019ve seen with the Eyeglass example I have <a href=\"https:\/\/exponentialdecay.co.uk\/blog\/shattering-the-eyeglass\/\" target=\"_blank\" rel=\"noopener\">presented previously<\/a>, the file format is at its most fundamental level a representation of a data structure as a binary stream, that can be read out of the data structure onto disk, and likewise from disk to a data structure from code.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For the file format developer we have at our disposal all of the primitives that the software developer has, and like them, we also have \u201cfile formats\u201d <em>(as we tend to understand them in digital preservation terms)<\/em> that serve as our primitives as well.\u00a0<\/span><\/p>\n<div class=\"link-more\"><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &ldquo;File format building blocks: primitives in digital preservation&rdquo;<\/span>&hellip;<\/a><\/div>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_2380\" class=\"pvc_stats total_only  \" data-element-id=\"2380\" 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":2383,"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":[86,114,3,20],"tags":[59,147,71,339,302,30,31,17,337,338,335,347,121,42,340,334,341,336],"class_list":["post-2380","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-archives","category-digital-literacy","category-digital-preservation","category-just-code","tag-archives","tag-digipres","tag-digital-preservation","tag-digital-preservation-essentialism","tag-diplomatics","tag-eyeglass","tag-eygl","tag-file-formats","tag-information-records-management","tag-irm","tag-json","tag-jsonid","tag-open-data","tag-open-source","tag-rdm","tag-research-data","tag-research-data-management","tag-xml","entry"],"a3_pvc":{"activated":true,"total_views":415,"today_views":0},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>File format building blocks: primitives in digital preservation - ross spencer :: exponentialdecay.digipres :: blog<\/title>\n<meta name=\"description\" content=\"We fall into a trap when we think about a file format in isolation from its context. Using a records-based approach for digital preservation.\" \/>\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\/file-format-building-blocks-primitives-in-digital-preservation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"File format building blocks: primitives in digital preservation - ross spencer :: exponentialdecay.digipres :: blog\" \/>\n<meta property=\"og:description\" content=\"We fall into a trap when we think about a file format in isolation from its context. Using a records-based approach for digital preservation.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/\" \/>\n<meta property=\"og:site_name\" content=\"ross spencer :: exponentialdecay.digipres :: blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-03-19T09:44:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-24T18:07:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/lambton-quay-building-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1440\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\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=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/file-format-building-blocks-primitives-in-digital-preservation\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/file-format-building-blocks-primitives-in-digital-preservation\\\/\"},\"author\":{\"name\":\"Ross Spencer\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\"},\"headline\":\"File format building blocks: primitives in digital preservation\",\"datePublished\":\"2025-03-19T09:44:02+00:00\",\"dateModified\":\"2025-11-24T18:07:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/file-format-building-blocks-primitives-in-digital-preservation\\\/\"},\"wordCount\":1986,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\"},\"image\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/file-format-building-blocks-primitives-in-digital-preservation\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/lambton-quay-building-scaled.jpg\",\"keywords\":[\"Archives\",\"digipres\",\"Digital Preservation\",\"Digital Preservation Essentialism\",\"diplomatics\",\"eyeglass\",\"eygl\",\"File Formats\",\"Information Records Management\",\"IRM\",\"JSON\",\"jsonid\",\"Open Data\",\"Open Source\",\"RDM\",\"Research Data\",\"Research Data Management\",\"XML\"],\"articleSection\":[\"Archives\",\"Digital Literacy\",\"Digital Preservation\",\"Just Code\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/file-format-building-blocks-primitives-in-digital-preservation\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/file-format-building-blocks-primitives-in-digital-preservation\\\/\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/file-format-building-blocks-primitives-in-digital-preservation\\\/\",\"name\":\"File format building blocks: primitives in digital preservation - ross spencer :: exponentialdecay.digipres :: blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/file-format-building-blocks-primitives-in-digital-preservation\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/file-format-building-blocks-primitives-in-digital-preservation\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/lambton-quay-building-scaled.jpg\",\"datePublished\":\"2025-03-19T09:44:02+00:00\",\"dateModified\":\"2025-11-24T18:07:21+00:00\",\"description\":\"We fall into a trap when we think about a file format in isolation from its context. Using a records-based approach for digital preservation.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/file-format-building-blocks-primitives-in-digital-preservation\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/file-format-building-blocks-primitives-in-digital-preservation\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/file-format-building-blocks-primitives-in-digital-preservation\\\/#primaryimage\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/lambton-quay-building-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/lambton-quay-building-scaled.jpg\",\"width\":2560,\"height\":1440,\"caption\":\"Image of the foundations of a new building being erected in Wellington New Zealand, circa 2017.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/file-format-building-blocks-primitives-in-digital-preservation\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"File format building blocks: primitives in digital preservation\"}]},{\"@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":"File format building blocks: primitives in digital preservation - ross spencer :: exponentialdecay.digipres :: blog","description":"We fall into a trap when we think about a file format in isolation from its context. Using a records-based approach for digital preservation.","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\/file-format-building-blocks-primitives-in-digital-preservation\/","og_locale":"en_US","og_type":"article","og_title":"File format building blocks: primitives in digital preservation - ross spencer :: exponentialdecay.digipres :: blog","og_description":"We fall into a trap when we think about a file format in isolation from its context. Using a records-based approach for digital preservation.","og_url":"https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/","og_site_name":"ross spencer :: exponentialdecay.digipres :: blog","article_published_time":"2025-03-19T09:44:02+00:00","article_modified_time":"2025-11-24T18:07:21+00:00","og_image":[{"width":2560,"height":1440,"url":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/lambton-quay-building-scaled.jpg","type":"image\/jpeg"}],"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":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/#article","isPartOf":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/"},"author":{"name":"Ross Spencer","@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716"},"headline":"File format building blocks: primitives in digital preservation","datePublished":"2025-03-19T09:44:02+00:00","dateModified":"2025-11-24T18:07:21+00:00","mainEntityOfPage":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/"},"wordCount":1986,"commentCount":0,"publisher":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716"},"image":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/#primaryimage"},"thumbnailUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/lambton-quay-building-scaled.jpg","keywords":["Archives","digipres","Digital Preservation","Digital Preservation Essentialism","diplomatics","eyeglass","eygl","File Formats","Information Records Management","IRM","JSON","jsonid","Open Data","Open Source","RDM","Research Data","Research Data Management","XML"],"articleSection":["Archives","Digital Literacy","Digital Preservation","Just Code"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/","url":"https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/","name":"File format building blocks: primitives in digital preservation - ross spencer :: exponentialdecay.digipres :: blog","isPartOf":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/#primaryimage"},"image":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/#primaryimage"},"thumbnailUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/lambton-quay-building-scaled.jpg","datePublished":"2025-03-19T09:44:02+00:00","dateModified":"2025-11-24T18:07:21+00:00","description":"We fall into a trap when we think about a file format in isolation from its context. Using a records-based approach for digital preservation.","breadcrumb":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/#primaryimage","url":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/lambton-quay-building-scaled.jpg","contentUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/03\/lambton-quay-building-scaled.jpg","width":2560,"height":1440,"caption":"Image of the foundations of a new building being erected in Wellington New Zealand, circa 2017."},{"@type":"BreadcrumbList","@id":"https:\/\/exponentialdecay.co.uk\/blog\/file-format-building-blocks-primitives-in-digital-preservation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/exponentialdecay.co.uk\/blog\/"},{"@type":"ListItem","position":2,"name":"File format building blocks: primitives in digital preservation"}]},{"@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":3609,"_links":{"self":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts\/2380","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=2380"}],"version-history":[{"count":24,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts\/2380\/revisions"}],"predecessor-version":[{"id":2773,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts\/2380\/revisions\/2773"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/media\/2383"}],"wp:attachment":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=2380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=2380"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=2380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}