I have been having some spare time lately, and last week-end I boostrapped a new project: exempi. exempi is a library to deal with XMP metadata.

But what is XMP? XMP stands for eXtensible Metadata Platform. It is a standard, created by Adobe, to define an extensible storage for metadata. XMP is based on RDF (and therefore XML) and encompass EXIF, IPTC4XMP metadata[1], Dublin Core and other metadata models. It is now part of the workflow for digital photographers and supported by various software package used in the industry.

Today, Adobe provide a SDK as a source code library to read and parse XMP, but unfortunately the license makes it incompatible with the GPL license[2]. I couldn't find an XMP library[3] either. Since libopenraw needs a standard way to be able to extract the metadata, that are mostly, but not only, EXIF, I decided that the best solution was actually to go with XMP.

What are the plans? The current plan is to have a library that provide a way to access to this structured information extracted from an XML blob. That way it is easy to validate against the XMP side car files that I have. Sidecar files are XML files containing the XMP metadata, that are stored next to the file they refer to. This is the conservative way to store metadata, even more important when it is for read-only files like digital camera RAW files.

More about that later, as the XML parsing code is not finished.

As for the behind the scene, exempi is written in C++ and will have a plain C API. The license is LGPL.

Notes

[1] which supersede the IPTC IIM

[2] IANAL so don't take this as a legal statement

[3] I could actually find a couple of utilities, including a metadata plugin for Gimp