Zurück |  | Weiter

# Kapitel 8. XPath-Einsatz

### Allgemeine Erläuterungen zu XPath in PDFUnit

Die Nutzung von XPath zur Bestimmung von Teilen eines PDF-Dokumentes öffnet ein weites Feld von Testmöglichkeiten, das mit einer API alleine nicht abgedeckt werden kann.

Verschiedene Kapitel enthalten schon eine Beschreibung der XPath-Testfunktionen, sofern die Testbereiche XPath-Tests besitzen. Dieses Kapitel hier dient als Übersicht mit Verweisen zu den Spezialkapitel.

    <!-- Overview over XPath related test facilities: -->

    <hasBookmarks><matchingXPath />...     3.17: „Lesezeichen (Bookmarks) und Sprungziele“
    <hasFields><matchingXPath />...        3.11: „Formularfelder“
    <hasFonts><matchingXPath />...         3.19: „Schriften“
    <hasSignatures><matchingXPath />...    3.21: „Signaturen und Zertifikate“
    <hasXFAData><matchingXPath />...       3.29: „XFA Daten“
    <hasXMPData><matchingXPath />...       3.30: „XMP-Daten“

    <!-- Comparing two documents using XPath: -->
    <haveSameXFAData><matchingXPath />...  4.18: „XFA-Daten vergleichen“
    <haveSameXMPData><matchingXPath />...  4.19: „XMP-Daten vergleichen“

Intern verwendet PDFUnit XPath auch für die Implementierung anderer Tests.

### Interne Nutzung von XMLUnit

Alle Vergleiche von XML-Werte werden mit XMLUnit (http://xmlunit.sourceforge.net) durchgeführt. Dabei werden die Syntaxregeln von XML berücksichtigt werden, wie z.B.:

- Die Reihenfolge von Attributen spielt keine Rolle.

- Whitespaces zwischen Knoten werden ignoriert.

Weitere Regeln für „Canonisches XML“ sind bei Wikipedia (http://de.wikipedia.org/wiki/Canonical_XML) gut beschrieben.

Die allgemeine Konfiguration von XMLUnit wird auf der Projektseite http://xmlunit.sourceforge.net/userguide/html/index.html#Configuring%20XMLUnit selber beschrieben. PDFUnit nutzt folgende Konfigurationsparameter:

    XMLUnit.setXSLTVersion("2.0");
    XMLUnit.setNormalizeWhitespace(true);
    XMLUnit.setIgnoreWhitespace(true);
    XMLUnit.setIgnoreAttributeOrder(true);
    XMLUnit.setIgnoreComments(true);

### Daten als XML extrahieren

Für alle Teile eines PDF-Dokumentes, für die es XML/XPath-Tests gibt, werden Extraktionsprogramme zur Verfügung gestellt:

    // Utilities to extract XML from PDF:

    com.pdfunit.tools.ExtractBookmarks
    com.pdfunit.tools.ExtractFieldsInfo
    com.pdfunit.tools.ExtractFontsInfo
    com.pdfunit.tools.ExtractSignaturesInfo
    com.pdfunit.tools.ExtractXFAData
    com.pdfunit.tools.ExtractXMPData

Die Hilfsprogramme werden im Kapitel 9.1: „Allgemeine Hinweise für alle Hilfsprogramme“ genauer beschrieben.

### Namensräume mit Präfix

Namensräume, für die ein Präfix definiert ist, werden von PDFUnit automatisch erkannt. Das gilt sowohl für XML-Dateien, als auch für PDF-internes XML.

### Default-Namensraum

Der Default-Namensraum kann nicht automatisch ermittelt werden, weil es in einem XML-Dokument prinzipiell mehrere Default-Namensräume geben darf. Aus diesem Grund muss der Default-Namensraum im Test angegeben werden. Er kann mit einem beliebigen Präfix verwendet werden:

    <!--
      The default namespace has to be declared,
      but any alias can be used for it.
    -->
    <testcase name="hasXFAData_UsingDefaultNamespace">
      <assertThat testDocument="xfa/xfa-enabled.pdf">
        <hasXFAData>
          <withNode tag="foo:log/foo:to"
                    value="memory"
                    defaultNamespace="http://www.xfa.org/schema/xci/2.6/"
          />
        </hasXFAData>
      </assertThat>
    </testcase>

Beachten Sie, dass in diesem Beispiel einmal das Präfix `foo` und einmal das Präfix `bar` für den gleichen Namensraum verwendet wird. In der Praxis verwenden Sie bitte nur ein einziges und nicht „foo“ oder „bar“.

### Ergebnistypen von XPath-Ausdrücken

Die Auswertung von XPath-Ausdrücken führt zu bestimmten XPath-Datentypen, die beim Vergleich der XFA-Daten oder XMP-Daten zweier PDF-Dokumente mitgegeben werden müssen. Die verfügbaren Ergebnistypen sind als Konstanten für das Attribut `withResultType` definiert:

    <!-- Result types for XPath-processing:  -->

    withResultType="BOOLEAN"
    withResultType="NUMBER"
    withResultType="NODE"
    withResultType="NODESET"
    withResultType="STRING"

Test mit dem Ergebnistypen `BOOLEAN` sind insofern kritisch, weil XPath nicht zwischen „nicht gefunden“ und „false“ unterscheiden kann. Versuchen Sie mit einem anderen XPath-Ausdruck.

### XPath-Kompatibilität

Für XPath-Ausdrücke stehen im Prinzip alle Syntaxelemente und Funktionen von XPath zur Verfügung. Allerdings ist die Menge der tatsächlich verfügbaren Funktionen von der Version des verwendeten XML-Parsers und XSLT-Prozessors abhängig. PDFUnit verwendet den vom JDK mitgelieferten XML-Parser bzw. XSLT-Prozessor (Standard JAXP). Insofern bestimmt die jeweils verwendete Java-Engine die Kompatibilität zum XPath-Standard.

Zurück |  | Weiter
Kapitel 7. Unicode | Zum Anfang | Kapitel 9. Hilfsprogramme zur Testunterstützung