
PhotoML: Photo Description Markup Language

Brendt Wohlberg

   <photoml@wohlberg.net>
   Revision History
   Revision 0.07 22 November 2007
   Revision 0.06 8 June 2007
   Revision 0.05 20 August 2005
   Revision 0.04 18 November 2004
   Revision 0.03 31 January 2004
     _____________________________________________________________

Purpose

   This distribution is primarily intended to provide a format
   (defined by the PhotoML DTD) and tools for describing details of
   photo creation, processing, and content in a collection of
   photographs. It is designed to be appropriate for a wide variety
   of photographic formats, including roll film (such as 35mm and
   120/220), sheet film (such as 4x5 and 8x10) and digital images.
   The type of information represented, while allowing description of
   details of content, creation etc. for digital images, does not
   support some of the more low-level housekeeping details that might
   be necessary in an application such as an online database of
   digital images. In particular, PhotoML is not yet another web
   photo gallery generator.

Alternative Formats

   While alternatives exist, none of them seem to completely fit the
   role for which PhotoML was designed. Photo RDF has significantly
   lower complexity than PhotoML, allowing representation of a much
   smaller set of information, and does not provide any of the photo
   grouping mechanisms which seem desirable when describing a large
   collection of photos. DIG35 has higher complexity than PhotoML in
   some respects, providing support for greater detail for individual
   images. Since DIG35 is designed as metadata to be attached in the
   header of a digital image, it also lacks the image grouping
   facilities of PhotoML, and while DIG35 is intended to become an
   industry standard, the schema is not completely freely distributed
   (available on request only, but free for government and
   educational use).

Further Development

   PhotoML has received a substantial amount of work, but a number of
   rough edges still require attention. Comments, suggestions, and
   contributions (including any involving significant changes) are
   welcome, and should be directed to <photoml@wohlberg.net>. There
   are no immediate plans for a transition from the DTD to an XML
   Schema as the primary format definition (in contrast to DTDs,
   there does not yet seem to be much free software supporting
   editing and validation of schemas), but example schemas
   auto-generated from the DTD are included in the distribution.

The Distribution

   The distribution consists of XML document type definitions, XSLT
   stylesheets for generating HTML formatted versions of the photo
   description XML, and various software tools. Note that the name
   PhotoML is used to describe the XML format defined by the PhotoML
   DTD as well as the entire distribution; the intended meaning
   should be clear from the context in which the name is used.

License

   Use of this distribution is subject to the terms of the GNU
   General Public License (version 2), a copy of which is included in
   the distribution. If anyone wishing to use this distribution finds
   the GPL too restrictive, I will consider requests to make it
   available under an alternative open source license.

Platforms

   The primary content of the dtd, xsd, xsl, and xml directories
   should be platform independent, but the configuration and
   installation files require a UNIX environment. The scripts in the
   tools directory have been tested under Linux on an i386
   architecture, but should work on any UNIX platform with recent
   versions of libxml2 and libxslt installed. MS Windows versions of
   the utility scripts are not currently available, but should be
   easily ported from shell script to a scripting language available
   on that platform. Windows users may, however, wish to try
   installing under the cygwin environment.

Prerequisites

   The primary prerequisites, other than basic UNIX shell utilities,
   are perl, and the libxml2 and libxslt packages. Some of the tools
   have additional requirements:
   md5sum          Standard on many Linux systems.
   dcraw           Available as source, RPM and deb packages.
   imageinfo       Source, SRPM and Ubuntu source deb packages available.
   xgrep           Source, SRPM and Ubuntu source deb packages available.
   Date::Manip     Perl module available from CPAN.
   Image::ExifTool Perl module available from CPAN.

Installation

   The source distribution is available from the PhotoML download
   page. After unpacking the tar archive, the simplest installation
   procedure consists of the following commands (executed from the
   distribution root directory):
     ./configure
      make
      make test
      make install

   The final make install usually needs to be performed with root
   privileges (see the INSTALL file for further details). Using the
   default configuration, software tools are installed in
   /usr/local/bin, and the DTD, XSL, and associated files are
   installed in /usr/local/share/photoml.

   Users of Red Hat/Fedora or Ubuntu Linux may install the RPM or deb
   packages available from the PhotoML download page. When installing
   from RPM or deb packages, software tools are installed in
   /usr/bin, and the DTD, XSL, and associated files are installed in
   /usr/share/photoml.

Distribution Content

   The distribution content is divided up into a number of
   subdirectories, as described below.

DTD

   The dtd directory contains the PhotoML DTD and associated files
   (character set defining external entities) and a catalogue file
   which is used by libxml2 tools for locating DTDs. The PhotoML DTD
   defines the primary XML format for describing collections of
   photographs, and, while still under development, should be
   reasonably stable. When the DTD is changed, the pmlupgrade utility
   provides automatic (or semi-automatic, in complex cases)
   conversion to the new format.

XSL

   The xsl directory contains XSLT stylesheets for constructing HTML
   views of PhotoML XML files (in the xsl/html directory), for
   expansion of defaults elements (in the xsl/defaults directory),
   for upgrading PhotoML XML files from older DTD versions (in the
   xsl/upgrade directory), and for supporting the functionality of
   some of the tools (in the xsl/misc directory).

XML

   The xml directory contains XML examples of PhotoML photo
   description and image description files. The top level make
   command builds HTML views of these files using the XSLT
   stylesheets in the xsl directory.

Tools

   The tools directory contains tools for expanding defaults in
   PhotoML files, validating PhotoML files, constructing HTML
   representations etc.:
   pmlcreate Generate PhotoML roll description outline
   pmldigital Generate PhotoML descriptions of digital images from
   digital cameras and film scanners
   pmlexpand Expand and remove defaults in a PhotoML XML file
   pmlgrep Provides a grep-like utility for PhotoML files
   pmlindex Constructs an HTML index of PhotoML files
   pmltrans Transform a PhotoML XML file using the standard PhotoML
   XSL style sheet
   pmlupgrade Upgrade PhotoML XML files to latest DTD version
   pmlvalid Validate PhotoML XML files

   Further details are provided in the man pages (and associated HTML
   files) in that directory. Installation of libxml2 and libxslt is
   required, as the scripts in this directory make use of the xmllint
   and xsltproc utilities.

Documentation

   Suprisingly enough, the docs directory contains documentation; the
   main document source in DocBook format, and viewable documents in
   HTML, PDF, and text formats.

XSD

   The xsd directory contains XML Schema definitions that have been
   auto-generated from the PhotoML DTD by the dtd2xsd and trang
   tools. While these schemas may be useful to those wishing to use
   schema based XML tools, they have not been verified to be correct,
   and should not be considered as the primary document type
   definitions.

Using PhotoML

   At least some familiarity with XML is probably necessary to make
   use of PhotoML. It is particularly important for users who are not
   familiar with DTD syntax to use an XML editor (see Appendix A, XML
   Editing Tools) that provides DTD guided context-dependent element
   insertion to ensure that valid documents are created.

   The recommended formal public identifier for the current version
   of the PhotoML DTD is
"-//BW//DTD PhotoML 0.12//EN"

   A PhotoML XML file will therefore usually begin with the following
   two lines
<?xml version="1.0">
<!DOCTYPE photo PUBLIC "-//BW//DTD PhotoML 0.12//EN" "photo.dtd">

   It is important to use the full public identifier including the
   DTD version number so that the version upgrade script is able to
   correctly identify the relevant DTD version when transitioning to
   a new DTD.

The PhotoML DTD

   PhotoML is a very flexible format, providing facilities for
   recording far more detail than is likely to be of interest to the
   average photographer. A reasonable introduction to the format can
   be obtained by inspecting the example files in the xml directory,
   and viewing the corresponding HTML views generated by the XSLT
   stylesheets. For those who are familiar with DTD syntax, see
   Appendix B, PhotoML DTD or read through the heavily commented DTD
   in the dtd directory. A few issues are sufficiently complex to
   warrant additional discussion.

Collections

   The id attribute of roll, sheet, and digital elements is intended
   to assign the primary identity for the group. If the group
   contains a collection element, the cgid attribute represents a
   secondary identity for the group relative to the collection, the
   identity of which is determined by the id attribute of the
   collection element. The fstid and lsid attributes specify the
   first and last frame identities which are contained in the the
   collection, so that it may contain only part of the group. A group
   may also contain multiple collection elements.

The frame id and fn attributes

   The id attribute is intended to assign the primary identity for
   the frame. It is recommended that the values be two digit numbers,
   increasing in chronological frame order (e.g. 01 for the first
   frame exposed, 02 for the second frame exposed etc.). If the
   actual frame number marked on the film differs from the id, it may
   be recorded using the fn attribute, which is also useful in other
   situations, e.g. when the camera exposes film beginning at the
   end, so that the id numbers increase in chronological order, while
   the fn values decrease.

The xml:lang attribute

   The xml:lang attribute, available for relevant elements, is a
   standard mechanism for specifying the language of the element
   content. In addition to the definition in the XML standard,
   relevant information is available in the documents describing
   rfc3066 and iso639-2.

The date element

   The date element has the format YYYY[-MM[-DD]], (that is,
   YYYY-MM-DD, YYYY-MM, or YYYY).

The time element

   The time element (using the 24 hour clock) has the format
   hh[:mm[:ss[.ss*]]] (that is, hh, hh:mm, hh:mm:ss, or hh:mm:ss.s
   with an arbitrary number of fractional seconds after the decimal
   point).

   The optional zone attribute represents the UTC time zone in the
   format (+|-)hh[:mm] (that is +hh:mm, -hh:mm, +hh, or -hh).

   For further details see a comprehensive discussion of ISO time
   notation, upon which these restrictions are based.

The digimage element

   The digimage element is intended to provide a mechanism for
   describing digital images, primarily images from digital cameras,
   from film scanners, and edited digital images. Note that this
   format complements the primary PhotoML digital element for images
   from digital images. For example, each image captured using a
   digital camera is both a photograph (relevant aspects of which,
   such as creation date, location, scene description etc. are
   described using digital elements and their frame children) and a
   digital image (relevant aspects of which, such as image geometry,
   bit depth, image format etc. are described using digimage
   elements).

The defaults element

   Elements contained within a defaults element provide default
   values for the subsequent entities in which the relevant elements
   have not been specified (for example, sub-elements of a frame
   specified within a defaults element are considered implied markup
   within any subsequent frame for which those sub-elements are not
   explicitly specified. An expanded version of a PhotoML file, with
   all defaults elements explicitly merged into the relevant
   elements, may be obtained by using the pmlexpand utility.

   An understanding of the rules governing defaults elements is
   necessary for using them appropriately. The ruling defaults at any
   point in a PhotoML document are obtained by combining (as
   discussed below) all preceding defaults elements at higher levels
   in the element tree, and preceding defaults elements which are
   also children of the current parent node (the scope of a defaults
   element is defined by its parent element). For example, within the
   following document
 <photo>
   <defaults> ... A  ... </defaults>
   <roll>
     <defaults> ... B ... </defaults>
     <frame>
       ... 1 ...
     </frame>
   </roll>
   <roll>
     <frame>
       ... 2 ...
     </frame>
   </roll>
 </photo>

   defaults A and B apply to frame 1, but only defaults A apply to
   frame 2.

   The current defaults at any point in the document are obtained by
   combining all preceding relevant (those within the current scope)
   defaults. As each defaults element is encountered in document
   order, a new current defaults set is constructed by combining the
   newly encountered defaults element with the current set in the
   manner specified by the combine attribute of the newly encountered
   defaults element. (A new copy of the current set is created when
   an inner scope is encountered so that any modifications to the
   current set within that scope do not effect the outer scope.) The
   possible values of the combine attribute are (the default
   attribute value is merge):

   replace
          The current defaults are deleted and replaced by the
          content of a defaults element with a value of replace for
          its combine attribute.

   merge
          The defaults element with a value of merge for its combine
          attribute is merged over the current defaults in the sense
          that any elements not in the current defaults are inserted,
          and any terminal node elements in both are replaced by
          those in the defaults element.

   The processing instruction <?merge:reject element-name
   element-name ... @attribute-name @attribute-name ... ?> may be
   used to signal the removal of an element during a subtree merge,
   as illustrated in the following example
 <photo>
   <roll>

     <defaults>
       <frame>
         <scene>
           <occasion>
             <date>2000-01-01</date>
             <time zone='+02:00'>12:30</time>
           </occasion>
           <location>
             <country>country-name</country>
             <city>city-name</city>
           </location>
         </scene>
       </frame>
     </defaults>

     <frame id='01'>
       <scene>
         <occasion>
           <time>
             <?merge:reject @zone?>
           </time>
         </occasion>
         <location>
           <?merge:reject city?>
         </location>
       </scene>
     </frame>

   </roll>
 </photo>

   where defaults expansion results in the frame with id='01' having
   the defaults content merged in, with the exception of the
   attribute zone and the element city.

   Finally, note that the defaults mechanism is not yet completely
   stable, and may still be subject to modification. If changes are
   made, every effort will be made to support automatic conversion to
   a new mechanism via the pmlupgrade utility.

Recommended Frame Numbering System

   The PhotoML DTD assumes that film rolls, frames, etc. are assigned
   unique identifiers. This section describes a recommended numbering
   system for photographic images, to be used within PhotoML
   documents. The general format consists of a full or partial date
   (that is, a year, a year and month, or a year, month, and day), a
   number within a grouping for that partial date (for example, a
   number for a roll of film started on the date part of the
   identifier), and a frame number with respect to the grouping (for
   example, a frame number within the roll). In the following forms
   year denotes a four digit number, month denotes a two digit number
   (range 01 to 12), day denotes a two digit number (range 01 to 31),
   and roll number, digital media number, and frame number denote two
   or three digit numbers with leading zeros where necessary.

Roll Film

   The recommended forms are
<year>r<roll number>f<frame number>

   or
<year>-<month>r<roll number>f<frame number>

   For example, 2001r31f08 denotes frame 8 on roll 31 of the year
   2001, while 2001-05r03f12 denotes frame 12 on roll 3 of May 2001.

Digital Camera Images

   The recommended forms are
<year>d<digital media number>f<frame number>

   or
<year>-<month>d<digital media number>f<frame number>

   or
<year>-<month>-<day>d<frame number>

   For example, 2000d020f12 denotes frame 12 on compact flash card 20
   (assuming a policy of assigning a new number each time an empty
   card is loaded) of the year 2000, while 2000-01d03f09 denotes
   frame 9 on compact flash card 3 of January 2000, and 2000-02-21d45
   denotes frame 45 taken on 21 February 2000.

Sheet Film

   The recommended forms are
<year>-<month>s<frame number>

   or
<year>-<month>-<day>s<frame number>

   For example, 2002-10s05 denotes frame 5 taken during October 2002,
   while 2002-03-09s02 denotes frame 2 taken on 9 October 2002.

Image Identifiers

   An image identifier specifies a specific version of an image
   derived via editing of an original frame. The recommended form of
   an image identifier is
<frame identifier>n<version number>

   where version number is a two digit number representing the
   specific version. For example, if two differently cropped images
   are derived from a scan of frame 2001r31f08, they may be assigned
   image numbers 2001r31f08n01 and 2001r31f08n02.

Acknowledgments

   Thanks to Stephen Darlington and Oskar Ojala for valuable comments
   and suggestions. Oskar Ojala has also made a number of
   contributions to the distribution, including the detailed.xsl XSLT
   stylesheet.

A. XML Editing Tools

   A number of XML editing tools are available, including open
   source, shareware, and commercial products for a variety of
   platforms.

Emacs/XEmacs

   The emacs and xemacs editors are highly recommended, both of which
   provide XML editing support via the following extension packages:
   psgml    A major mode for editing SGML and XML
   tdtd     A major mode for editing DTDs
   xslide   A major mode for editing XSL stylesheets
   css-mode A major mode for editing CSS stylesheets

   The psgml package relies on the nsgml parser for validation. The
   environment variable SGML_SEARCH_PATH needs be set so that the
   PhotoML DTD can be found; for editing after building the PhotoML
   distribution, but prior to installation, the following command
   issued from the distribution root directory will work for
   csh/tcsh:
setenv SGML_SEARCH_PATH `(cd dtd; pwd)`

   or for sh/bash:
SGML_SEARCH_PATH=`(cd dtd; pwd)`; export SGML_SEARCH_PATH

   After installation, this environment variable should be set to the
   directory in which the DTD, entities etc. are installed -
   /usr/local/share/photoml/dtd by default.

B. PhotoML DTD

                    PhotoML: Photo Description Markup Language
                    Version: 0.12       Date: 21 November 2007
              The recommended formal public identifier for this DTD i
   s:
                         "-//BW//DTD PhotoML 0.12//EN"
           Please consult the comments in this file, and the notes in
    the
           PhotoML distribution documentation.
           Copyright  2002-2007   Brendt Wohlberg  <photoml@wohlberg
   .net>
           This is free software; you can redistribute it and/or modi
   fy it
           under the terms of version 2 of the GNU General Public Lic
   ense
           at http://www.gnu.org/licenses/gpl-2.0.txt.
           This DTD 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 t
   he
           GNU General Public License for more details.


           Acknowledgement: Thanks to Stephen Darlington and Oskar Oj
   ala for
           valuable comments and suggestions.

Parameter Entities

xlink-simple-attributes

   Link specification attributes

   Definition xmlns:xlink CDATA #FIXED 'http://www.w3.org/1999/xlink'
   xlink:type (simple) #FIXED 'simple' xlink:href CDATA #IMPLIED

xml-lang-attribute

   The language specification attribute

   Definition xml:lang NMTOKEN #IMPLIED

Text

   Unrestricted text string

   Definition #PCDATA

Integer

   An integer

   Definition #PCDATA

PositiveInteger

   A positive integer (including zero)

   Definition #PCDATA

Real

   A real number

   Definition #PCDATA

Rational

   A rational number, expressed either as a decimal fraction or in
   numerator/denominator form

   Definition #PCDATA

Fraction

   A fraction, expressed either as a real number, or as the quotient
   of two integer or real numbers

   Definition #PCDATA

HexString

   A string of hexadecimal digits

   Definition #PCDATA

Date

   A date

   Definition #PCDATA

Time

   A time

   Definition #PCDATA

DateTime

   A date and time

   Definition #PCDATA

TimeInterval

   A time interval

   Definition #PCDATA

EmailAddress

   An email address

   Definition #PCDATA

PhoneNumber

   A phone number

   Definition #PCDATA

CompassDirection

   A compass direction

   Definition #PCDATA

ElevationAngle

   An elevation angle

   Definition #PCDATA

Latitude

   A latitude value

   Definition #PCDATA

Longitude

   A longitude value

   Definition #PCDATA

Elements

photo

   The root element contains optional default settings, photograph
   description elements roll (for roll film), sheet (for sheet film),
   and digital (for photographs taken using a digital camera), and
   digimage elements describing specific digital images, either
   direct from a camera or scanner, or derived via editing,
   composition etc.

   Content model (defaults?, (roll | sheet | digital | digimage |
   digimage-set)+)+
   Attributes xml:lang NMTOKEN #IMPLIED
   Used inside

defaults

   Elements contained within a defaults element provide default
   values for the corresponding elements in which the relevant
   information has not been specified. A full description of the
   semantics of this element is rather lengthy, and may be found in
   the accompanying documentation.

   Content model (film?, processing?, frame?, properties?, history?)
   Attributes combine (merge|replace) 'merge'
   Used inside photo | roll | digital | frame-set | digimage-set

roll

   The details of a roll of film (e.g. 35mm, APS, 120). Optional film
   and processing descriptions are followed by a sequence of optional
   loading details, optional defaults (to be applied to the following
   frames), frame descriptions, and optional unloading details. A
   defaults element must always precede at least one frame element,
   and load and unload elements, if present, must respectively
   precede and follow some group of frame elements. The id attribute
   specifies an identity/name assigned to the roll.

   Content model (collection*, description?, film?, processing?,
   (load?, (defaults?, (frame | frame-set))+, unload?)+, note?)
   Attributes id NMTOKEN #REQUIRED
   Used inside photo 

sheet

   The details of a single sheet of film (e.g. 4x5, 8x10). Optional
   film, processing and loading descriptions precede the single frame
   description, which is followed by an optional unloading
   description. The id attribute specifies an identity/name assigned
   to the sheet.

   Content model (collection*, film?, processing?, load?, frame,
   unload?, note?)
   Attributes id NMTOKEN #REQUIRED
   Used inside photo 

digital

   The details of a sequence of digital photographs. Each group of
   frame descriptions may be preceded by a defaults element. The id
   attribute specifies an identity/name assigned to the digital
   sequence.

   Content model (collection*, description?, (defaults?, (frame |
   frame-set))+, note?)
   Attributes id NMTOKEN #REQUIRED
   Used inside photo 

collection

   A collection of photograph descriptions that should be grouped
   together. Particularly useful for sheet film, since each sheet
   element describes a single photo, but also useful, for example,
   for a number of roll film descriptions for the same day, event,
   trip etc. The id attribute allows an identity/name to be assigned
   to the collection, the cgid attribute provides a collection based
   id for the group (roll, digital, or sheet), and the optional
   fstfid and lstfid specify initial and final frame ids for a subset
   of the frames in the group.

   Content model (description?, note?)
   Attributes    id     NMTOKEN #REQUIRED
                 cgid   NMTOKEN #REQUIRED
                 fstfid NMTOKEN #IMPLIED
                 lstfid NMTOKEN #IMPLIED
   Used inside   roll | sheet | digital

description

   A brief description of the parent element. Provides a description
   of the scene or location for a specific frame when a child of the
   scene or location elements, or of an entire collection, roll, or
   digital photography session, providing information relevant to all
   of the frames within the grouping, when a child of the collection,
   roll, or digital elements.

   Content model %Text;
   Attributes xml:lang NMTOKEN #IMPLIED
   Used inside roll | digital | collection | scene | location |
   operation

note

   A note for miscellaneous details of the parent element.

   Content model %Text;
   Attributes xml:lang NMTOKEN #IMPLIED
   Used inside roll | sheet | digital | collection | film |
   processing | lab | developing | developer | load | unload | frame
   | photographer | ipr | scene | occasion | location | object |
   equipment | body | body-attachment | lens | lens-attachment |
   illumination | support | device | exposure | focus | digimage |
   properties | history | editing | scanner | camera | software |
   hardware | settings | operation

film

   A description of the film used.

   Content model (make?, name?, speed?, process?, type?, format?,
   expiry?, note?)
   Used inside defaults | roll | sheet

make

   The manufacturer of the product, e.g. Fuji (when the parent
   element is film).

   Content model %Text;
   Used inside   film | developer | body | lens | device | hardware

name

   The name of a person, business, or product, e.g. Velvia (when the
   parent element is film).

   Content model %Text;
   Used inside film | lab | developer | photographer | owner | person
   | object | software

speed

   The ISO film speed, e.g. 50.

   Content model %PositiveInteger;
   Used inside   film 

process

   The appropriate film developing process. Recommended values are
   C41 (standard negative film), E6 (standard slide film), K14
   (Kodachrome) and B&W (black and white). A custom designation
   should be used for processes not listed here. As a child of the
   film element, this indicates the designated process of the film.
   In the case of cross-processing, a different process may be
   specified as a child of the developing element.

   Content model %Text;
   Used inside   film | developing

type

   The type of a film (recommended values for film type are colour
   positive, colour negative, b&w positive, and b&w negative), camera
   body (e.g. SLR, TLR, rangefinder), or lens (e.g. zoom, prime).

   Content model %Text;
   Used inside   film | body | lens

format

   The film format. Recommended values are APS, 35mm (or 135), 120 or
   220 for medium format, and the film size for large format.

   Content model %Text;
   Used inside   film 

expiry

   The film expiry (expiration in the US) date. The format is YYYY-MM
   since film expiry dates usually only specify a year and month.

   Content model %Date;
   Used inside   film 

processing

   A description of the film processing.

   Content model (lab?, tag?, date?, time?, developing?, note?)
   Used inside   defaults | roll | sheet

tag

   The number of the double/triple check tag affixed to the film by
   the lab.

   Content model %Text;
   Used inside   processing 

date

   A date, represented in the format YYYY[-MM[-DD]].

   Content model %Date;
   Used inside processing | load | unload | occasion | origin |
   editing

time

   A time, represented in the format hh[:mm[:ss[.ss*]]]. The optional
   zone attribute represents the time zone in the format
   (+|-)hh[:mm].

   Content model %Time;
   Attributes zone CDATA #IMPLIED
   Used inside processing | load | unload | occasion | origin |
   editing

lab

   The lab which developed the film. The optional xlink:href
   attribute represents the laboratory web page.

   Content model (name, address?, phone?, fax?, email?, note?)
   Attributes xmlns:xlink CDATA #FIXED 'http://www.w3.org/1999/xlink'
     xlink:type (simple) #FIXED 'simple'
     xlink:href CDATA #IMPLIED
   Used inside processing 

address

   The address of a person or business.

   Content model %Text;
   Used inside   lab | photographer | owner | person | object

phone

   The phone number of a person or business.

   Content model %PhoneNumber;
   Used inside   lab | photographer | owner | person

fax

   The fax number of a person or business.

   Content model %PhoneNumber;
   Used inside   lab | photographer | owner | person

email

   The email address of a person or business.

   Content model %EmailAddress;
   Used inside   lab | photographer | owner | person

developing

   A description of the development stage of processing.

   Content model (process?, shift?, developer?, method?, agitation?,
   temperature?, duration?, note?)
   Used inside processing 

shift

   The number of stops push or pull applied during processing.

   Content model %Real;
   Attributes    type (push|pull) #REQUIRED
   Used inside   developing 

method

   The development method, e.g. daylight tank, tray etc.

   Content model %Text;
   Used inside   developing 

agitation

   Description of the agitation during development.

   Content model %Text;
   Used inside   developing 

temperature

   The temperature of the developer solution (in degrees Celcius by
   default).

   Content model %Real;
   Attributes    units CDATA 'C'
   Used inside   developing 

duration

   The amount of time the film spent in the developer, represented in
   the form %m:%s (minutes:seconds).

   Content model %TimeInterval;
   Used inside   developing 

developer

   The developer solution used.

   Content model (make?, name?, dilution?, note?)
   Used inside   developing 

dilution

   The dilution of the developer solution.

   Content model %Text;
   Used inside   developer 

load

   Film loading details.

   Content model (date?, time?, note?)
   Used inside   roll | sheet

unload

   Film unloading details.

   Content model (date?, time?, note?)
   Used inside   roll | sheet

frame-set

   A container allowing the scope of defaults elements to be
   restricted to the contained set of frame elements.

   Content model (defaults?, ((frame | frame-set)+, defaults?)+)
   Used inside   roll | digital | frame-set

frame

   The frame element describes a single frame in a roll of film or
   sequence of digital photos, and also describes the single frame on
   a piece of sheet film. The id attribute should be an identifying
   number assigned in chronological sequence (e.g. 01, 02 etc.). If
   the actual frame number marked on the film differs from the id, it
   may be recorded using the fn attribute. The fn attribute is also
   useful in other situations, e.g. when the camera exposes film
   beginning at the end, so the the id numbers increase in
   chronological order while the fn values decrease. A frame that is
   not a child of a digital element should not have a digimage child
   element.

   Content model (photographer?, ipr?, scene?, equipment?, exposure?,
   focus?, size?, evaluation?, condition?, digimage?, idximage?,
   note?)
   Attributes id NMTOKEN #IMPLIED
     fn CDATA #IMPLIED
   Used inside defaults | roll | sheet | digital | frame-set

size

   The physical size of the frame. The value may be specified as
   actual physical dimensions in the format <width>x<height> (e.g. a
   value of "24x36" with units "mm" for standard 135 (35mm) film
   frames, or a value of "56x41.5" with units "mm" for 645 frames on
   120 film), in which case the units attribute must be specified, or
   as standard frame size designations (e.g. "645", "6x6", "6x7",
   etc. on 120 film, or "4x5", "8x10" etc. large format film), in
   which case the units attribute must be omitted as an indication
   that the value does not represent an actual physical measurement.

   Content model %Text;
   Attributes    units CDATA #IMPLIED
   Used inside   frame 

condition

   A description of any damage, such as scratches, to a frame or
   group of frames.

   Content model %Text;
   Attributes    xml:lang NMTOKEN #IMPLIED
   Used inside   frame 

idximage

   The idximage allows the specification of the location of an index
   image suitable for viewing in an image index, and should therefore
   be small enough for convenient display in a web browser (for
   example), but larger than a thumbnail. This facility is useful for
   constructing indices of frame descriptions, or, within digimage
   elements, when the actual digital image being described is too
   large for convenient display in this context.

   Content model EMPTY
   Attributes    xmlns:xlink CDATA    #FIXED 'http://www.w3.org/1999/xlink'
                 xlink:type  (simple) #FIXED 'simple'
                 xlink:href  CDATA    #IMPLIED
   Used inside   frame | digimage

photographer

   The name and other details of the photographer. The optional
   xlink:href attribute represents the photographer's web page.

   Content model (name, address?, phone?, fax?, email?, note?)
   Attributes xmlns:xlink CDATA #FIXED 'http://www.w3.org/1999/xlink'
     xlink:type (simple) #FIXED 'simple'
     xlink:href CDATA #IMPLIED
   Used inside frame 

ipr

   Intellectual Property Rights details

   Content model (copyright?, owner?, note?)
   Used inside   frame 

copyright

   A copyright statement

   Content model %Text;
   Attributes    xml:lang NMTOKEN #IMPLIED
   Used inside   ipr 

owner

   Details of the copyright owner. The optional xlink:href attribute
   represents the owner's web page.

   Content model (name, address?, phone?, fax?, email?)
   Attributes    xmlns:xlink CDATA    #FIXED 'http://www.w3.org/1999/xlink'
                 xlink:type  (simple) #FIXED 'simple'
                 xlink:href  CDATA    #IMPLIED
   Used inside   ipr 

scene

   A description of the scene depicted in the frame

   Content model (occasion?, location?, description?, caption?,
   genre?, keywords?, content?, note?)
   Used inside frame 

caption

   A short descriptive caption for the photograph.

   Content model %Text;
   Attributes    xml:lang NMTOKEN #IMPLIED
   Used inside   scene 

genre

   The genre of the scene, e.g. portrait, landscape, sport, travel,
   macro etc.

   Content model %Text;
   Used inside   scene 

keywords

   Keywords relevant to the description of the scene.

   Content model %Text;
   Attributes    xml:lang NMTOKEN #IMPLIED
   Used inside   scene 

occasion

   A description of when the photograph was taken.

   Content model (date?, time?, event?, note?)
   Used inside   scene 

event

   A description of the event at which the photo was taken.

   Content model %Text;
   Attributes    xml:lang NMTOKEN #IMPLIED
   Used inside   occasion 

location

   A description of the location at which the photo was taken.

   Content model (country?, region?, subregion?, district?, city?,
   subcity?, subsubcity?, area?, road?, place?, description?,
   coordinates?, direction?, note?)
   Used inside scene 

country

   The country of the location.

   Content model %Text;
   Attributes    xml:lang NMTOKEN #IMPLIED
   Used inside   location 

region

   A region within the location. The type attribute may be used to
   specify the type of region (e.g. province, state, etc.). For
   example, in the US, typical usage would be to use the region
   element to represent a state, and the subregion or district
   element to represent a county, while in Italy a region element
   would represent an official region, and a subregion element would
   represent a province.

   Content model %Text;
   Attributes    type     CDATA   #IMPLIED
                 xml:lang NMTOKEN #IMPLIED
   Used inside   location 

subregion

   A subdivision of the region. The type attribute may be used to
   specify the type of subdivision.

   Content model %Text;
   Attributes    type     CDATA   #IMPLIED
                 xml:lang NMTOKEN #IMPLIED
   Used inside   location 

district

   A subdivision of the subregion, when necessary. May also be a
   direct subdivision of the region when the subregion is omitted.
   The type attribute may be used to specify the type of subdivision.

   Content model %Text;
   Attributes    type     CDATA   #IMPLIED
                 xml:lang NMTOKEN #IMPLIED
   Used inside   location 

city

   The city of the location.

   Content model %Text;
   Attributes    xml:lang NMTOKEN #IMPLIED
   Used inside   location 

subcity

   A subdivision of the city, such as a suburb, borough, or ward. The
   type attribute may be used to specify the type of subdivision
   (e.g. an arrondissement of Paris or a ku (ward) of Tokyo).

   Content model %Text;
   Attributes    type     CDATA   #IMPLIED
                 xml:lang NMTOKEN #IMPLIED
   Used inside   location 

subsubcity

   A subdivision of the subcity, when necessary (for example, Asakusa
   is a subdivision of Taito-ku, which is a ward of Tokyo). The type
   attribute may be used to specify the type of subdivision.

   Content model %Text;
   Attributes    type     CDATA   #IMPLIED
                 xml:lang NMTOKEN #IMPLIED
   Used inside   location 

area

   The area is intended for a level of detail below that of city,
   when a city is specified (e.g. `Central Park'), or below that of
   district when there is no relevant city (e.g. `Kruger National
   Park'). The type attribute may be used to specify the type of
   subdivision.

   Content model %Text;
   Attributes    type     CDATA   #IMPLIED
                 xml:lang NMTOKEN #IMPLIED
   Used inside   location 

road

   A road or city street.

   Content model %Text;
   Attributes    xml:lang NMTOKEN #IMPLIED
   Used inside   location 

place

   The place is intended for a level of detail below that of area
   (e.g. 'Conservatory Garden' when the area is 'Central Park', or
   'Skukuza Camp' when the area is `Kruger National Park').

   Content model %Text;
   Attributes    xml:lang NMTOKEN #IMPLIED
   Used inside   location 

coordinates

   The coordinates (latitude, longitude, altitude) of the location
   (obtained from a GPS device, for example).

   Content model (latitude?, longitude?, altitude?)
   Used inside   location 

latitude

   The location latitude.

   Content model %Latitude;
   Used inside   coordinates 

longitude

   The location longitude.

   Content model %Longitude;
   Used inside   coordinates 

altitude

   The location altitude (in metres by default). The optional
   reference attribute specifies whether the specified altitude is
   Above Mean Sea Level or Above Ground Level.

   Content model %Real;
   Attributes    units     CDATA      'm'
                 reference (amsl|agl) #IMPLIED
   Used inside   coordinates 

direction

   The direction in which the camera was pointed (i.e. from the
   viewpoint to the scene). If this element is present, the
   coordinates are considered to be of the scene viewpoint.

   Content model (azimuth?, elevation?)
   Used inside   location 

azimuth

   The compass direction of the scene from the viewpoint (e.g. "0"
   for North, "90" for East, etc.) in the range 0 to 360 (degrees).

   Content model %CompassDirection;
   Used inside   direction 

elevation

   The elevation angle of the scene from the viewpoint (e.g. "0" for
   horizontal, "90" for directly upwards, etc.) in the range -90 to
   90 (degrees).

   Content model %ElevationAngle;
   Used inside   direction 

content

   A detailed description of the scene content.

   Content model ((person | object)+ | segment+)
   Used inside   scene 

person

   The optional xlink:href attribute represents the person's web
   page.

   Content model (name, address?, phone?, fax?, email?)
   Attributes    xmlns:xlink CDATA    #FIXED 'http://www.w3.org/1999/xlink'
                 xlink:type  (simple) #FIXED 'simple'
                 xlink:href  CDATA    #IMPLIED
   Used inside   content | segment

object

   The optional type and xlink:href attributes represent the object
   type (e.g. building, vehicle) and a URL associated with the object
   (e.g. for a museum).

   Content model (name?, address?, note?)
   Attributes    type        CDATA    #IMPLIED
                 xmlns:xlink CDATA    #FIXED 'http://www.w3.org/1999/xlink'
                 xlink:type  (simple) #FIXED 'simple'
                 xlink:href  CDATA    #IMPLIED
   Used inside   content | segment

segment

   A segment of the scene. The label attribute allows identification
   of segments (e.g. foreground, upper-left, etc.

   Content model (segment | person | object)+
   Attributes    label CDATA #IMPLIED
   Used inside   content | segment

equipment

   A description of the camera and associated equipment.

   Content model (body?, body-attachment?, lens?, lens-attachment?,
   illumination?, support?, note?)
   Used inside frame 

body

   The camera body. While often fixed for a particular roll, it is
   included here since it forms part of the equipment, and is also
   not always fixed (e.g. APS mid-roll roll change).

   Content model (make?, model?, serial?, type?, note?)
   Used inside   equipment 

body-attachment

   An accessory attached to the body, e.g. motor-drive,
   multi-function back

   Content model (device+, note?)
   Used inside   equipment 

lens

   A lens.

   Content model (make?, model?, serial?, type?, note?)
   Used inside   equipment 

lens-attachment

   An accessory attached to the lens, e.g. teleconverter,
   extension-tube, diopter, filter, lens-hood.

   Content model (device+, note?)
   Used inside   equipment 

illumination

   An illumination source, e.g. flash.

   Content model (device+, note?)
   Used inside   equipment 

support

   A support, e.g. tripod leg set, ball-head, monopod.

   Content model (device*, note?)
   Used inside   equipment 

device

   A description of an item of equipment. The optional type attribute
   represents the device type (e.g. filter, ball-head, flash).

   Content model (make?, model?, serial?, note?)
   Attributes type CDATA #IMPLIED
   Used inside body-attachment | lens-attachment | illumination |
   support

model

   The model number/code of a photographic product.

   Content model %Text;
   Used inside   body | lens | device | hardware

serial

   The serial number/code of a photographic product.

   Content model %Text;
   Used inside   body | lens | device | hardware

exposure

   A description of film exposure and camera metering settings.

   Content model (aperture?, shutter?, exp-comp?, flash?,
   flash-comp?, rated-speed?, mode?, metering?, note?)
   Used inside frame 

aperture

   The lens aperture in f/-stops.

   Content model %Real;
   Used inside   exposure 

shutter

   The shutter speed in seconds.

   Content model %Fraction;
   Used inside   exposure 

exp-comp

   Exposure compensation in EV units.

   Content model %Real;
   Used inside   exposure 

flash

   Flash usage description.

   Content model %Text;
   Used inside   exposure 

flash-comp

   Flash exposure compensation in EV units.

   Content model %Real;
   Used inside   exposure 

rated-speed

   ISO speed setting of the camera (useful if different from the
   actual film ISO speed).

   Content model %PositiveInteger;
   Used inside   exposure 

mode

   Exposure mode (e.g. program, manual, shutter priority) for an
   automated camera.

   Content model %Text;
   Used inside   exposure | focus

metering

   Metering mode (e.g. matrix, centre-weighted, spot).

   Content model %Text;
   Used inside   exposure 

focus

   Information relevant to lens focus.

   Content model (focal-length?, focal-distance?, mode?, note?)
   Used inside   frame 

focal-length

   The lens focal length (useful when the lens doesn't have a fixed
   focal length), in millimeters by default.

   Content model %Real;
   Attributes    units CDATA 'mm'
   Used inside   focus 

focal-distance

   The focal distance (in metres by default).

   Content model %Real;
   Attributes    units CDATA 'm'
   Used inside   focus 

evaluation

   An evaluation of the merits of the frame. If a score attribute is
   specified, it represents the aggregate rating for the frame,
   independent of the score values for child elements; if it is not
   specified, the aggregate score should be computed as a weighted
   average of the score attributes of child elements.

   Content model (artistic?, technical?)
   Attributes    score CDATA #IMPLIED
   Used inside   frame 

artistic

   An evaluation of the artistic merits of the frame. The element
   content is a comment on the evaluation, and a numeric rating is
   provided by the score attribute.

   Content model %Text;
   Attributes    score CDATA #IMPLIED
   Used inside   evaluation 

technical

   An evaluation of the technical merits (focus, depth of field,
   etc.) of the frame. The element content is a comment on the
   evaluation, and a numeric rating is provided by the score
   attribute.

   Content model %Text;
   Attributes    score CDATA #IMPLIED
   Used inside   evaluation 

digimage

   The details of an individual digital image. The optional
   xlink:href attribute represents the location of the digital image
   file being described. The group-id attribute is the id of the
   roll, sheet, or digital element in which the corresponding
   photographic frame is described, the frame-id attribute is the id
   of that frame element, and the image-id provides an id number for
   the specific digital file representing that frame (e.g. two scans
   of the same film frame would have the same group-id and frame-id,
   but different image-id.

   Content model (properties?, history?, idximage?, note?)
   Attributes    xmlns:xlink CDATA    #FIXED 'http://www.w3.org/1999/xlink'
                 xlink:type  (simple) #FIXED 'simple'
                 xlink:href  CDATA    #IMPLIED
                 group-id    NMTOKEN  #IMPLIED
                 frame-id    NMTOKEN  #IMPLIED
                 image-id    NMTOKEN  #IMPLIED
   Used inside   photo | frame | digimage-set

digimage-set

   A container allowing the scope of defaults elements to be
   restricted to the contained set of digimage elements.

   Content model (defaults?, ((digimage | digimage-set)+,
   defaults?)+)
   Used inside photo | digimage-set

properties

   Details of the image properties.

   Content model (geometry?, bit-depth?, file-format?, icc-profile?,
   file-hash?, image-hash?, note?)
   Used inside defaults | digimage

geometry

   The pixel dimensions of the image.

   Content model (width, height)
   Used inside   properties 

bit-depth

   The bit depth of a sample, commonly 8 or 12 bits per colour band
   per pixel.

   Content model %PositiveInteger;
   Used inside   properties 

file-format

   The image format. This may either be described by using the std
   attribute within an empty element, or omitting the std attribute
   and describing the format within the element content. When
   possible, the former approach is preferred.

   Content model %Text;
   Attributes    std (bmp|jpeg|j2k|png|psd|tiff) #IMPLIED
   Used inside   properties 

icc-profile

   The ICC profile for the image colour space. The optional
   xlink:href refers to the relevant ICC profile specification file.

   Content model %Text;
   Attributes    xmlns:xlink CDATA    #FIXED 'http://www.w3.org/1999/xlink'
                 xlink:type  (simple) #FIXED 'simple'
                 xlink:href  CDATA    #IMPLIED
   Used inside   properties 

file-hash

   The result of a hash function applied to the image file. Not as
   reliable as the hash value of the image content (i.e. the raw
   decoded bitmap representation of the image, which is not dependent
   on the specific image file format), but may be faster to compute
   in some circumstances, and therefore useful for an initial match
   test.

   Content model %HexString;
   Attributes    type (md5|sha-256) 'md5'
   Used inside   properties | source

image-hash

   The result of a hash function applied to the image content. Useful
   for ensuring a correct match between the image description and the
   image data file.

   Content model %HexString;
   Attributes    type (md5|sha-256) 'md5'
   Used inside   properties | source

width

   The image width in pixels

   Content model %PositiveInteger;
   Used inside   geometry 

height

   The image height in pixels

   Content model %PositiveInteger;
   Used inside   geometry 

history

   Details of the creation and editing history of the image. More
   than one editing element is allowed so that multiple stages of
   editing, using different software, may be described.

   Content model (origin?, editing*, note?)
   Used inside   defaults | digimage

origin

   Details of the origin of the image; either a film scanner or
   digital camera, or source image(s) from which it is derived via
   editing (multiple source images are possible when, for example, a
   panoramic image is composed of a number of smaller images).

   Content model ((date?, time?, (scanner | camera)?) | source+)
   Used inside   history 

editing

   Details of the editing operations applied to the image.

   Content model (date?, time?, software?, operations?, note?)
   Used inside   history 

scanner

   The details of the scanner and scanning process.

   Content model (hardware?, software?, settings?, note?)
   Used inside   origin 

camera

   The details of the digital camera.

   Content model (hardware?, settings?, note?)
   Used inside   origin 

source

   A description of the source image to which editing operations were
   applied to derive the image described by the image element. The
   group-id and frame-id attributes should only be used when they
   differ from the respective values of the image element.

   Content model (file-hash?, image-hash?)
   Attributes    xmlns:xlink CDATA    #FIXED 'http://www.w3.org/1999/xlink'
                 xlink:type  (simple) #FIXED 'simple'
                 xlink:href  CDATA    #IMPLIED
                 image-id    NMTOKEN  #IMPLIED
                 group-id    NMTOKEN  #IMPLIED
                 frame-id    NMTOKEN  #IMPLIED
   Used inside   origin 

software

   The software used to perform the editing.

   Content model (publisher?, name?, version?, note?)
   Used inside   editing | scanner

operations

   The details of the editing operations.

   Content model operation+
   Used inside   editing 

hardware

   The details of the camera or scanner hardware.

   Content model (make?, model?, serial?, firmware?, note?)
   Used inside   scanner | camera

settings

   The details of the camera, scanner, or editing software settings.

   Content model (setting+, note?)
   Used inside   scanner | camera | operation

publisher

   The name of the company which designed the software.

   Content model %Text;
   Used inside   software 

version

   The version number of the software.

   Content model %Text;
   Used inside   software 

operation

   The details of an individual edit. In addition to the text
   description, further details may be specified by providing the
   relevant command line when editing was performed via a command
   shell, or settings for operations applied via a GUI.

   Content model (description?, (command | settings)?, note?)
   Used inside   operations 

command

   The command line used to apply the edit.

   Content model %Text;
   Used inside   operation 

firmware

   The firmware version.

   Content model %Text;
   Used inside   hardware 

setting

   The setting element describes software configuration settings
   during scanning. The name attribute should contain the name of the
   setting (e.g.multi-pass, ICE), and the element content represents
   the corresponding value.

   Content model %Text;
   Attributes    name  CDATA #REQUIRED
                 units CDATA #IMPLIED
   Used inside   settings 
