/usr/bin/pmltoxmp is in photoml 0.28-0ubuntu2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143  | #! /bin/sh
# This script converts PhotoML files to XMP format
# Copyright © 2010,2011 Brendt Wohlberg <photoml@wohlberg.net>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of version 2 of the GNU General Public License at
# http://www.gnu.org/licenses/gpl-2.0.txt.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
# Most recent modification: 28 January 2011
pmlpath="/usr/share/photoml"
pmlvalidx="/usr/bin/pmlvalid"
if [ ! "`which xsltproc 2>/dev/null`" ]; then
  echo "pmltoxmp: error executing xstlproc" >&2
  exit 1
fi
usage()
{
cat <<EOF >&2
usage: pmltoxmp [-h] [-n] ([-o path] [-s fstr] | [-f fid] [-g gid]) infile
       -h       Display usage information
       -n       Omit validity test
       -o path  Specify output path
       -s istr  Specify image id string format
       -f fid   Specify id of frame to convert
       -g gid   Specify id of group containing frame to convert
EOF
}
op=''
ff=''
fp=''
gp=''
novalid=0
while [ $# -ge 1 ]; do
  case $1 in
    -n)    novalid=1 ;;
    -o)    shift; op="$1" ;;
    -s)    shift; ff="$1" ;;
    -f)    shift; fp="$1" ;;
    -g)    shift; gp="$1" ;;
    -*)    usage; exit 1 ;;
    *)     infile=$1; break ;;
  esac
  shift
done   
if [ \( "$op" != '' -o "$ff" != '' \) -a \( "$fp" != '' -o "$gp" != '' \) ]; then
  usage; exit 1
fi
if [ "$infile" = '' ]; then
  usage; exit 1
fi
if [ ! -f "$infile" -o ! -r "$infile" ]; then
  echo pmltoxmp: could not open file $infile >&2
  exit 2
fi
dtdpub=`grep DOCTYPE $infile | grep -o -e '-\/\/.*EN'`;
dtdtyp=`echo $dtdpub | grep -o -e '//DTD[^/]*//' | cut -d ' ' -f 2`
if [ "$dtdtyp" != 'PhotoML' ]; then
  echo "pmltoxmp: input document type $dtdtyp not recognised" >&2
  exit 3
fi
if [ $novalid -eq 0 ]; then
  if ! $pmlvalidx "$infile" 2>/dev/null; then
    echo pmltoxmp: validity error in file $infile >&2
    exit 4
  fi
fi
if [ "$ff" != '' ]; then
  # Ensure that image id format string does not contain a path component
  ff=`echo $ff | sed -e 's|^.*/||'`".xmp"
  ffparam="--stringparam idstring-format $ff"
fi
fpparam=''
if [ "$fp" != '' ]; then
  fpparam="--stringparam fid-param $fp"
fi
gpparam=''
if [ "$gp" != '' ]; then
  gpparam="--stringparam gid-param $gp"
fi
if [ -r /etc/xml/catalog -a "$XML_CATALOG_FILES" = '' ]; then
  XML_CATALOG_FILES=/etc/xml/catalog
fi
XML_CATALOG_FILES="$pmlpath/dtd/catalog.xml $XML_CATALOG_FILES"
export XML_CATALOG_FILES
unset SGML_CATALOG_FILES
edxsl=$pmlpath/xsl/defaults/expand.xsl
txxsl=$pmlpath/xsl/misc/xmp.xsl
tmpin="/tmp/pmltoxmp.in.$$"
xsltproc $fsparam $ecparam $lmparam -o $tmpin $edxsl $infile
if [ "$fp" = '' -a "$gp" = '' ]; then
  tmpout="/tmp/pmltoxmp.out.$$"
  mkdir -p $tmpout
  opparam="--stringparam output-path $tmpout/"
  xsltproc $opparam $ffparam $txxsl $tmpin
  if [ "$op" = '' ]; then
    op='.'
  else
    op=`echo $op | sed -e 's|/$||'`
  fi
  nf=`ls $tmpout/*.xmp 2>/dev/null | wc -l`
  if [ $nf -gt 0 ]; then
    for f in $tmpout/*.xmp; do
      b=`basename $f`
      if [ -f "$b" ]; then
        echo Warning: skipping output "$op/$b" - file exists
      else
        mv "$f" "$op"
      fi
    done
  fi
else
  xsltproc $fpparam $gpparam $txxsl $tmpin
fi
status=$?
rm -f $tmpin
if [ -d "$tmpout" ]; then
  rm -rf $tmpout
fi
exit $status
 |