The XML Stack: A Dynamic Platform That Didn’t Make It
Long before modern JavaScript frameworks and JSON-based APIs, the web nearly standardised on a complete, declarative application platform built from XML, XPath, XPointer, and XSLT. This article explores what that platform was, what it was capable of, and why it quietly disappeared — despite solving many problems we still grapple with today.
Context
- XML was never intended to be “just a document format”.
- It was designed as a structured, machine-readable data model.
- Around it emerged a family of technologies that together formed a complete runtime stack.
- That stack was coherent, standardised, and remarkably powerful.
- Yet it failed to become the dominant model for dynamic web applications.
This article is not a recommendation to resurrect the stack — but a look at a road the industry nearly took.
The Vision: Documents as Dynamic Systems
- Data as structured trees, not flat tables.
- Declarative logic instead of imperative code.
- Separation of structure, behaviour, and presentation.
- Linking, querying, and transforming data without custom parsers.
This was not accidental — it was a deliberate architectural direction.
The Stack at a Glance
- XML — the hierarchical data model.
- XPath — declarative querying and navigation.
- XPointer / XLink — internal and cross-document addressing.
- XSLT — transformation and logic.
- XSL‑FO / XHTML — presentation.
- XSD / RELAX NG — validation and contracts.
Together, these formed something closer to an application runtime than a markup language.
XML: The Data Model
- Strong structure, not schemaless text.
- Namespaces as first-class scope.
- Document order and hierarchy as meaning.
- Designed to be read, validated, transformed, and linked.
XML was intended to be *operated on*, not merely displayed.
XPath: Declarative Querying
- Addressing nodes within a tree.
- Structural queries instead of string parsing.
- Axes that express relationships directly.
- A language designed to navigate meaning, not syntax.
XPath was effectively a query language for hierarchical data — without requiring a database.
XPointer: Addressing and Linking
- Fragment identifiers that point to structure, not offsets.
- Stable references inside documents.
- The ability to link *into* data, not just to files.
- Early foundations of graph-like relationships.
This solved a problem many modern systems re‑introduce with IDs and lookups.
XSLT: Transformation as Logic
- Declarative templates instead of imperative code.
- XPath as the execution language.
- Data reshaping, filtering, projection, and composition.
- Generating new XML, HTML, or other representations.
XSLT functioned as:
- a view engine
- a transformation pipeline
- and, effectively, a rules engine
All without embedding business logic in application code.
What This Platform Was Capable Of
- Treating documents as live data stores.
- Generating dynamic views from static sources.
- Linking independent documents into logical systems.
- Producing multiple outputs from a single source of truth.
- Enforcing structure through schemas instead of conventions.
In modern terms, this resembled:
- a NoSQL document database
- a query language
- a templating engine
- and a validation layer
— all standardised.
Why It Didn’t Survive
- Tooling was slow, complex, or inconsistent.
- Debugging declarative systems was unfamiliar.
- Browser support lagged and fragmented.
- The industry shifted toward imperative JavaScript.
- JSON offered convenience at the expense of structure.
- Frameworks replaced standards with ecosystems.
The platform didn’t fail technically — it was outpaced culturally.
What Replaced It
- JSON instead of XML.
- JavaScript instead of declarative transformation.
- Framework-specific templating.
- Application logic embedded in code rather than structure.
- Schemas as optional, not foundational.
Many problems solved by the XML stack were re‑solved — differently.
What We Lost
- Native document linking.
- Declarative, inspectable transformations.
- Strong separation of data and logic.
- Standardised querying across tools.
- Longevity and interoperability.
And perhaps most importantly:
- The ability to understand systems by reading their structure.
What Quietly Survived
- JSONPath echoes XPath.
- JSX and templating mirror XSLT concepts.
- Virtual DOMs resemble tree transformations.
- Configuration-as-data remains XML’s strongest niche.
- Structured data and schemas are slowly returning.
The ideas never died — only the implementation.
Architectural Lessons
- Declarative systems scale differently than imperative ones.
- Structure is a form of documentation.
- Standards trade speed for longevity.
- Tooling matters as much as design.
- Simplicity often wins — even when it loses capability.
Closing Reflection
The XML stack represents a moment where the web nearly standardised on a deeply principled, declarative application model.
It wasn’t wrong. It was early.
Understanding it today isn’t about nostalgia — it’s about recognising patterns, trade‑offs, and the recurring cycles of system design.
Related Topics
- Machine‑Readable HTML & Structured Data
- Progressive Enhancement & Graceful Degradation
- Semantic HTML, ARIA & Accessibility
- Configuration as Data
References
- W3C specifications for XML, XPath, XPointer, and XSLT
- Historical browser and standards documentation