Skip to content

API Reference

Error

xmpkit.XmpError

Bases: Exception

Error type for XMP operations

Properties and values

xmpkit.XmpProperty

A property entry produced by iterating an XmpMeta instance.

Methods:

  • __new__

    Create a new XMP property object from the provided values

Attributes:

  • name (str) –

    Property name (e.g., "CreatorTool", "creator", "Flash")

  • namespace_uri (str) –

    Expanded namespace URI for the property (e.g., http://ns.adobe.com/xap/1.0/)

  • value (XmpValue) –

    Property value

name property

name: str

Property name (e.g., "CreatorTool", "creator", "Flash")

namespace_uri property

namespace_uri: str

Expanded namespace URI for the property (e.g., http://ns.adobe.com/xap/1.0/)

value property

value: XmpValue

Property value

__new__

__new__(namespace_uri: str, name: str, value: XmpValue) -> XmpProperty

Create a new XMP property object from the provided values

xmpkit.XmpValue

XMP value types

This classes defines subclasses for the value types that can be stored in XMP properties.

All child classes inherit from this class, but the documentation doesn't allow for this kind of recursive inheritance, so the child classes are typed this way. The typing is still valid but just doesn't represent the full structure of the objects

Classes:

Methods:

  • as_array

    Get the value as a list, if it is an Array.

  • as_bool

    Get the value as a boolean, if it is a boolean type, or can be converted to.

  • as_int

    Get the value as an integer, if it is an integer type, or can be converted to.

  • as_str

    Get the value as a string, if it is a string or date/time type

  • as_structure

    Get the value as a dict, if it is a Structure.

Array

Array of values

Methods:

as_array

as_array() -> list[XmpValue]

Get the value as a list.

Boolean

Boolean value

Methods:

  • as_bool

    Get the value as a boolean.

as_bool

as_bool() -> bool

Get the value as a boolean.

DateTime

Date/time value (ISO 8601 format)

Methods:

  • as_str

    Get the value as a string.

as_str

as_str() -> str

Get the value as a string.

Added in version 0.1.2

Integer

Integer value

Methods:

  • as_int

    Get the value as an integer.

as_int

as_int() -> int

Get the value as an integer.

String

String value

Methods:

  • as_str

    Get the value as a string.

  • as_int

    Get the value as an integer, if it can be converted to.

  • as_bool

    Get the value as a boolean, if it can be converted to.

as_str

as_str() -> str

Get the value as a string.

as_int

as_int() -> int | None

Get the value as an integer, if it can be converted to.

as_bool

as_bool() -> bool | None

Get the value as a boolean, if it can be converted to.

Structure

Structure (key-value pairs)

Methods:

as_structure

as_structure() -> dict[str, XmpValue]

Get the value as a dict.

as_array

as_array() -> list[XmpValue] | None

Get the value as a list, if it is an Array.

as_bool

as_bool() -> bool | None

Get the value as a boolean, if it is a boolean type, or can be converted to.

as_int

as_int() -> int | None

Get the value as an integer, if it is an integer type, or can be converted to.

as_str

as_str() -> str | None

Get the value as a string, if it is a string or date/time type

as_structure

as_structure() -> dict[str, XmpValue] | None

Get the value as a dict, if it is a Structure.

xmpkit.XmpDateTime

XMP Date/Time structure

Represents a date/time value with optional components. XMP supports partial dates (e.g., just year, or year-month).

Methods:

  • __new__

    Create a new XMP date/time from the provided values

  • parse

    Parse an XMP date/time string

  • format

    Format an XMP date/time to string

  • validate

    Validate the date/time values

Attributes:

day property writable

day: int

Day (1-31, 0 means not set)

has_date property writable

has_date: bool

Whether date components are present

has_time property writable

has_time: bool

Whether time components are present

has_timezone property writable

has_timezone: bool

Whether timezone is present

hour property writable

hour: int

Hour (0-23)

minute property writable

minute: int

Minute (0-59)

month property writable

month: int

Month (1-12, 0 means not set)

nanosecond property writable

nanosecond: int

Nanoseconds (0-999999999)

second property writable

second: int

Second (0-59)

tz_hour property writable

tz_hour: int

Timezone hour offset (0-23)

tz_minute property writable

tz_minute: int

Timezone minute offset (0-59)

tz_sign property writable

tz_sign: int

Timezone sign: -1 (west), 0 (UTC), +1 (east)

year property writable

year: int

Year (can be negative for BCE dates)

__new__

__new__(year: int = 0, month: int = 0, day: int = 0, hour: int = 0, minute: int = 0, second: int = 0, nanosecond: int = 0, has_date: bool = False, has_time: bool = False, has_timezone: bool = False, tz_sign: int = 0, tz_hour: int = 0, tz_minute: int = 0) -> XmpDateTime

Create a new XMP date/time from the provided values

parse classmethod

parse(s: str) -> XmpDateTime

Parse an XMP date/time string

Parameters:

  • s (str) –

    The date/time string to parse

Raises:

  • XmpError

    If the string could not be parsed

XMP date/time format:

  • YYYY - year only
  • YYYY-MM - year and month
  • YYYY-MM-DD - date only
  • YYYY-MM-DDThh:mm:ss - date and time
  • YYYY-MM-DDThh:mm:ss.sss - with fractional seconds
  • YYYY-MM-DDThh:mm:ssZ - UTC timezone
  • YYYY-MM-DDThh:mm:ss+hh:mm - timezone offset
  • YYYY-MM-DDThh:mm:ss-hh:mm - negative timezone offset

Example::

from xmpkit import XmpDateTime

dt = XmpDateTime.parse("2023-12-25T10:30:00Z")
assert dt.year == 2023
assert dt.month == 12
assert dt.day == 25

format

format() -> str

Format an XMP date/time to string

Formats the date/time according to XMP specification:

  • Year only: YYYY
  • Year and month: YYYY-MM
  • Date only: YYYY-MM-DD
  • Date and time: YYYY-MM-DDThh:mm:ss
  • With fractional seconds: YYYY-MM-DDThh:mm:ss.sss
  • With timezone: YYYY-MM-DDThh:mm:ssZ or YYYY-MM-DDThh:mm:ss+hh:mm

validate

validate() -> None

Validate the date/time values

Checks that all values are within valid ranges.

Raises:

  • XmpError

    If the date/time data is not valid

Metadata

xmpkit.XmpMeta

Main structure for working with XMP metadata

Methods:

Attributes:

about_uri property writable

about_uri: str | None

The about URI

__new__

__new__() -> XmpMeta

Create a new empty XMP metadata object

all_properties

all_properties() -> list[XmpProperty]

Returns all top-level properties in this metadata object.

append_array_item

append_array_item(namespace: str, path: str, value: XmpValue) -> None

Append an item to an array property

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • path (str) –

    The array property path

  • value (XmpValue) –

    The value to append

delete_array_item

delete_array_item(namespace: str, path: str, index: int) -> None

Delete an item from an array property

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • path (str) –

    The array property path

  • index (int) –

    The index to delete (0-based)

delete_property

delete_property(namespace: str, path: str) -> None

Delete a property

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • path (str) –

    The property path

delete_struct_field

delete_struct_field(namespace: str, struct_path: str, field_name: str) -> None

Delete a structure field

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • struct_path (str) –

    The structure property path

  • field_name (str) –

    The field name to delete

get_array_item

get_array_item(namespace: str, path: str, index: int) -> XmpValue | None

Get an array item by index

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • path (str) –

    The array property path (e.g., "creator")

  • index (int) –

    The array index (0-based)

get_array_size

get_array_size(namespace: str, path: str) -> int | None

Get the size of an array property

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • path (str) –

    The array property path

get_date_time

get_date_time(namespace: str, path: str) -> XmpDateTime | None

Get a date/time property

This is a convenience method that parses a date/time property value and returns it as an XmpDateTime.

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • path (str) –

    The property path

Returns:

  • XmpDateTime | None

    An XMP date/time object if the property exists and can be parsed, None otherwise.

Example::

from xmpkit import XmpMeta, XmpValue, XmpDateTime

meta = XmpMeta()
meta.set_property(
    "http://ns.adobe.com/xap/1.0/",
    "ModifyDate",
    XmpValue.DateTime("2023-12-25T10:30:00Z")
)

dt = meta.get_date_time("http://ns.adobe.com/xap/1.0/", "ModifyDate")
assert dt.year = 2023
assert dt.month = 12
assert dt.day = 25

get_localized_text

get_localized_text(namespace: str, property: str, generic_lang: str, specific_lang: str) -> tuple[str, str] | None

Get a localized text property

This method searches for a localized text value matching the specified language codes. It follows XMP language matching rules:

  1. Exact match for specific_lang
  2. Match for generic_lang if specific_lang not found
  3. Fallback to "x-default" if neither found

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • property (str) –

    The property name

  • generic_lang (str) –

    Generic language code (e.g., "en"), can be empty string

  • specific_lang (str) –

    Specific language code (e.g., "en-US"), required

Returns:

  • tuple[str, str] | None

    If the localized text if found, a tuple holding the text value and the actual language code used (may differ from requested). None if the property doesn't exist or no matching language found.

Example::

from xmpkit import XmpMeta

meta = XmpMeta()
meta.set_localized_text(
    "http://purl.org/dc/elements/1.1/",
    "title",
    "",
    "x-default",
    "Default Title"
)
value, lang = meta.get_localized_text(
    "http://purl.org/dc/elements/1.1/",
    "title",
    "",
    "x-default"
)
assert value == "Default Title"
assert lang == "x-default"

get_property

get_property(namespace: str, path: str) -> XmpValue | None

Get a property value. It will return an XmpValue.Array, XmpValue.Structure or an XmpValue.String.

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • path (str) –

    The property path (e.g., "CreatorTool" or "creator[1]")

get_struct_field

get_struct_field(namespace: str, struct_path: str, field_name: str) -> XmpValue | None

Get a structure field value

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • struct_path (str) –

    The structure property path

  • field_name (str) –

    The field name within the structure

has_property

has_property(namespace: str, path: str) -> bool

Check if a property exists

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • path (str) –

    The property path

insert_array_item

insert_array_item(namespace: str, path: str, index: int, value: XmpValue) -> None

Insert an item into an array property at a specific index

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • path (str) –

    The array property path

  • index (int) –

    The index to insert at (0-based)

  • value (XmpValue) –

    The value to insert

parse classmethod

parse(s: str) -> XmpMeta

Parse XMP metadata from a string

The string should contain a complete XMP Packet (with or without the <?xpacket> wrapper).

Parameters:

  • s (str) –

    The string to parse the metadata from

serialize

serialize() -> str

Serialize to RDF/XML string

serialize_packet

serialize_packet() -> str

Serialize to XMP Packet format

serialize_packet_with_padding

serialize_packet_with_padding(target_length: int) -> str

Serialize to XMP Packet format with padding to reach a target length

This is useful for in-place updates where the new packet needs to fit within the space of an existing packet.

Parameters:

  • target_length (int) –

    The desired total packet length in bytes

Raises:

  • XmpError

    If the serialized packet exceeds target_length

Returns:

  • str

    The serialized packet with padding

set_date_time

set_date_time(namespace: str, path: str, dt: XmpDateTime) -> None

Set a date/time property

This is a convenience method that validates and formats the date/time value before setting it as a property.

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • path (str) –

    The property path

  • dt (XmpDateTime) –

    The date/time value

Example::

from xmpkit import XmpMeta, XmpDateTime

meta = XmpMeta()

dt = XmpDateTime()

dt.has_date = true
dt.has_time = true
dt.year = 2023
dt.month = 12
dt.day = 25
dt.hour = 10
dt.minute = 30
dt.second = 0
dt.has_timezone = true
dt.tz_sign = 0  # UTC

meta.set_date_time("http://ns.adobe.com/xap/1.0/", "ModifyDate", dt)

set_localized_text

set_localized_text(namespace: str, property: str, _generic_lang: str, specific_lang: str, value: str) -> None

Set a localized text property

Localized text properties are stored as rdf:Alt arrays, where each item has an xml:lang qualifier indicating its language.

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • property (str) –

    The property name

  • generic_lang

    Generic language code (e.g., "en"), can be empty string

  • specific_lang (str) –

    Specific language code (e.g., "en-US"), required

  • value (str) –

    The text value to set

Example::

from xmpkit import XmpMeta, XmpValue

meta = XmpMeta()
meta.set_localized_text(
    "http://purl.org/dc/elements/1.1/",
    "title",
    "",
    "x-default",
    "Default Title"
)

set_property

set_property(namespace: str, path: str, value: XmpValue) -> None

Set a property value

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • path (str) –

    The property path

  • value (XmpValue) –

    The value to set

set_struct_field

set_struct_field(namespace: str, struct_path: str, field_name: str, value: XmpValue) -> None

Set a structure field value

Parameters:

  • namespace (str) –

    The namespace URI or prefix

  • struct_path (str) –

    The structure property path

  • field_name (str) –

    The field name within the structure

  • value (XmpValue) –

    The value to set

File

xmpkit.XmpFile

High-level API for working with XMP metadata in files

File Update Behavior

When a file is opened with XmpOptions.with_for_update, changes made via put_xmp are not written to disk immediately. The file remains open and changes are only written when close or try_close is called.

Example::

from xmpkit import XmpFile, XmpOptions, XmpMeta, XmpValue

file = XmpFile()
file.open_with("image.jpg", XmpOptions().for_update())

if (meta := file.get_xmp()) is not None:
    meta.set_property(
        "http://ns.adobe.com/xap/1.0/",
        "CreatorTool",
        XmpValue.String("MyApp"),
    )
    file.put_xmp(meta)

# Changes are written to disk when try_close() is called
file.try_close()

Methods:

  • __new__

    Create a new empty XMP file object

  • open

    Open a file from a path

  • open_with

    Open a file from a path with options

  • from_bytes

    Open a file from bytes represented by data

  • from_bytes_with

    Open a file from bytes with options

  • get_xmp

    Get the XMP metadata

  • put_xmp

    Put XMP metadata represented by meta

  • write_to_bytes

    Write XMP metadata to bytes

  • save

    Write XMP metadata to a file path

  • close

    Explicitly closes an opened file.

  • try_close

    Explicitly closes an opened file with error handling.

  • scan_for_xmp_packet

    Scan file content for XMP packet (packet scanning mode)

__new__

__new__() -> XmpFile

Create a new empty XMP file object

Use open* or from_*() methods to load metadata from a file.

open

open(path: str) -> None

Open a file from a path

Example::

from xmpkit import XmpFile

file = XmpFile()
file.open("image.jpg")

open_with

open_with(path: str, options: XmpOptions) -> None

Open a file from a path with options

Parameters:

  • path (str) –

    The path to the file with the metadata

  • options (XmpOptions) –

    The XMP options to open the file with

Example::

from xmpkit import XmpFile, XmpOptions

file = XmpFile()
file.open_with("image.jpg", XmpOptions().for_update())

from_bytes

from_bytes(data: bytes) -> None

Open a file from bytes represented by data

Example::

from xmpkit import XmpFile

jpeg_data: bytes = ...  # your JPEG file data

file = XmpFile()
file.from_bytes(jpeg_data)

from_bytes_with

from_bytes_with(data: bytes, options: XmpOptions) -> None

Open a file from bytes with options

This method allows you to specify opening options, such as forcing packet scanning or requiring a smart handler.

Parameters:

  • data (bytes) –

    The bytes representing the file to open

  • option

    The XMP options to open the file with

Example::

from xmpkit import XmpFile, XmpOptions

data: bytes = ...  # your file data

file = XmpFile()
file.from_bytes_with(data, XmpOptions().with_use_packet_scanning())

get_xmp

get_xmp() -> XmpMeta | None

Get the XMP metadata

Returns:

  • XmpMeta | None

    The metadata object if loaded or found, None otherwise.

put_xmp

put_xmp(meta: XmpMeta) -> None

Put XMP metadata represented by meta

Replaces any existing metadata.

Update Behavior

  • If the file was opened with XmpOptions.with_for_update, changes are not written to disk immediately. Call close or try_close to write changes to disk.
  • If the file was opened read-only, this only updates the in-memory metadata.

Example::

from xmpkit import XmpFile, XmpOptions, XmpMeta, XmpValue

file = XmpFile()
file.open_with("image.jpg", XmpOptions().with_for_update())

meta = file.get_xmp() or XmpMeta();
meta.set_property(
    "http://ns.adobe.com/xap/1.0/",
    "CreatorTool",
    XmpValue.String("MyApp"),
)

file.put_xmp(meta)
# Write changes to disk
file.try_close()

write_to_bytes

write_to_bytes() -> bytes

Write XMP metadata to bytes

Example::

from xmpkit import XmpFile

input_data: bytes = ...  # your JPEG file data

file = XmpFile()
file.from_bytes(input_data)
# ... modify metadata ...
output_data = file.write_to_bytes()

save

save(path: str) -> None

Write XMP metadata to a file path

Example::

from xmpkit import XmpFile, XmpMeta

file = XmpFile()
file.open("image.jpg")
# ... modify metadata ...
file.save("output.jpg")

close

close() -> None

Explicitly closes an opened file.

Performs any necessary output to the file and closes it. Files that are opened for update are written to only when closing. If the file is opened for read-only access (using [XmpOptions.with_for_read()][xmpkit.XmpOptions.with_for_read()]), the disk file is closed immediately after reading the data from it; the XmpFile object, however, remains in the open state. You must call close when finished using it.

Errors

This method ignores errors for backward compatibility. If you want to handle errors, use try_close instead.

Example::

use xmpkit::{XmpFile, XmpOptions};
# fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut file = XmpFile::new();
file.open_with("image.jpg", XmpOptions::default().for_update())?;
// ... modify metadata ...
file.close(); // Ignores errors

try_close

try_close() -> None

Explicitly closes an opened file with error handling.

Performs any necessary output to the file and closes it. Files that are opened for update are written to only when closing. If the file is opened for read-only access (using XmpOptions.with_for_read), the disk file is closed immediately after reading the data from it; the XmpFile object, however, remains in the open state. You must call try_close when finished using it.

Raises:

  • XmpError

    If writing the file fails.

Example::

from xmpkit import XmpFile, XmpOptions

file = XmpFile()
file.open_with("image.jpg", XmpOptions().with_for_update())
# ... modify metadata ...
file.try_close()  # Raises error if write fails

scan_for_xmp_packet staticmethod

scan_for_xmp_packet(file_data: bytes) -> XmpMeta | None

Scan file content for XMP packet (packet scanning mode)

This method searches for XMP packets in file content by looking for the <?xpacket marker. Used when packet scanning is requested.

Parameters:

  • file_data (bytes) –

    The file bytes to scan

xmpkit.XmpOptions

Options for XMP file operations.

Use the builder pattern to configure options. These options control how file handlers read and process XMP metadata.

Example::

from xmpkit import XmpFile, XmpOptions

file = XmpFile()
# Open for update with strict mode
file.open_with("photo.jpg", XmpOptions().with_for_update().with_strict())
# ... modify metadata ...
file.try_close()

Methods:

Attributes:

for_update property writable

for_update: bool

Open for reading and writing (default: read-only)

force_given_handler property writable

force_given_handler: bool

Force use of the given handler (format)

limited_scanning property writable

limited_scanning: bool

Only packet scan files "known" to need scanning

only_xmp property writable

only_xmp: bool

Only the XMP is wanted, skip reconciliation with native metadata

strict property writable

strict: bool

Be strict about only attempting to use the designated file handler

use_packet_scanning property writable

use_packet_scanning: bool

Force packet scanning (do not use smart handler)

use_smart_handler property writable

use_smart_handler: bool

Require the use of a smart handler

__new__

__new__(for_update: bool = False, only_xmp: bool = False, force_given_handler: bool = False, strict: bool = False, use_smart_handler: bool = False, use_packet_scanning: bool = False, limited_scanning: bool = False) -> XmpOptions

Create a new XMP options object from the provided values

with_for_read

with_for_read() -> XmpOptions

Open for read-only access (default).

with_for_update

with_for_update() -> XmpOptions

Open for reading and writing.

Files opened for update are written to only when closing.

with_force_given_handler

with_force_given_handler() -> XmpOptions

Force use of the given handler (format).

Do not even verify the format.

with_limited_scanning

with_limited_scanning() -> XmpOptions

Only packet scan files "known" to need scanning.

with_only_xmp

with_only_xmp() -> XmpOptions

Only the XMP is wanted.

This allows space/time optimizations by skipping reconciliation with native metadata formats (e.g., QuickTime metadata in MPEG4).

with_strict

with_strict() -> XmpOptions

Be strict about only attempting to use the designated file handler.

Do not fall back to other handlers.

with_use_packet_scanning

with_use_packet_scanning() -> XmpOptions

Force packet scanning.

Do not use a smart handler.

with_use_smart_handler

with_use_smart_handler() -> XmpOptions

Require the use of a smart handler.

Do not fall back to packet scanning.

Namespaces

xmpkit.get_all_registered_namespaces builtin

get_all_registered_namespaces() -> list[tuple[str, str]]

Get all registered namespaces from global registry

Returns a list of (uri, prefix) tuples for all registered namespaces.

xmpkit.get_builtin_namespace_uris builtin

get_builtin_namespace_uris() -> list[str]

Get all built-in namespace URIs

Returns a list of built-in namespace URIs.

xmpkit.get_global_namespace_prefix builtin

get_global_namespace_prefix(uri: str) -> str | None

Get the prefix for a namespace uri from global registry

xmpkit.get_global_namespace_uri builtin

get_global_namespace_uri(prefix: str) -> str | None

Get the URI for a namespace prefix from global registry

xmpkit.is_namespace_registered builtin

is_namespace_registered(uri: str) -> bool

Check if a namespace uri is registered globally

xmpkit.register_namespace builtin

register_namespace(uri: str, prefix: str) -> None

Register a namespace URI with a prefix

This is a convenience function that uses a global namespace map. For per-instance namespace management, use NamespaceMap directly.

This function registers namespaces globally (per thread) for convenience.

xmpkit.NamespaceMap

Methods:

  • __new__

    Create a new namespace map with built-in namespaces registered

  • get_all_namespaces

    Get all registered namespaces as a list of (uri, prefix) tuples

  • get_prefix

    Get the prefix for a namespace uri

  • get_uri

    Get the URI for a namespace prefix

  • has_prefix

    Check if a namespace prefix is registered

  • has_uri

    Check if a namespace uri is registered

  • register

    Register a namespace URI with a prefix

__new__

__new__() -> NamespaceMap

Create a new namespace map with built-in namespaces registered

get_all_namespaces

get_all_namespaces() -> list[tuple[str, str]]

Get all registered namespaces as a list of (uri, prefix) tuples

get_prefix

get_prefix(uri: str) -> str | None

Get the prefix for a namespace uri

get_uri

get_uri(prefix: str) -> str | None

Get the URI for a namespace prefix

has_prefix

has_prefix(prefix: str) -> bool

Check if a namespace prefix is registered

has_uri

has_uri(uri: str) -> bool

Check if a namespace uri is registered

register

register(uri: str, prefix: str) -> None

Register a namespace URI with a prefix

Parameters:

  • uri (str) –

    The namespace URI

  • prefix (str) –

    The namespace prefix

Raises:

  • XmpError

    If the prefix is already registered to a different URI

xmpkit.ns

Built-in XMP namespaces

Attributes:

XMP module-attribute

XMP: Final[str] = 'http://ns.adobe.com/xap/1.0/'

XMP Basic namespace

DC module-attribute

DC: Final[str] = 'http://purl.org/dc/elements/1.1/'

Dublin Core namespace

EXIF module-attribute

EXIF: Final[str] = 'http://ns.adobe.com/exif/1.0/'

EXIF namespace

EXIF_AUX module-attribute

EXIF_AUX: Final[str] = 'http://ns.adobe.com/exif/1.0/aux/'

EXIF Aux namespace

EXIF_EX module-attribute

EXIF_EX: Final[str] = 'http://cipa.jp/exif/1.0/'

EXIF 2.32 Extension namespace

IPTC_CORE module-attribute

IPTC_CORE: Final[str] = 'http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/'

IPTC Core namespace

IPTC_EXT module-attribute

IPTC_EXT: Final[str] = 'http://iptc.org/std/Iptc4xmpExt/2008-02-29/'

IPTC Extension namespace

PHOTOSHOP module-attribute

PHOTOSHOP: Final[str] = 'http://ns.adobe.com/photoshop/1.0/'

Photoshop namespace

CAMERA_RAW module-attribute

CAMERA_RAW: Final[str] = 'http://ns.adobe.com/camera-raw-settings/1.0/'

Camera Raw namespace

XMP_RIGHTS module-attribute

XMP_RIGHTS: Final[str] = 'http://ns.adobe.com/xap/1.0/rights/'

XMP Rights namespace

XMP_MM module-attribute

XMP_MM: Final[str] = 'http://ns.adobe.com/xap/1.0/mm/'

XMP Media Management namespace

XMP_BJ module-attribute

XMP_BJ: Final[str] = 'http://ns.adobe.com/xap/1.0/bj/'

XMP Basic Job Ticket namespace

TIFF module-attribute

TIFF: Final[str] = 'http://ns.adobe.com/tiff/1.0/'

TIFF namespace

PDF module-attribute

PDF: Final[str] = 'http://ns.adobe.com/pdf/1.3/'

PDF namespace

PDFX module-attribute

PDFX: Final[str] = 'http://ns.adobe.com/pdfx/1.3/'

PDF/X namespace

PDFA module-attribute

PDFA: Final[str] = 'http://www.aiim.org/pdfa/ns/id/'

PDF/A namespace

XMP_DM module-attribute

XMP_DM: Final[str] = 'http://ns.adobe.com/xmp/1.0/DynamicMedia/'

XMP Dynamic Media namespace

XMP_PAGED module-attribute

XMP_PAGED: Final[str] = 'http://ns.adobe.com/xap/1.0/t/pg/'

XMP PagedText namespace

XMP_GRAPHICS module-attribute

XMP_GRAPHICS: Final[str] = 'http://ns.adobe.com/xap/1.0/g/'

XMP Graphics namespace

XMP_IMAGE module-attribute

XMP_IMAGE: Final[str] = 'http://ns.adobe.com/xap/1.0/g/img/'

XMP Image namespace

RDF module-attribute

RDF: Final[str] = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'

RDF namespace

XML module-attribute

XML: Final[str] = 'http://www.w3.org/XML/1998/namespace'

XML namespace (for xml:lang, etc.)

XMP_PREFIX module-attribute

XMP_PREFIX: Final[str] = 'xmp'

XMP namespace prefix

DC_PREFIX module-attribute

DC_PREFIX: Final[str] = 'dc'

Dublin Core prefix

EXIF_PREFIX module-attribute

EXIF_PREFIX: Final[str] = 'exif'

EXIF prefix

RDF_PREFIX module-attribute

RDF_PREFIX: Final[str] = 'rdf'

RDF prefix

XML_PREFIX module-attribute

XML_PREFIX: Final[str] = 'xml'

XML prefix

EXIF_AUX_PREFIX module-attribute

EXIF_AUX_PREFIX: Final[str] = 'aux'

EXIF Aux prefix

EXIF_EX_PREFIX module-attribute

EXIF_EX_PREFIX: Final[str] = 'exifEX'

EXIF 2.32 Extension prefix

IPTC_CORE_PREFIX module-attribute

IPTC_CORE_PREFIX: Final[str] = 'Iptc4xmpCore'

IPTC Core prefix

IPTC_EXT_PREFIX module-attribute

IPTC_EXT_PREFIX: Final[str] = 'Iptc4xmpExt'

IPTC Extension prefix

PHOTOSHOP_PREFIX module-attribute

PHOTOSHOP_PREFIX: Final[str] = 'photoshop'

Photoshop prefix

CAMERA_RAW_PREFIX module-attribute

CAMERA_RAW_PREFIX: Final[str] = 'crs'

Camera Raw prefix

XMP_RIGHTS_PREFIX module-attribute

XMP_RIGHTS_PREFIX: Final[str] = 'xmpRights'

XMP Rights prefix

XMP_MM_PREFIX module-attribute

XMP_MM_PREFIX: Final[str] = 'xmpMM'

XMP Media Management prefix

XMP_BJ_PREFIX module-attribute

XMP_BJ_PREFIX: Final[str] = 'xmpBJ'

XMP Basic Job Ticket prefix

TIFF_PREFIX module-attribute

TIFF_PREFIX: Final[str] = 'tiff'

TIFF prefix

PDF_PREFIX module-attribute

PDF_PREFIX: Final[str] = 'pdf'

PDF prefix

PDFX_PREFIX module-attribute

PDFX_PREFIX: Final[str] = 'pdfx'

PDF/X prefix

PDFA_PREFIX module-attribute

PDFA_PREFIX: Final[str] = 'pdfaid'

PDF/A prefix

XMP_DM_PREFIX module-attribute

XMP_DM_PREFIX: Final[str] = 'xmpDM'

XMP Dynamic Media prefix

XMP_PAGED_PREFIX module-attribute

XMP_PAGED_PREFIX: Final[str] = 'xmpTPg'

XMP PagedText prefix

XMP_GRAPHICS_PREFIX module-attribute

XMP_GRAPHICS_PREFIX: Final[str] = 'xmpG'

XMP Graphics prefix

XMP_IMAGE_PREFIX module-attribute

XMP_IMAGE_PREFIX: Final[str] = 'xmpGImg'

XMP Image prefix