A few words about metadata
As with the word "data", the word "metadata" can mean many things. These words are abstractions, nebulous by design. Like all such words, they gain their meaning from context and popular usage, and here we attempt to document two distinct meanings.
Concrete and Abstract (or Content and Structure)
I use the adjective "concrete" or "content" to distinguish metadata that is attached as an attribute to another concrete chunk of data. A Microsoft Word document, for instance, will have an Author field. A JPEG picture will have dimensions. All files will have a Creation Date, and a Length. This is the most common usage of the term today.
"Abstract" metadata, on the other hand, is data that is used to describe data at a higher level of abstraction. While Concrete metadata is held in structures within a particular file type, and provides attributes for that containing file, Abstract metadata describes the structure itself, and provides the attributes of that structure.
If you have a particular JPEG file, you have a concrete chunk of data, with concrete metadata within. If you refer to JPEG files in general, you are invoking an abstract metadata shorthand. Abstract metadata is what we produce when we define our data structures. Concrete metadata is what we put into those structures.
The program that allows you to view that concrete metadata is using abstract metadata to do so. The source code we write, in whatever language, is abstract metadata.
Rock, Paper, Scissors
The snake eats its tail as we circumnavigate a globular idea. Code is data, and data is code, and the entire pi is sliced into slivers of metadata.
Data As Code (DAC)
When you define a data structure, you are writing code.
Code As Data (CAD)
Your code is just data to the compiler.
The Metadope Manifesto