BMP Metadata Format Specification

The XML schema for the native image metadata format is as follows:
<?xml version="1.0" encoding="UTF-8"?>

<!-- Schema for BMP native image metadata format. -->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://javax.imageio.plugins"
            targetNamespace="http://javax.imageio.plugins">

  <!-- Coordinates of a point in the CIE XYZ color space. -->
  <xsd:complexType name="XYZPoint">
    <xsd:sequence>
      <xsd:element name="X" type="xsd:double"/>
      <xsd:element name="Y" type="xsd:double"/>
      <xsd:element name="Z" type="xsd:double"/>
    </xsd:sequence>
  </xsd:complexType>

  <!-- BMP Schema 1.0 root element. -->
  <xsd:element name="javax_imageio_bmp_1.0">
    <xsd:complexType>
      <xsd:sequence>

        <!-- BMP version string -->
        <xsd:element name="BMPVersion" type="xsd:string"/>

        <!-- Bitmap width -->
        <xsd:element name="Width" type="xsd:unsignedInt"/>

        <!-- Bitmap height -->
        <xsd:element name="Height" type="xsd:unsignedInt"/>

        <!-- Number of bits per pixel -->
        <xsd:element name="BitsPerPixel" type="xsd:unsignedShort"/>

        <!-- Compression type -->
        <xsd:element name="Compression" type="xsd:unsignedInt" minOccurs="0"/>

        <!-- Image size in bytes -->
        <xsd:element name="ImageSize" type="xsd:unsignedInt" minOccurs="0"/>

	<!-- Resolution in pixels per unit distance -->
        <xsd:element name="PixelsPerMeter" minOccurs="0">
	  <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="X" type="xsd:unsignedInt"/>
              <xsd:element name="Y" type="xsd:unsignedInt"/>
            </xsd:sequence>
	  </xsd:complexType>
        </xsd:element> <!-- PixelsPerMeter -->


	<!-- Number of color indexes in the color table actually used -->
        <xsd:element name="ColorsUsed" type="xsd:unsignedInt" minOccurs="0"/>

	<!-- Number of color indexes considered important for display -->
        <xsd:element name="ColorsImportant" type="xsd:unsignedInt"
		     minOccurs="0"/>

	<!-- Color masks; present for BI_BITFIELDS compression only -->
        <xsd:element name="Mask" minOccurs="0">
	  <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="Red" type="xsd:unsignedInt"/>
              <xsd:element name="Green" type="xsd:unsignedInt"/>
              <xsd:element name="Blue" type="xsd:unsignedInt"/>
              <xsd:element name="Alpha" type="xsd:unsignedInt" minOccurs="0"/>
            </xsd:sequence>
	  </xsd:complexType>
	</xsd:element>

        <!-- Color space  -->
        <xsd:element name="ColorSpaceType" type="xsd:unsignedInt" 
		     minOccurs="0"/>

	<!-- CIE XYZ for the LCS_CALIBRATED_RGB color space -->
        <xsd:element name="CIEXYZEndpoints" minOccurs="0">
	  <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="Red" type="XYZPoint"/>
              <xsd:element name="Green" type="XYZPoint"/>
              <xsd:element name="Blue" type="XYZPoint"/>
            </xsd:sequence>
	  </xsd:complexType>
        </xsd:element>

	<!-- Gamma values for the LCS_CALIBRATED_RGB color space -->
        <xsd:element name="Gamma" minOccurs="0">
	  <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="Red" type="xsd:unsignedInt"/>
              <xsd:element name="Green" type="xsd:unsignedInt"/>
              <xsd:element name="Blue" type="xsd:unsignedInt"/>
            </xsd:sequence>
	  </xsd:complexType>
	</xsd:element>

	<!-- Rendering intent -->
        <xsd:element name="Intent" type="xsd:unsignedInt" minOccurs="0"/>

	<!-- The image colormap -->
        <xsd:element name="Palette" minOccurs="0">
	  <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="PaletteEntry">
	        <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="Red" type="xsd:unsignedByte"/>
                    <xsd:element name="Green" type="xsd:unsignedByte"/>
                    <xsd:element name="Blue" type="xsd:unsignedByte"/>
                    <xsd:element name="Alpha" type="xsd:unsignedByte" minOccurs="0"/>
                  </xsd:sequence>
	        </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
	  </xsd:complexType>
	</xsd:element>

      </xsd:sequence>
    </xsd:complexType>
  </xsd:element> <!-- bmp_image_1.0 -->

</xsd:schema>
@since 1.5