4.11. Validating TIFF images using JHOVE

This plugin sends data for validation to the JSTOR/Harvard Object Validation Environment (JHOVE) framework. The framework can be used to check that images are complete, do not contain any bitstream errors and match the appropriate parameters.

Starting the plugin

The following instruction must be used to call the download from a workflow step:

/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}

Parameters

The command parameters are explained in the following table:

Operation of the plugin

Translation needed: Please notice that the following paragraph needs an English translation. This text gets updated over the next days.

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.

Configuration of the validation

Translation needed: Please notice that the following paragraph needs an English translation. This text gets updated over the next days.

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>

Stopping the plugin

Translation needed: Please notice that the following paragraph needs an English translation. This text gets updated over the next days.

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