4.11. Validierung von TIFF Images mittels JHOVE

Dieses Plugin übergibt Daten zur Validierung an das JSTOR/Harvard Object Validation Environment (JHOVE) Framework. Mit diesem Framework kann überprüft werden, ob die vorliegenden Bilder vollständig sind, keine Bitstream Fehler enthalten und den zu verwendenden Parametern entsprechen.

Aufruf des Plugins

Der Aufruf des Downloads muss aus einem Workflowschritt folgendermaßen erfolgen:

/usr/bin/java -jar /opt/digiverso/itm/bin/TaskClient.jar 
    -itm http://localhost:8080/itm/service 
    -s {origpath} 
    -d ${meta.CatalogIDDigital} 
    -e 
    -i {stepid} 
    -T {processtitle} 
    -t TIFVALIDATION 
    -n tiff.template 
    -gid {processid}

Parameter

Die innerhalb dieses Aufrufs zu übergebenen Parameter haben folgende Bedeutungen:

Parameter

Mögliche Goobi Variable

Bedeutung

-itm

http://localhost/itm/service

URL zur Schnittstelle des intranda TaskManagers

-e, --returnError

-

Wenn angegeben, beendet sich der TaskClient mit einem Fehlercode, um das automatische Fortschreiten im Workflow zu unterbinden

-p

0 – 10

Priorität zur Verarbeitung dieses Jobs

-gid

{processid}

ID des Goobi-Vorgangs

-i

{stepid}

Die ID des Arbeitsschrittes, der den Aufruf startet

-T, --title

{processtitle}

Der Vorgangstitel in Goobi, für den der Aufruf gestartet wird

-t, --jobtype

TIFVALIDATION

Der Typ des Jobs

-n, --templatename

tiff.template

Name der zuvor erzeugten Konfigurationsdatei

-s, --source

{origpath}

Pfad zum master-Verzeichnis des Vorgangs

-d, --destination

{meta.CatalogIDDigital}

Identifier des Vorgangs

Arbeitsweise des Plugins

Für die Validierung prüft JHOVE als erstes, ob das übergebene Bild wohlgeformt und valide ist, also ob es den Spezifikationen des Formates entspricht.

Darüber hinaus kann das Plugin mittels XPath-Ausdrücken weitere Ergebnisse von JHOVE überprüfen und Bilder anhand dessen validieren. Dazu muss ein Template-Ordner in der Plugin-Konfigurationsdatei wie folgt angegeben werden:

<tifvalidationconfig>
    <templateFolder>
        /opt/digiverso/itm/templates/
    </templateFolder>
</tifvalidationconfig>

Der Pfad /opt/digiverso/itm/templates/ ist der Default-Wert und wird verwendet, wenn kein Ordner konfiguriert ist. Aus dem konfigurierten Template-Ordner liest das Plugin die dem Programmaufruf übergebene Template-Datei auf, um ein bestimmtes Validierungstemplate zu laden.

Konfiguration der Validierung

Mit einem Validierungstemplate können über XPath-Ausdrücke gezielt Werte in der JHOVE-xml Ausgabe überprüft werden. Diese XPath-Ausdrücke können Elemente, Attribute, Text oder auch Zahlen durch numerische Funktionen wie count() zurückgeben. Getestet wird dabei immer der Text-Inhalt eines Elementes oder Attributes oder der Wert des XPath-Ergebnisses als String. Entsprechend ist bei Zahlen darauf zu achten, dass diese als Dezimalzahl mit einer Nachkommastelle dargestellt werden. Auch müssen sie im <wanted>-Element des Templates entsprechend abgebildet sein.

Alle in den XPath-Ausdrücken verwendeten Namespaces müssen in derselben Template-Datei definiert werden. Außerdem besteht auch die Möglichkeit, die Fehlermeldung per template anzugeben. Der Fehlermeldungstext kann dabei drei Variablen enthalten, ${image}, ${wanted} und ${found}. Diese werden für die Ausgabe respektive durch den Bildpfad, den erwarteten Wert oder den gefundenen Wert ersetzt. In der Angabe des Textes ist dabei darauf zu achten, dass Kommata durch \, escaped werden.

Für komplexere Tests, die nicht auf diese Art und Weise durchgeführt werden können, gibt es innerhalb des Projekts ein Interface, das implementiert werden kann. Diese komplexeren Tests lassen sich im Template ein-oder abschalten. Nur im Falle, dass sie innerhalb des Templates mitsamt zugehöriger Fehlermeldung vorhanden sind, können sie auch verwendet werden.

Die bisher einzige Implementierung komplexer Tests ist der ImageResolution-Test. Dieser Test kann die gefundene Auflösung gegen eine einzelne Zahl validieren, oder auch gegen eine Wertespanne, die in der Form <kleinster Wert>-<größter Wert> angegeben wird, oder durch eine Komma-separierte Liste von erlaubten Werten. Hier können die Zahlen auch ohne Nachkommastelle angegeben werden, da der Test tatsächlich Zahlenwerte vergleicht und keine Strings.

Da verschiedene Versionen von JHove unterschiedliche Namespace-UIRs für den „mix“-Namespace verwenden, kann innerhalb der Template-Konfiguration für diesen Test im Element <mix_uri> diejenige des „mix“-Namespaces angegeben werden.

Ein Beispiel-Template könnte folgendermaßen aussehen:

<tifvalidationConfig>
  <namespace uri="http://www.loc.gov/mix/v10" name="mix" />
     <namespace uri="http://hul.harvard.edu/ois/xml/ns/jhove" name="jhove" />

 <!--check image format-->
   <check>
          <xpath>string(//jhove:repInfo/jhove:format)</xpath>
          <wanted>TIFF</wanted>
          <error_message>
               Check for image format: Image: "${image}" Wanted value: "${wanted}"\, found
   value: "${found}".
          </error_message>
     </check>

 <!--Check if the image is well-formed and valid-->
     <check>
          <xpath>//jhove:repInfo/jhove:status</xpath>
          <wanted>Well-Formed and valid</wanted>
         <error_message>
               Check for image status: Image: "${image}" Wanted value: "${wanted}"\, found value:
   "${found}".
          </error_message>
     </check>

     <!--Check for icc-profile-->
     <check>
  <xpath>count(//jhove:repInfo/jhove:properties//jhove:property
       [jhove:name[text()="TIFFEPProperties"]]/jhove:values/
   jhove:property/jhove:name[text()="InterCo lourProfile"])
          </xpath>
          <wanted>1.0</wanted>
          <error_message>
               Check for ICC profile: Image: "${image}" Wanted value: "${wanted}"\, found value:
   "${found}".
          </error_message>
     </check>

 <!--check Bits per Sample, i.d. if the image has three color dimensions (as in RGB) with 8 bit depth  each -->
     <check>
          <xpath>//jhove:repInfo/jhove:properties/jhove:property/jhove:values
   [@type='NISOImageMetadata']/jhove:value/mix:mix/
   mix:ImageAssessmentMetadata/mix:ImageColorEncoding/
   mix:BitsPerSample/mix:bitsPerSampleValue/text()
          </xpath>
          <wanted>8,8,8</wanted>
          <error_message>
               Check for color depth: Image: "${image}" Wanted value: "${wanted}"\, found value:
   "${found}".
          </error_message>
     </check>

     <!--check the color space-->
     <check>
          <xpath>//jhove:repInfo/jhove:properties/jhove:property/jhove:values
   [@type='NISOImageMetadata']/jhove:value/mix:mix/
   mix:BasicImageInformation/mix:BasicImageCharacteristics/
   mix:PhotometricInterpretation/mix:colorSpace
          </xpath>
          <wanted>2</wanted>
          <error_message>
               Check for color space: Image: "${image}" Wanted value: "${wanted}"\, found value:
   "${found}".
          </error_message>
     </check>

     <!--check compression scheme. The numeric value seems to be deprecated?  Values you may expect  include "uncompressed"/"LZW"/"ISO JPEG" -->
     <check>
          <xpath>
               //jhove:repInfo/jhove:properties/jhove:property/jhove:values
   [@type='NISOImageMetadata']/jhove:value/mix:mix/
   mix:BasicDigitalObjectInformation/
   mix:Compression/mix:compressionScheme
          </xpath>
          <wanted>1</wanted>
          <error_message>
               Check for compression: Image: "${image}" Wanted value: "${wanted}"\,     found value: "${found}".
          </error_message>
     </check>

 <!-- Check for image resolution in dpi. Other possible wanted values could be "400" or  "72,100.0,345". If the test does not work, change the mix_uri to http://www.loc.gov/mix/v10 -->
     <integrated_check name="resolution_check">
      <mix_uri>http://www.loc.gov/mix/v20</mix_uri>
          <wanted>300-600</wanted>
          <error_message>
               Check for resolution: Image: "${image}" Wanted value: "${wanted}"\,
   found value: "${found}".
          </error_message>
     </integrated_check>
</tifvalidationConfig>

Stoppen des Plugins

Das Tif-Validation-Plugin läuft komplett innerhalb der Java Virtual Machine. Ein Stoppen des Plugins stoppt damit auch alle zugehörigen Prozesse.

Nach einem Stop-Befehl arbeitet das Plugin noch den gesamten aktuellen Job zu Ende, bevor es tatsächlich anhält. Um einen Job vorher zu beenden, muss die gesamte TaskManager-Applikation beendet werden.

Last updated