## XMP XMP — Extensible Metadata Platform (XMP) |

## Stability Level

Stable, unless otherwise indicated

## Synopsis

    #include <libtracker-extract/tracker-extract.h>

                        TrackerXmpData;
    TrackerXmpData *    tracker_xmp_new                     (const gchar *buffer,
                                                             gsize len,
                                                             const gchar *uri);
    void                tracker_xmp_free                    (TrackerXmpData *data);
    gboolean            tracker_xmp_read                    (const gchar *buffer,
                                                             size_t len,
                                                             const gchar *uri,
                                                             TrackerXmpData *data);
    gboolean            tracker_xmp_apply                   (TrackerSparqlBuilder *preupdate,
                                                             TrackerSparqlBuilder *metadata,
                                                             const gchar *uri,
                                                             TrackerXmpData *data);

## Description

The Adobe Extensible Metadata Platform (XMP) is a standard, created by Adobe Systems Inc., for processing and storing standardized and proprietary information relating to the contents of a file.

XMP standardizes the definition, creation, and processing of extensible metadata. Serialized XMP can be embedded into a significant number of popular file formats, without breaking their readability by non-XMP-aware applications. Embedding metadata ("the truth is in the file") avoids many problems that occur when metadata is stored separately. XMP is used in PDF, photography and photo editing applications.

This API is provided to remove code duplication between extractors using these standards.

## Details

### TrackerXmpData

    typedef struct {
    	/* NS_DC */
    	gchar *title;
    	gchar *rights;
    	gchar *creator;
    	gchar *description;
    	gchar *date;
    	gchar *keywords;
    	gchar *subject;

    	gchar *publisher;
    	gchar *contributor;
    	gchar *type;
    	gchar *format;
    	gchar *identifier;
    	gchar *source;
    	gchar *language;
    	gchar *relation;
    	gchar *coverage;

    	/* NS_CC */
    	gchar *license;

    	/* NS_PDF */
    	gchar *pdf_title;
    	gchar *pdf_keywords;

    	/* NS_EXIF */
    	gchar *title2;
    	gchar *time_original;
    	gchar *artist;
    	gchar *make;
    	gchar *model;
    	gchar *orientation;
    	gchar *flash;
    	gchar *metering_mode;
    	gchar *exposure_time;
    	gchar *fnumber;
    	gchar *focal_length;

    	gchar *iso_speed_ratings;
    	gchar *white_balance;
    	gchar *copyright;

    	/* TODO NS_XAP*/
    	gchar *rating;

    	/* TODO NS_IPTC4XMP */
    	/* TODO NS_PHOTOSHOP */
    	gchar *address;
    	gchar *country;
    	gchar *state;
    	gchar *city;

    	/* ABI barrier (don't change things above this) */
    	gchar *gps_altitude;
    	gchar *gps_altitude_ref;
    	gchar *gps_latitude;
    	gchar *gps_longitude;
    	gchar *gps_direction;
    } TrackerXmpData;

### tracker_xmp_new ()

    TrackerXmpData *    tracker_xmp_new                     (const gchar *buffer,
                                                             gsize len,
                                                             const gchar *uri);

This function takes `len` bytes of `buffer` and runs it through the XMP library.

`buffer` : | a chunk of data with xmp data in it.
`len` : | the size of `buffer`.
`uri` : | the URI this is related to.
Returns : | a newly allocated TrackerXmpData struct if XMP data was found, `NULL` otherwise. Free the returned struct with `tracker_xmp_free()`.

Since 0.10

### tracker_xmp_free ()

    void                tracker_xmp_free                    (TrackerXmpData *data);

Frees `data` and all TrackerXmpData members. `NULL` will produce a a warning.

`data` : | a TrackerXmpData struct

Since 0.10

### tracker_xmp_read ()

    gboolean            tracker_xmp_read                    (const gchar *buffer,
                                                             size_t len,
                                                             const gchar *uri,
                                                             TrackerXmpData *data);

### Warning

`tracker_xmp_read` is deprecated and should not be used in newly-written code. 0.9. Use `tracker_xmp_new()` instead.

This function takes `len` bytes of `buffer` and runs it through the XMP library. The result is that `data` is populated with the XMP data found in `uri`.

`buffer` : | a chunk of data with xmp data in it.
`len` : | the size of `buffer`.
`uri` : | the URI this is related to.
`data` : | a pointer to a TrackerXmpData structure to populate.
Returns : | `TRUE` if the `data` was populated successfully, otherwise `FALSE` is returned.

Since 0.8

### tracker_xmp_apply ()

    gboolean            tracker_xmp_apply                   (TrackerSparqlBuilder *preupdate,
                                                             TrackerSparqlBuilder *metadata,
                                                             const gchar *uri,
                                                             TrackerXmpData *data);

This function applies all data in `data` to `metadata`.

`metadata` : | the metadata object to apply XMP data to.
`uri` : | the URI this is related to.
`data` : | the data to push into `metadata`.
Returns : | `TRUE` if the `data` was applied to `metadata` successfully, otherwise `FALSE` is returned.

Since 0.8