Aus Linux-Magazin 05/2016

XMP-Metadaten mit Python bearbeiten

© phaitoon, 123RF

Mit dem XMP-Standard von Adobe lassen sich beliebige Metadaten in digitalen Objekten verstauen, wobei XMP eine Vielzahl von Dateiformaten unterstützt. Mit Hilfe des Python-XMP-Toolkit entwickeln Programmierer Anwendungen, die Metadaten in Dateien meißeln oder aus diesen auslesen.

Metadaten stecken als Informationen in Objekten wie Grafikdateien, digitalen Videos oder Dokumenten und transportieren Informationen über die Inhalte dieser Dateien. Das können der Name des Fotografen oder des Autors sein, der Titel der Arbeit oder die Angaben über die Lizenz, unter der jemand das Werk veröffentlicht hat. In den großen Bereich der Metadaten gehören aber auch Schlagwortkataloge, Vorschaubilder oder Koordinaten von Bildbereichen, in denen sich Gesichter oder andere Dinge befinden.

Für den geregelten Austausch von Datensätzen über digitale Objekte gibt es mittlerweile eine Reihe von Standards. Als Technik herrscht vor, diese in den Dateien selbst aufzubewahren und mit ihnen zu kopieren. Ein in der Digitalfotografie weit verbreiteter technischer Standard für Metadaten ist das Exchangeable Image File Format (Exif, [1]) für Bilder in den Formaten Jpeg, JFIF und Tiff.

Digitalkameras und Smartphones schreiben mit Exif gewöhnlich eine ganze Reihe technischer Informationen zur Aufnahme in die Bilddateien, zum Beispiel Datum und Uhrzeit, Kameramodell, Brennweite und Belichtungszeit. Der Standard umfasst sogar Vorschaubilder und GPS-Koordinaten.

XMP

Den Metadaten-Standard XMP (Extensible Metadata Platform) hat Adobe Systems 2001 vorgestellt. Die aktuell gültige Fassung ist zwischen 2012 und 2014 als dreiteilige Spezifikation erschienen [2], wobei der Kernbestandteil gleichzeitig der ISO-Standard 16684-1 ist [3]. Es handelt sich bei XMP um ein umfangreiches System zur Beschreibung von Metadaten für digitale Medien, das aus einem Datenmodell, einem Serialisierungs- beziehungsweise Implementierungsmodell sowie Vorschriften für die Einbettung der Metadaten in unterschiedliche Dateiformate besteht.

Das Datenmodell von XMP definiert zunächst, dass Metadaten in Dateien alle im selben “Paket” stehen sollen. Die darin enthaltenen Daten kommen in drei Varianten vor. Einfache Datenfelder ordnen einem Element jeweils einen einzelnen Inhalt zu (zum Beispiel das Entstehungsdatum). Strukturierte Felder verknüpfen ein Element mit mehreren Inhalten (etwa beim Seitenmaß von Dokumenten). Daten kommen zudem in Listen vor, von denen es verschiedene Untertypen gibt: sequenzielle und geordnete Listen, ungeordnete (etwa Schlagwörter) und alternative Listen (wie für den Titel in verschiedenen Sprachen).

Eingebettet

XMP-kompatible Software bettet die Pakete direkt in die beschriebenen Objekte ein. Sie unterstützt dabei eine große Bandbreite von Dateiformaten. XMP-Pakete lassen sich in Bilddateien (Jpeg, PNG, Tiff), Multimediaformate (AVI, Mpeg, MOV, MP3) und digitale Dokumente (PDF, PS) schreiben sowie in viele weitere Formate. Dabei legt die Software die Metadaten so an, dass auch andere Programme, die mit den Paketen nichts anfangen können, die Inhalte der Dateien problemlos weiterverarbeiten.

In Tiff-Bildern verwendet XMP zum Beispiel einen Block im Image File Directory (IFD) mit der Tag-Nummer »0x02BC« , in PDF-Dateien stecken die Daten formatiert als Metadata-Objekt vom Subtyp »XML« . Bei nicht berücksichtigten Formaten wie beispielsweise DJVU legt die XMP-Software Pakete auch in Form zusätzlicher Dateien (englisch: sidecar) mit der Datei-Endung ».xmp« ab.

Der Umfang eines XMP-Pakets innerhalb einer Datei lässt sich flexibel gestalten. Das entscheidende Merkmal von XMP – der Name drückt das bereits aus – liegt aber in seiner Erweiterbarkeit. Die XMP-Spezifikation beschreibt viele Datenfelder für verschiedene Zwecke, der Benutzer reichert seine Metadaten aber auch mit eigenen Elementen an, was praktisch unbegrenzte Möglichkeiten eröffnet. Damit lässt sich XMP auch für beliebige Anwendungsfälle ausbauen. Zum Beispiel legt es intern verwendete Kenndaten von gescannten Rechnungen und Briefen in papierlosen Büros nach einem eigenen Schema in PDF-Dateien ab.

Metadaten nach dem Exif- und anderen Standards und XMP-Pakete dürfen nebeneinander in derselben Grafikdatei auftauchen. Exif-Tags lassen sich zudem in XMP beschreiben. Das ermöglicht es, Exif-Daten in Dateiformaten unterzubringen, die Exif von Haus aus nicht unterstützt (wie PNG und Gif).

Schreiben mehrere Instanzen Metadaten in ein und dieselbe Datei, kommt es in der Praxis jedoch nicht selten zu einem Durcheinander. Das erschwert ein geregeltes Auslesen von Informationen deutlich. Wer die einzelnen Metadatenstandards in Bilddateien einheitlich verwenden möchte, folgt aus diesem Grund am besten den dafür vorgesehenen Richtlinien der Metadata Working Group [4], einem Konsortium namhafter Hard- und Softwarehersteller.

RDF/XML

Programmiert sind XMP-Pakete in W3C RDF/XML [5], einer XML-Syntax für die Serialisierung von RDF-Graphen. Den Praktiker dürften dabei vor allem zwei Punkte beschäftigen: Erstens benötigt er für den Umgang mit XMP zumindest grundlegende XML-Kenntnisse. Zweitens zerlegt die Syntax die Elemente zur Aufnahme von einzelnen Daten wie etwa »Titel« und »Entstehungsdatum« stets in Gruppen beziehungsweise Klassen, sortiert nach bestimmten XML-Namensräumen.

Zu den Kernbestandteilen von XMP gehören die von der Dublin Core Metadata Initiative definierten Elemente. Dublin Core [6] ist ein rudimentäres Schema, das aus 15 Kernelementen besteht, die zum Namensraum »dc« gehören und Objekte verschiedener Art wie Fotos, Videos und Bücher einheitlich beschreibt. Deshalb finden sich in XMP-Paketen beliebiger Dateiformate meist Elemente wie »dc:title« , »dc:creator« , »dc:description« et cetera. Als weiterer Kernbestandteil von XMP fungieren die Beschreibungselemente im Namensraum »xmp« wie zum Beispiel »xmp:CreateDate« und »xmp:CreatorTool« .

Das XML-Element »xmlns« legt Namensräume an und verknüpft sie in der Regel mit einem eindeutigen Bezeichner (URI), meist einer HTTP-Adresse. Wer XML kennt, der weiß, dass solche HTTP-Adressen nur der Registrierung dienen. Dahinter verbergen sich keine realen Webseiten im Internet. Namensraum-Identifikatoren legen die Macher beim Veröffentlichen ihrer Schemata fest. Der »dc« -Namensraum gehört etwa fest zum URI »http://purl.org/dc/elements/1.1/« , der »xmp« -Namensraum zum URI »http://ns.adobe.com/xap/1.0/« .

Leselampe

Benutzer lesen den Inhalt eines XMP-Pakets ganz einfach mit dem Kommandozeilen-Werkzeug »exempi« und der Option »-x« aus. Es gehört zur gleichnamigen Bibliothek, die unter Debian im Paket »exempi« , unter Open Suse in »exempi-tools« steckt. Ein typisches XMP-Paket zeigt Listing 1.

Listing 1

XMP-Paket aus einer PDF-Datei (gekürzt)

01 <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Exempi + XMP Core 5.1.2">
02  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
03   <rdf:Description rdf:about=""
04     xmlns:dc="http://purl.org/dc/elements/1.1/">
05    <dc:format>application/pdf</dc:format>
06    <dc:title>
07     <rdf:Alt>
08      <rdf:li xml:lang="x-default">XMP Specification Part 1: Data Model, Serialization, and Core Properties</rdf:li>
09     </rdf:Alt>
10    </dc:title>
11    <dc:creator>
12     <rdf:Seq>
13      <rdf:li>Adobe Systems Incorporated</rdf:li>
14     </rdf:Seq>
15    </dc:creator>
16   </rdf:Description>
17   <rdf:Description rdf:about=""
18     xmlns:xmp="http://ns.adobe.com/xap/1.0/">
19    <xmp:CreateDate>2012-03-21T08:55:04Z</xmp:CreateDate>
20    <xmp:CreatorTool>FrameMaker 8.0</xmp:CreatorTool>
21    <xmp:ModifyDate>2012-03-21T08:57:17-07:00</xmp:ModifyDate>
22    <xmp:MetadataDate>2012-03-21T08:57:17-07:00</xmp:MetadataDate>
23   </rdf:Description>
24   <rdf:Description rdf:about=""
25     xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
26    <pdf:Producer>Acrobat Distiller 8.1.0 (Windows)</pdf:Producer>
27    <pdf:Copyright>Copyright 2012, Adobe Systems Incorporated. All rights reserved.</pdf:Copyright>
28   </rdf:Description>
29   <rdf:Description rdf:about=""
30     xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
31    <xmpMM:DocumentID>uuid:3806c052-1c0d-4599-b3ff-38c0441bbb3a</xmpMM:DocumentID>
32    <xmpMM:InstanceID>uuid:abc82103-c360-4b74-8812-ff4c81eceaea</xmpMM:InstanceID>
33   </rdf:Description>
34  </rdf:RDF>
35 </x:xmpmeta>

Das Wurzelelement »x:xmpmeta« klammert die Daten im XMP-Paket zunächst ein. Das Tag »rdf:RDF« legt daraufhin den Namensraum »rdf« mit dem URI »http://www.w3.org/1999/02/22-rdf-syntax-ns#« an. Die XMP-Elemente stehen stets in »rdf:Description« -Blöcken. Für diese erweist sich das RDF-Element »rdf:about« zwar als obligatorisch, bleibt aber in XMP immer leer. Es gibt verschiedene Stile, um XMP-Daten zu schreiben. Üblich ist, die Elemente einer Beschreibungsklasse in einer »Description« -Umgebung zu sammeln und für diese jeweils einen Namensraum anzulegen.

Im XMP-Paket kommen die drei Dublin-Core-Elemente »dc:format« , »dc:title« und »dc:creator« vor. Der Titel des Dokuments steht in einer alternativen Liste (»rdf:Alt« ) für mehrere Sprachfassungen (»xml:lang« ), der Herausgeber in einer sequenziellen Liste (»rdf:Seq« ).

In einer weiteren »Description« -Umgebung befinden sich XMP-Kernelemente wie »xmp:CreateDate« und »xmp:ModifyDate« , die Datumstempel tragen. Hier steht auch, dass Framemaker 8.0 dieses Dokument fabriziert hat (»xmp:CreatorTool« , Zeile 20). In weiteren Blöcken folgen spezielle Beschreibungselemente für PDF-Dokumente (»xmlns:pdf« ) und Datenfelder für das Medienmanagement (»xmlns:xmpMM« ). Einen Überblick über einige XMP-Elemente und Klassen liefert Tabelle 1.

Tabelle 1

XMP-Elemente und Namensräume (Auswahl)

Beschreibungselement

Inhalt

Format

Dublin Core (»http://purl.org/dc/elements/1.1/« )

»dc:title«

Titel des Dokuments oder Werks

alternative Liste mit »xml:lang«

»dc:creator«

Herstellende Person oder Organisation

geordnete Liste

»dc:publisher«

Name der veröffentlichenden Instanz

ungeordnete Liste

»dc:subject«

Sammlung von Schlüsselwörtern

ungeordnete Liste

»dc:language«

Sprache(n) des Werks

ungeordnete Liste mit RFC-3066-Kürzeln

»dc:format«

Dateiformat des Objekts

Mime-Typ

»dc:identifier«

ISBN/ISSN, URN, DOI und weitere

Text

XMP-Kernelemente (»http://ns.adobe.com/xap/1.0/« )

»xmp:CreateDate«

Herstellungsdatum des Objekts

Datumsstempel

»xmp:CreatorTool«

Herstellungswerkzeug

Text

»xmp:MetadataDate«

Änderungsdatum der Metadaten

Datumsstempel

»xmp:ModifyDate«

Änderungsdatum des Objekts

Datumsstempel

»xmp:Rating«

Bewertung des Werks

Werte von -1 bis 5

XMP-Rechtemanagement (»http://ns.adobe.com/xap/1.0/rights/« )

»xmpRights:Marked«

Urheberrechte-Markierung

true/false

»xmpRights:Owner«

Rechte-Inhaber

ungeordnete Liste

»xmpRights:UsageTerms«

Lizenz/Nutzungsbedingungen

alternative Liste mit »xml:lang«

XMP-Medienmanagement (»http://ns.adobe.com/xap/1.0/mm/« )

»xmpMM:DocumentID«

Identifikator des Objekts

GUID-Stempel

»xmpMM:InstanceID«

Identifikator einer Objektinstanz

GUID-Stempel

Python-XMP-Toolkit

Mit Hilfe einiger Python-Bibliotheken lassen sich XMP-Anwendungen ohne großen Aufwand programmieren (siehe Kasten “XMP und Exif mit Python”). Das Python-XMP-Toolkit [7] wurde unter anderem von der Europäischen Weltraumorganisation (ESA) für Bilder des Hubble-Teleskops (Abbildung 1) entwickelt. Aktuell ist Version 2.0.1.

XMP und Exif mit Python

Neben dem XMP-Toolkit gibt es für Python freie Bibliotheken für die Programmierung von Exif-Anwendungen, die auch XMP-Metadaten handhaben (allerdings unterstützen die Exif-Bibliotheken nicht dieselben Dateiformate). Keines dieser Werkzeuge ist in reinem Python implementiert, sondern es handelt sich insgesamt um Anbindungen an vorhandene C- oder C++-Bibliotheken.

Das XMP-Toolkit ist unter der Haube ein mit Ctypes geschriebener Wrapper um Exempi [12], einem Ableger des offiziellen XMP Software Development Kit von Abobe (aktuell ist Version 2.22, die auf Adobe XMP SDK 4.1.1 basiert).

Pyexiv2 [13] ist eine mit Boost.Python umgesetzte Anbindung an die C++-Bibliothek Exiv2 [14], mit der Entwickler Anwendungen für Exif, IPTC und XMP-Metadaten programmieren (aktuell ist Version 0.25). Da niemand mehr Pyexiv2 weiterentwickelt, empfiehlt sich der Umstieg auf Gexiv2.

Gexiv2 [15] dient als Wrapper um die Exiv2-Bibliothek für die G-Object-Programmierumgebung (aktuell ist Version 0.10.3). Die Software unterstützt G-Objekt-Introspektion, wodurch Python-Programmierer mit Py-G-Object [16] darauf zugreifen. Dafür brauchen sie zum Beispiel auf einem Debian-System die Pakete »gir1.2-gevix2« , »python-gi« oder »python3-gi« . Die Bibliothek importieren sie dann über den Befehl »from gi.repository import GExiv2« .

Abbildung 1: Das Python-XMP-Toolkit half beim Einordnen der zahlreichen Bilder des Hubble-Teleskop.

Abbildung 1: Das Python-XMP-Toolkit half beim Einordnen der zahlreichen Bilder des Hubble-Teleskop.

Wer das Linux-Paket des XMP-Toolkits installiert, holt sich auch die notwendige Exempi-Bibliothek auf den Rechner. Bislang steht das Toolkit nur in wenigen Distributionen bereit, etwa in Debian und seinen Ablegern, wo es in den Paketen »python-libxmp« und »python3-libxmp« steckt. Alternativ installiert es der Nutzer aus dem Python Packet Index [8]. Die offizielle Dokumentation lässt zu wünschen übrig [9], Debianer greifen am besten auf das Dokumentationspaket »python-libxmp-doc« [10] zurück. Alternativ sucht der Programmierer die Dokumentation aus dem Github-Repo zusammen oder durchforstet direkt die Docstrings im Quellcode.

Im Python-XMP-Toolkit regelt die Klasse »libxmp.files.XMPFiles« den Umgang mit Dateien, und die Klasse »libxmp.core.XMPMeta« bietet eine Reihe von Methoden (Funktionen) an, um XMP-Pakete im Speicher zu manipulieren. Für den Umgang mit XMP definiert das Toolkit ein eigenes komplexes Datenobjekt, mit dem die üblichen XML-Werkzeuge von Python nicht zurecht kommen (was auch nicht nötig ist). Das Beispiel in Listing 2 demonstriert einige einfache Operationen mit dem Toolkit.

Listing 2

Anwendung mit dem Python-XMP-Toolkit (I-Python-Session)

01 In [1]: from libxmp import XMPFiles, XMPMeta, consts
02
03 In [2]: xmpfile = XMPFiles(file_path='XMPSpecificationPart1.pdf', openforupdate=True)
04
05 In [3]: myxmp = xmpfile.get_xmp()
06
07 In [4]: print myxmp.get_localized_text(consts.XMP_NS_DC, 'title', '', 'x-default')
08         XMP Specification Part 1: Data Model, Serialization, and Core Properties
09
10 In [5]: myxmp.set_property(consts.XMP_NS_DC, 'title[1]/?xml:lang', 'en')
11
12 In [6]: myxmp.set_localized_text(consts.XMP_NS_DC, 'title', '', 'de', 'XMP-Spezifikation, Teil 1')
13
14 In [7]: print myxmp.get_property(consts.XMP_NS_XMP, 'MetadataDate')
15         2012-03-21T08:57:17-07:00
16
17 In [8]: import datetime
18         jetzt = datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S+01:00")
19
20 In [9]: myxmp.set_property(consts.XMP_NS_XMP, 'MetadataDate', jetzt)
21
22 In [10]: print myxmp.get_property(consts.XMP_NS_XMP, 'MetadataDate')
23          2016-02-21T19:33:26+01:00
24
25 In [11]: xmpfile.can_put_xmp(myxmp)
26          True

Aktionsmodus

Zunächst importiert das Listing-Skript die beiden Hauptklassen, öffnet die gewünschte Datei und lädt über »get_xmp()« das XMP-Paket in das Speicherobjekt »myxmp« . Enthält die aufgerufene Datei noch kein XMP-Paket, legt das Toolkit ein leere Schablone mit »x:xmpmeta« und dem RDF-Grundgerüst im Speicher an. Das Modul »consts« bietet eine Reihe von Stellvertretern für die übliche Namensräume, so repräsentiert etwa »consts.XMP_NS_DC« den Dublin-Core-URI und »consts.XMP_NS_XMP« denjenigen für die XMP-Kernelemente.

Die Methode »get_localized_text()« wirft bestimmte, mit »xml:lang« lokalisierte Datensätze in alternativen Listen aus, im Beispiel aus »dc:title« denjenigen mit »x-default« . Mit »set_property()« lässt sich das XMP-Objekt gezielt manipulieren, im Beispiel stellt es die Spracheinstellung von »x-default« auf »en« um. Die Methode »set_localized_text()« verändert lokalisierte Daten in alternativen Listen und erweitert in »dc:title« einen kurzen deutschen Titel mit der Lokalisierung »xml:lang=de« .

Danach fragt »get_property()« im Skript zunächst wieder den Datensatz des Elements »xmp:MetadataDate« ab. Es handelt sich um einen Datumsstempel im Format ISO 8601. Mit der Python-Bibliothek Datetime [11] erzeugt der Entwickler einen neuen Datumsstempel (»jetzt« ) und überschreibt mit »set_property()« das Element »xmp:MetadataDate« im XMP-Paket. Alternativ gibt es für den Umgang mit Datumsstempeln die Methode »set_property_datetime()« . Die Methode »can_put_xmp()« prüft, ob die geöffnete Datei schreibgeschützt ist. Ist das nicht der Fall, schreibt »put_xmp()« in die Datei und »close_file()« schließt sie.

Creative Commons

Die gemeinnützige Organisation Creative Commons vertreibt eine Reihe von einfach einsetzbaren freien Lizenzen für digitale Werke [17], die Künstler und Autoren weltweit zum Schutz ihrer Urheberrechte einsetzen. Creative Commons empfiehlt XMP als Metadaten-Format. Zugleich liefert die Organisation Richtlinien dazu, wie Künstler die Informationen über die von ihnen verwendete Lizenz am besten einsetzen [18] und in ihre veröffentlichten Dateien einbetten. Dadurch entsteht eine Win-win-Situation: Die Lizenz stärkt die Position der Urheber, die Nutzer ermitteln die Lizenzbedingungen unkompliziert und zuverlässig aus den Objekten selbst.

Die Creative-Commons-Organisation hat für XMP und auch für andere Zwecke den XML-Namensraum »http://creativecommons.org/ns#« definiert, der die vier Elemente »cc:license« , »cc:morePermissions« , »cc:attributionURL« sowie »cc:attributionName« beinhaltet. Das XMP-Toolkit stellt diesen Namensraum unter der Konstanten »consts.XMP_NS_CC« bereit.

Darüber hinaus empfiehlt die Organisation den Einsatz der beiden Elemente »xmpRights:Marked« und »xmpRights:UsageTerms« aus dem XMP-Rechtemanagement (Tabelle 1). Eine Kopie des Lizenzhinweises sollte – den Empfehlungen folgend – zudem in »dc:rights« landen.

Listing 3 zeigt ein Python-Skript, das mit dem XMP-Toolkit die von Creative Commons empfohlenen Metadaten über die Attribution-Sharealike-4.0-Lizenz (BY-SA 4.0) in eine JPG-Datei schreibt, die bis hier noch kein XMP-Paket enthält. Das Ergebnis dieser Anstrengungen führt Listing 4 auf.

Listing 3

Konforme Creative-Commons-Metadaten anlegen

01 from libxmp import XMPFiles, XMPMeta, consts
02 image = XMPFiles(file_path='1001.jpg', open_forupdate=True)
03 xmp = image.get_xmp()
04
05 xmp.register_namespace(consts.XMP_NS_CC, 'cc')
06 xmp.set_property(consts.XMP_NS_CC, 'license', 'http://creativecommons.org/licenses/by-sa/4.0/')
07 xmp.set_property(consts.XMP_NS_CC, 'attributionName', 'Max Mustermann')
08 xmp.set_property(consts.XMP_NS_CC, 'attributionURL', 'http://example.com/bilder/1001.jpg')
09
10 xmp.register_namespace(consts.XMP_NS_XMP_Rights, 'xmpRights')
11 xmp.set_property_bool(consts.XMP_NS_XMP_Rights, 'Marked', True)
12 usage = 'This work is licensed to the public under the Creative Commons Attribution-ShareAlike \
13 4.0 International License'
14 xmp.set_property(consts.XMP_NS_XMP_Rights, 'UsageTerms', usage)
15
16 xmp.register_namespace(consts.XMP_NS_DC, 'dc')
17 xmp.set_localized_text(consts.XMP_NS_DC, 'rights', '', 'x-default', usage)
18
19 image.put_xmp(xmp)
20 image.close_file()

Listing 4

Das erzeugte XMP-Paket

01 <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Exempi + XMP Core 5.1.2">
02  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
03   <rdf:Description rdf:about="" xmlns:cc="http://creativecommons.org/ns#">
04    <cc:license>http://creativecommons.org/licenses/by-sa/4.0/</cc:license>
05    <cc:attributionName>Max Mustermann</cc:attributionName>
06    <cc:attributionURL>http://example.com/bilder/1001.jpg</cc:attributionURL>
07   </rdf:Description>
08   <rdf:Description rdf:about="" xmlns:xmpRights="http://ns.adobe.com/xap/1.0/rights/">
09    <xmpRights:Marked>True</xmpRights:Marked>
10    <xmpRights:UsageTerms>This work is licensed to the public under the Creative Commons
11 Attribution-ShareAlike 4.0 International License</xmpRights:UsageTerms>
12   </rdf:Description>
13   <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
14    <dc:rights>
15     <rdf:Alt>
16      <rdf:li xml:lang="x-default">This work is licensed to the public under the Creative Commons
17 Attribution-ShareAlike 4.0 International License</rdf:li>
18     </rdf:Alt>
19    </dc:rights>
20   </rdf:Description>
21  </rdf:RDF>
22 </x:xmpmeta>

Das Textelement »xmpRights:WebStatement« transportiert eine aufrufbare URL, über die sich im Web Angaben bezüglich der Urheberschaft und Nutzungsbedingungen einer Datei verifizieren lassen. Die Macher der Creative Commons schlagen vor, unter der hier angegebenen Adresse einen Referenzierer einzustellen, der auch den Hashwert der veröffentlichten Datei enthält [19]. Die lässt sich in diesem Fall händisch oder automatisiert vergleichen, um bei Fälschungen Alarm zu schlagen.

Fazit

Bei XMP handelt es sich um ein ausgereiftes und professionelles Metadaten-System, das Schemata für verschiedene Objekte und Einsatzzwecke konfektioniert. Der umfangreiche Satz von Beschreibungskomponenten lässt sich sogar um Elemente erweitern, die die Spezifikation gar nicht vorsieht. XMP unterstützt eine große Bandbreite von Dateiformaten, um Metadaten-Pakete darin einzubetten, nur in Ausnahmefällen existiert keine Lösung. Gerade für PDF-Dokumente gibt es nichts Vergleichbares, was beim Urheber des Standards (Adobe) aber auch nicht verwundert.

Endbenutzer fragen XMP-Metadaten einfach über die Kommandozeile ab, und mit einer Reihe von C/C++-Bibliotheken entwickeln Programmierer spezielle XMP-Anwendungen. Für die vorhandenen XMP- und Exif-Bibliotheken, die auch XMP beherrschen, stehen Python-Anbindungen bereit.

Für das Bearbeiten von XMP-Daten auf der Kommandozeile eignen sich übrigens auch die Programme Exiftool (im Debian-Paket »libimage-exiftool-perl« oder bei Open Suse und anderen in »perl-image-exiftool« ) und das CLI-Tool der Exiv2-Bibliothek (im Debian-Paket »exiv2« ).

Der Autor

Daniel Stender http://www.danielstender.com beschäftigt sich seit einem geisteswissenschaftlichen Studium mit E-Documenting. Er ist Debian-Developer und betreut als Maintainer unter anderem das Python-XMP-Toolkit.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben