Designing a custom XMP namespace
XMP lets you declare your own namespace for structured metadata in any file. Choose between existing namespaces like Dublin Core or design your own. This covers the tradeoffs and how LLMind's LRFS solves the design problem.
What is an XMP namespace
An XMP namespace is a URI that identifies a vocabulary of properties. Properties are prefixed with a short code. Dublin Core uses dc. The namespace URI is a permanent identifier that doesn't need to resolve—just a unique string.
Standard namespaces include Dublin Core (dc), IPTC Core, XMP Basic (xmp), and XMP Rights (xmpRights). Use them if your metadata fits. If not, design your own.
When to design your own
You need a custom namespace if your metadata is product-specific, you want to version independently, you're building a proprietary workflow, or integrating with specialized tools.
Example: an AI tool needs properties like entityConfidence, enrichmentModel, or lineageHash. Dublin Core doesn't have these. A custom namespace lets you define them once and use everywhere.
How to declare one
Using py3exiv2, you call registerNs to declare your namespace URI and prefix. Then use that prefix in your XMP properties.
Key points: choose your namespace URI carefully—it's permanent. The prefix is local to your code; consumers match by URI, not prefix. Registration scope varies by library.
Common pitfalls
Don't change the URI once published. Avoid prefix collisions. Document your properties. Test serialization across formats. Be explicit about array semantics (Bag, Seq, Alt).
How LRFS handles this
LLMind publishes a stable, fully-specified schema at a permanent namespace. Writers don't design; they use the schema. Readers know what to expect.
FAQ
Does the namespace URI need to resolve?
No. It's just an identifier. Many namespace URIs are HTTP URLs for uniqueness, but any stable string works. The only requirement is stability. If it changes, every consumer breaks.
Can I use LRFS alongside other namespaces?
Yes. LRFS writes to a permanent namespace independently. Dublin Core, IPTC, your custom namespaces, and LRFS can all coexist in the same XMP packet. Each is isolated from the others.