<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://knowledgebase.pirho.net/index.php?action=history&amp;feed=atom&amp;title=One_Data_Model%2C_Many_Representations</id>
	<title>One Data Model, Many Representations - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://knowledgebase.pirho.net/index.php?action=history&amp;feed=atom&amp;title=One_Data_Model%2C_Many_Representations"/>
	<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=One_Data_Model,_Many_Representations&amp;action=history"/>
	<updated>2026-07-11T15:42:39Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=One_Data_Model,_Many_Representations&amp;diff=295&amp;oldid=prev</id>
		<title>Dex at 11:12, 14 March 2026</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=One_Data_Model,_Many_Representations&amp;diff=295&amp;oldid=prev"/>
		<updated>2026-03-14T11:12:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:12, 14 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;= One Data Model, Many Representations =&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;  &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Modern web systems often create unnecessary separation between websites and APIs. In reality, both are simply different representations of the same underlying data. When designed correctly, a website can function as an API, and an API can render a complete website — without semantic loss, duplication, or inconsistency. This article explores that principle and the machine‑readable HTML technologies that make it viable.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Modern web systems often create unnecessary separation between websites and APIs. In reality, both are simply different representations of the same underlying data. When designed correctly, a website can function as an API, and an API can render a complete website — without semantic loss, duplication, or inconsistency. This article explores that principle and the machine‑readable HTML technologies that make it viable.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki:diff:1.41:old-276:rev-295:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=One_Data_Model,_Many_Representations&amp;diff=276&amp;oldid=prev</id>
		<title>Dex: Created page with &quot;= One Data Model, Many Representations =  &#039;&#039;&#039;Summary:&#039;&#039;&#039;   Modern web systems often create unnecessary separation between websites and APIs. In reality, both are simply different representations of the same underlying data. When designed correctly, a website can function as an API, and an API can render a complete website — without semantic loss, duplication, or inconsistency. This article explores that principle and the machine‑readable HTML technologies that make i...&quot;</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=One_Data_Model,_Many_Representations&amp;diff=276&amp;oldid=prev"/>
		<updated>2026-03-13T14:35:58Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= One Data Model, Many Representations =  &amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039;   Modern web systems often create unnecessary separation between websites and APIs. In reality, both are simply different representations of the same underlying data. When designed correctly, a website can function as an API, and an API can render a complete website — without semantic loss, duplication, or inconsistency. This article explores that principle and the machine‑readable HTML technologies that make i...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= One Data Model, Many Representations =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
Modern web systems often create unnecessary separation between websites and APIs. In reality, both are simply different representations of the same underlying data. When designed correctly, a website can function as an API, and an API can render a complete website — without semantic loss, duplication, or inconsistency. This article explores that principle and the machine‑readable HTML technologies that make it viable.&lt;br /&gt;
&lt;br /&gt;
== The Fundamental Principle ==&lt;br /&gt;
&lt;br /&gt;
At the heart of a well‑designed web system is a simple idea:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;There should be one canonical data model.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HTML, JSON, XML, and other formats are not competing truths — they are **projections** of that model, tailored for different consumers.&lt;br /&gt;
&lt;br /&gt;
Problems arise when:&lt;br /&gt;
* HTML says one thing&lt;br /&gt;
* APIs say another&lt;br /&gt;
* Metadata exists in isolation&lt;br /&gt;
* Meaning is duplicated instead of shared&lt;br /&gt;
&lt;br /&gt;
When this happens, systems drift, documentation lies, and maintenance cost grows quietly but relentlessly.&lt;br /&gt;
&lt;br /&gt;
== The Website as an API ==&lt;br /&gt;
&lt;br /&gt;
A properly structured HTML document is already machine‑readable.&lt;br /&gt;
&lt;br /&gt;
Browsers, crawlers, screen readers, and assistive technologies all parse:&lt;br /&gt;
* Document structure&lt;br /&gt;
* Element relationships&lt;br /&gt;
* Headings and landmarks&lt;br /&gt;
* Links and identifiers&lt;br /&gt;
&lt;br /&gt;
When semantic meaning is embedded directly into HTML — using Microformats or RDFa — the document becomes a self‑describing data source.&lt;br /&gt;
&lt;br /&gt;
In this model:&lt;br /&gt;
* The content is the data&lt;br /&gt;
* The markup expresses meaning&lt;br /&gt;
* Machines consume the same source as humans&lt;br /&gt;
&lt;br /&gt;
This approach is resilient by design:&lt;br /&gt;
* It works without JavaScript&lt;br /&gt;
* It survives partial rendering&lt;br /&gt;
* It degrades gracefully&lt;br /&gt;
* It remains readable decades later&lt;br /&gt;
&lt;br /&gt;
The document does not pretend to be an API — it simply &amp;#039;&amp;#039;is&amp;#039;&amp;#039; one.&lt;br /&gt;
&lt;br /&gt;
== The API as a Website ==&lt;br /&gt;
&lt;br /&gt;
The inverse approach is equally valid.&lt;br /&gt;
&lt;br /&gt;
When an API exposes:&lt;br /&gt;
* Stable identifiers&lt;br /&gt;
* Explicit relationships&lt;br /&gt;
* Meaningful field names&lt;br /&gt;
* A coherent domain model&lt;br /&gt;
&lt;br /&gt;
…then rendering HTML from it becomes a presentation concern, not a data problem.&lt;br /&gt;
&lt;br /&gt;
The same endpoint can legitimately serve:&lt;br /&gt;
* JSON to machines&lt;br /&gt;
* HTML to humans&lt;br /&gt;
* XML to legacy systems&lt;br /&gt;
* Other formats as required&lt;br /&gt;
&lt;br /&gt;
Nothing new is invented — only rendered.&lt;br /&gt;
&lt;br /&gt;
This is not duplication.  &lt;br /&gt;
It is **representation**.&lt;br /&gt;
&lt;br /&gt;
== Machine‑Readable HTML Technologies in Context ==&lt;br /&gt;
&lt;br /&gt;
Different technologies support this model in different ways.&lt;br /&gt;
&lt;br /&gt;
=== Microformats ===&lt;br /&gt;
&lt;br /&gt;
Microformats embed meaning using existing HTML elements and class names.&lt;br /&gt;
&lt;br /&gt;
Their strengths are simplicity and longevity:&lt;br /&gt;
* No parallel data structures&lt;br /&gt;
* No special parsers required&lt;br /&gt;
* No loss of human readability&lt;br /&gt;
&lt;br /&gt;
If the machine disappears, the document remains correct.&lt;br /&gt;
&lt;br /&gt;
This makes Microformats ideal for:&lt;br /&gt;
* Human‑centric documents&lt;br /&gt;
* Long‑lived content&lt;br /&gt;
* Systems that value resilience&lt;br /&gt;
&lt;br /&gt;
=== RDFa ===&lt;br /&gt;
&lt;br /&gt;
RDFa extends this idea by allowing richer expression of relationships.&lt;br /&gt;
&lt;br /&gt;
Crucially, it still:&lt;br /&gt;
* Annotates existing content&lt;br /&gt;
* Avoids data duplication&lt;br /&gt;
* Keeps the document authoritative&lt;br /&gt;
&lt;br /&gt;
Edits to content are edits to data — a powerful alignment that reduces drift over time.&lt;br /&gt;
&lt;br /&gt;
=== JSON‑LD ===&lt;br /&gt;
&lt;br /&gt;
JSON‑LD serves a different purpose.&lt;br /&gt;
&lt;br /&gt;
It exists primarily for automated consumers that:&lt;br /&gt;
* Do not want to parse HTML&lt;br /&gt;
* Prefer fast, predictable extraction&lt;br /&gt;
* Operate at web scale&lt;br /&gt;
&lt;br /&gt;
JSON‑LD works best when treated as:&lt;br /&gt;
* An optimisation layer&lt;br /&gt;
* A reflection of existing truth&lt;br /&gt;
* A convenience for external systems&lt;br /&gt;
&lt;br /&gt;
Problems arise only when JSON‑LD becomes the *primary* source of meaning rather than a projection of it.&lt;br /&gt;
&lt;br /&gt;
=== Microdata ===&lt;br /&gt;
&lt;br /&gt;
Microdata introduced attribute‑based semantics alongside HTML5.&lt;br /&gt;
&lt;br /&gt;
In practice, it:&lt;br /&gt;
* Adds verbosity without clarity&lt;br /&gt;
* Introduces new concepts without solving new problems&lt;br /&gt;
* Competes with simpler, more mature approaches&lt;br /&gt;
&lt;br /&gt;
It is supported, but rarely preferred in real‑world systems.&lt;br /&gt;
&lt;br /&gt;
== Avoiding Parallel Realities ==&lt;br /&gt;
&lt;br /&gt;
The most common architectural failure is semantic duplication.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
* Content updated but metadata forgotten&lt;br /&gt;
* API fields drifting from UI labels&lt;br /&gt;
* SEO data diverging from visible truth&lt;br /&gt;
* Accessibility annotations bolted on late&lt;br /&gt;
&lt;br /&gt;
The cure is not tooling — it is alignment.&lt;br /&gt;
&lt;br /&gt;
When:&lt;br /&gt;
* HTML and API share identifiers&lt;br /&gt;
* Meaning is expressed once&lt;br /&gt;
* Representations are derived, not rewritten&lt;br /&gt;
&lt;br /&gt;
…the system becomes calm and legible.&lt;br /&gt;
&lt;br /&gt;
== Progressive Enhancement as Architecture ==&lt;br /&gt;
&lt;br /&gt;
This approach naturally supports progressive enhancement.&lt;br /&gt;
&lt;br /&gt;
A document‑first system:&lt;br /&gt;
* Works without scripts&lt;br /&gt;
* Improves with them&lt;br /&gt;
* Never depends on them&lt;br /&gt;
&lt;br /&gt;
An API‑first system:&lt;br /&gt;
* Scales cleanly&lt;br /&gt;
* Supports automation&lt;br /&gt;
* Remains renderer‑agnostic&lt;br /&gt;
&lt;br /&gt;
Both are valid — and both can coexist — as long as they project the same underlying model.&lt;br /&gt;
&lt;br /&gt;
== Design Guidance ==&lt;br /&gt;
&lt;br /&gt;
A pragmatic strategy looks like this:&lt;br /&gt;
&lt;br /&gt;
* **Human‑first content** → Microformats or RDFa&lt;br /&gt;
* **Crawler‑first metadata** → JSON‑LD&lt;br /&gt;
* **Single source of truth** → Canonical identifiers and models&lt;br /&gt;
* **Long‑term systems** → Embedded meaning over external declarations&lt;br /&gt;
&lt;br /&gt;
There is no universal winner — only informed trade‑offs.&lt;br /&gt;
&lt;br /&gt;
== Final Thought ==&lt;br /&gt;
&lt;br /&gt;
The web does not suffer from a lack of standards.  &lt;br /&gt;
It suffers from a lack of honesty.&lt;br /&gt;
&lt;br /&gt;
Systems last when:&lt;br /&gt;
* Meaning is not duplicated&lt;br /&gt;
* Data is not reinvented&lt;br /&gt;
* Documents say exactly what they mean&lt;br /&gt;
&lt;br /&gt;
When the website and the API tell the same story, the web works as it always should have — as a shared space for humans and machines alike.&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
</feed>