13.10.  Using the Default-Namespace

When running tests which are based on XML or XPath, namespaces which are declared with a prefix are detected automatically. Because the XML standard allows to declare namespaces multiple times, PDFUnit does not detect the default namespace. It has to be set using the attribute defaultNamespace="..":

<!-- 
  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>

Note that there are two prefixes used for the same namespace, first foo and then bar. That seems strange, but the Java Standard requires an arbitrary prefix, which must not be omitted.

The next example shows the usage of a default namespace for the tag <matchingXPath />:

<testcase name="hasXMPData_MatchingXPath_WithDefaultNamespace">
  <assertThat testDocument="xmp/metadata-added.pdf">
    <hasXMPData>
      <matchingXPath expr="//foo:format = 'application/pdf'"
                     defaultNamespace="http://purl.org/dc/elements/1.1/"
      />
    </hasXMPData>
  </assertThat>
</testcase>