標準(プラグインに依存しない)メタデータ形式の仕様

プラグインに依存しない「javax_imageio_1.0」形式は、子ノード「chroma」、「compression」、「dimension」、「document」、「text」、「tile」、および「transparency」を持つ「javax_imageio_1.0」という名前のルート・ノードで構成されます。その形式は、次のDTDによって記述されます。

<!DOCTYPE "javax_imageio_1.0" [

  <!ELEMENT "javax_imageio_1.0" (Chroma?, Compression?, Data?, Dimension?, 
    Document?, Text?, Transparency?)>

    <!ELEMENT "Chroma" (ColorSpaceType?, NumChannels?, Gamma?, 
      BlackIsZero?, Palette?, BackgroundIndex?, BackgroundColor?)>
      <!-- Chroma (color) information --> 

      <!ELEMENT "ColorSpaceType" EMPTY>
        <!-- The raw color space of the image --> 
        <!ATTLIST "ColorSpaceType" "name" ("XYZ" | "Lab" | "Luv" | 
          "YCbCr" | "Yxy" | "YCCK" | "PhotoYCC" | "RGB" | "GRAY" | "HSV" | 
          "HLS" | "CMYK" | "CMY" | "2CLR" | "3CLR" | "4CLR" | "5CLR" | 
          "6CLR" | "7CLR" | "8CLR" | "9CLR" | "ACLR" | "BCLR" | "CCLR" | 
          "DCLR" | "ECLR" | "FCLR") #REQUIRED>

      <!ELEMENT "NumChannels" EMPTY>
        <!-- The number of channels in the raw image, including alpha --> 
        <!ATTLIST "NumChannels" "value" #CDATA #REQUIRED>
          <!-- Data type: List of Integer -->

      <!ELEMENT "Gamma" EMPTY>
        <!-- The image gamma --> 
        <!ATTLIST "Gamma" "value" #CDATA #REQUIRED>
          <!-- Data type: Float -->

      <!ELEMENT "BlackIsZero" EMPTY>
        <!-- True if smaller values represent darker shades --> 
        <!ATTLIST "BlackIsZero" "value" ("TRUE" | "FALSE") "TRUE">

      <!ELEMENT "Palette" (PaletteEntry)*>
        <!-- Palette-color information --> 

        <!ELEMENT "PaletteEntry" EMPTY>
          <!-- A palette entry --> 
          <!ATTLIST "PaletteEntry" "index" #CDATA #REQUIRED>
            <!-- The index of the palette entry --> 
            <!-- Data type: Integer -->
          <!ATTLIST "PaletteEntry" "red" #CDATA #REQUIRED>
            <!-- The red value for the palette entry --> 
            <!-- Data type: Integer -->
          <!ATTLIST "PaletteEntry" "green" #CDATA #REQUIRED>
            <!-- The green value for the palette entry --> 
            <!-- Data type: Integer -->
          <!ATTLIST "PaletteEntry" "blue" #CDATA #REQUIRED>
            <!-- The blue value for the palette entry --> 
            <!-- Data type: Integer -->
          <!ATTLIST "PaletteEntry" "alpha" #CDATA "255">
            <!-- The alpha value for the palette entry --> 
            <!-- Data type: Integer -->

      <!ELEMENT "BackgroundIndex" EMPTY>
        <!-- A palette index to be used as a background --> 
        <!ATTLIST "BackgroundIndex" "value" #CDATA #REQUIRED>
          <!-- Data type: Integer -->

      <!ELEMENT "BackgroundColor" EMPTY>
        <!-- An RGB triple to be used as a background --> 
        <!ATTLIST "BackgroundColor" "red" #CDATA #REQUIRED>
          <!-- The red background value --> 
          <!-- Data type: Integer -->
        <!ATTLIST "BackgroundColor" "green" #CDATA #REQUIRED>
          <!-- The green background value --> 
          <!-- Data type: Integer -->
        <!ATTLIST "BackgroundColor" "blue" #CDATA #REQUIRED>
          <!-- The blue background value --> 
          <!-- Data type: Integer -->

    <!ELEMENT "Compression" (CompressionTypeName?, Lossless?, 
      NumProgressiveScans?, BitRate?)>
      <!-- Compression information --> 

      <!ELEMENT "CompressionTypeName" EMPTY>
        <!-- The name of the compression scheme in use --> 
        <!ATTLIST "CompressionTypeName" "value" #CDATA #REQUIRED>
          <!-- Data type: String -->

      <!ELEMENT "Lossless" EMPTY>
        <!-- True if the compression scheme is lossless --> 
        <!ATTLIST "Lossless" "value" ("TRUE" | "FALSE") "TRUE">

      <!ELEMENT "NumProgressiveScans" EMPTY>
        <!-- The number of progressive scans used in the image encoding --> 
        <!ATTLIST "NumProgressiveScans" "value" #CDATA #REQUIRED>
          <!-- Data type: Integer -->

      <!ELEMENT "BitRate" EMPTY>
        <!-- The estimated bit rate of the compression scheme --> 
        <!ATTLIST "BitRate" "value" #CDATA #REQUIRED>
          <!-- Data type: Float -->

    <!ELEMENT "Data" (PlanarConfiguration?, SampleFormat?, BitsPerSample?, 
      SignificantBitsPerSample?, SampleMSB?)>
      <!-- Information on the image layout --> 

      <!ELEMENT "PlanarConfiguration" EMPTY>
        <!-- The organization of image samples in the stream --> 
        <!ATTLIST "PlanarConfiguration" "value" ("PixelInterleaved" | 
          "PlaneInterleaved" | "LineInterleaved" | "TileInterleaved")
           #REQUIRED>

      <!ELEMENT "SampleFormat" EMPTY>
        <!-- The numeric format of image samples --> 
        <!ATTLIST "SampleFormat" "value" ("SignedIntegral" | 
          "UnsignedIntegral" | "Real" | "Index") #REQUIRED>

      <!ELEMENT "BitsPerSample" EMPTY>
        <!-- The number of bits per sample --> 
        <!ATTLIST "BitsPerSample" "value" #CDATA #REQUIRED>
          <!-- A list of integers, one per channel --> 
          <!-- Data type: List of Integer -->
          <!-- Min length: 1 -->

      <!ELEMENT "SignificantBitsPerSample" EMPTY>
        <!-- The number of significant bits per sample --> 
        <!ATTLIST "SignificantBitsPerSample" "value" #CDATA #REQUIRED>
          <!-- A list of integers, one per channel --> 
          <!-- Data type: List of Integer -->
          <!-- Min length: 1 -->

      <!ELEMENT "SampleMSB" EMPTY>
        <!-- The position of the most significant bit of each sample --> 
        <!ATTLIST "SampleMSB" "value" #CDATA #REQUIRED>
          <!-- A list of integers, one per channel --> 
          <!-- Data type: List of Integer -->
          <!-- Min length: 1 -->

    <!ELEMENT "Dimension" (PixelAspectRatio?, ImageOrientation?, 
      HorizontalPixelSize?, VerticalPixelSize?, 
      HorizontalPhysicalPixelSpacing?, VerticalPhysicalPixelSpacing?, 
      HorizontalPosition?, VerticalPosition?, HorizontalPixelOffset?, 
      VerticalPixelOffset?, HorizontalScreenSize?, VerticalScreenSize?)>
      <!-- Dimension information --> 

      <!ELEMENT "PixelAspectRatio" EMPTY>
        <!-- The width of a pixel divided by its height --> 
        <!ATTLIST "PixelAspectRatio" "value" #CDATA #REQUIRED>
          <!-- Data type: Float -->

      <!ELEMENT "ImageOrientation" EMPTY>
        <!-- The desired orientation of the image in terms of flips and 
             counter-clockwise rotations --> 
        <!ATTLIST "ImageOrientation" "value" ("Normal" | "Rotate90" | 
          "Rotate180" | "Rotate270" | "FlipH" | "FlipV" | 
          "FlipHRotate90" | "FlipVRotate90") #REQUIRED>

      <!ELEMENT "HorizontalPixelSize" EMPTY>
        <!-- The width of a pixel, in millimeters, as it should be rendered 
             on media --> 
        <!ATTLIST "HorizontalPixelSize" "value" #CDATA #REQUIRED>
          <!-- Data type: Float -->

      <!ELEMENT "VerticalPixelSize" EMPTY>
        <!-- The height of a pixel, in millimeters, as it should be 
             rendered on media --> 
        <!ATTLIST "VerticalPixelSize" "value" #CDATA #REQUIRED>
          <!-- Data type: Float -->

      <!ELEMENT "HorizontalPhysicalPixelSpacing" EMPTY>
        <!-- The horizontal distance in the subject of the image, in 
             millimeters, represented by one pixel at the center of the 
             image --> 
        <!ATTLIST "HorizontalPhysicalPixelSpacing" "value" #CDATA #REQUIRED>
          <!-- Data type: Float -->

      <!ELEMENT "VerticalPhysicalPixelSpacing" EMPTY>
        <!-- The vertical distance in the subject of the image, in 
             millimeters, represented by one pixel at the center of the 
             image --> 
        <!ATTLIST "VerticalPhysicalPixelSpacing" "value" #CDATA #REQUIRED>
          <!-- Data type: Float -->

      <!ELEMENT "HorizontalPosition" EMPTY>
        <!-- The horizontal position, in millimeters, where the image 
             should be rendered on media --> 
        <!ATTLIST "HorizontalPosition" "value" #CDATA #REQUIRED>
          <!-- Data type: Float -->

      <!ELEMENT "VerticalPosition" EMPTY>
        <!-- The vertical position, in millimeters, where the image should 
             be rendered on media --> 
        <!ATTLIST "VerticalPosition" "value" #CDATA #REQUIRED>
          <!-- Data type: Float -->

      <!ELEMENT "HorizontalPixelOffset" EMPTY>
        <!-- The horizontal position, in pixels, where the image should be 
             rendered onto a raster display --> 
        <!ATTLIST "HorizontalPixelOffset" "value" #CDATA #REQUIRED>
          <!-- Data type: Integer -->

      <!ELEMENT "VerticalPixelOffset" EMPTY>
        <!-- The vertical position, in pixels, where the image should be 
             rendered onto a raster display --> 
        <!ATTLIST "VerticalPixelOffset" "value" #CDATA #REQUIRED>
          <!-- Data type: Integer -->

      <!ELEMENT "HorizontalScreenSize" EMPTY>
        <!-- The width, in pixels, of the raster display into which the 
             image should be rendered --> 
        <!ATTLIST "HorizontalScreenSize" "value" #CDATA #REQUIRED>
          <!-- Data type: Integer -->

      <!ELEMENT "VerticalScreenSize" EMPTY>
        <!-- The height, in pixels, of the raster display into which the 
             image should be rendered --> 
        <!ATTLIST "VerticalScreenSize" "value" #CDATA #REQUIRED>
          <!-- Data type: Integer -->

    <!ELEMENT "Document" (FormatVersion?, SubimageInterpretation?, 
      ImageCreationTime?, ImageModificationTime?)>
      <!-- Document information --> 

      <!ELEMENT "FormatVersion" EMPTY>
        <!-- The version of the format used by the stream --> 
        <!ATTLIST "FormatVersion" "value" #CDATA #REQUIRED>
          <!-- Data type: String -->

      <!ELEMENT "SubimageInterpretation" EMPTY>
        <!-- The interpretation of this image in relation to the other 
             images stored in the same stream --> 
        <!ATTLIST "SubimageInterpretation" "value" ("Standalone" | 
          "SinglePage" | "FullResolution" | "ReducedResolution" | 
          "PyramidLayer" | "Preview" | "VolumeSlice" | "ObjectView" | 
          "Panorama" | "AnimationFrame" | "TransparencyMask" | 
          "CompositingLayer" | "SpectralSlice" | "Unknown") #REQUIRED>

      <!ELEMENT "ImageCreationTime" EMPTY>
        <!-- The time of image creation --> 
        <!ATTLIST "ImageCreationTime" "year" #CDATA #REQUIRED>
          <!-- The full year (e.g., 1967, not 67) --> 
          <!-- Data type: Integer -->
        <!ATTLIST "ImageCreationTime" "month" #CDATA #REQUIRED>
          <!-- The month, with January = 1 --> 
          <!-- Data type: Integer -->
          <!-- Min value: 1 (inclusive) -->
          <!-- Max value: 12 (inclusive) -->
        <!ATTLIST "ImageCreationTime" "day" #CDATA #REQUIRED>
          <!-- The day of the month --> 
          <!-- Data type: Integer -->
          <!-- Min value: 1 (inclusive) -->
          <!-- Max value: 31 (inclusive) -->
        <!ATTLIST "ImageCreationTime" "hour" #CDATA "0">
          <!-- The hour from 0 to 23 --> 
          <!-- Data type: Integer -->
          <!-- Min value: 0 (inclusive) -->
          <!-- Max value: 23 (inclusive) -->
        <!ATTLIST "ImageCreationTime" "minute" #CDATA "0">
          <!-- The minute from 0 to 59 --> 
          <!-- Data type: Integer -->
          <!-- Min value: 0 (inclusive) -->
          <!-- Max value: 59 (inclusive) -->
        <!ATTLIST "ImageCreationTime" "second" #CDATA "0">
          <!-- The second from 0 to 60 (60 = leap second) --> 
          <!-- Data type: Integer -->
          <!-- Min value: 0 (inclusive) -->
          <!-- Max value: 60 (inclusive) -->

      <!ELEMENT "ImageModificationTime" EMPTY>
        <!-- The time of the last image modification --> 
        <!ATTLIST "ImageModificationTime" "year" #CDATA #REQUIRED>
          <!-- The full year (e.g., 1967, not 67) --> 
          <!-- Data type: Integer -->
        <!ATTLIST "ImageModificationTime" "month" #CDATA #REQUIRED>
          <!-- The month, with January = 1 --> 
          <!-- Data type: Integer -->
          <!-- Min value: 1 (inclusive) -->
          <!-- Max value: 12 (inclusive) -->
        <!ATTLIST "ImageModificationTime" "day" #CDATA #REQUIRED>
          <!-- The day of the month --> 
          <!-- Data type: Integer -->
          <!-- Min value: 1 (inclusive) -->
          <!-- Max value: 31 (inclusive) -->
        <!ATTLIST "ImageModificationTime" "hour" #CDATA "0">
          <!-- The hour from 0 to 23 --> 
          <!-- Data type: Integer -->
          <!-- Min value: 0 (inclusive) -->
          <!-- Max value: 23 (inclusive) -->
        <!ATTLIST "ImageModificationTime" "minute" #CDATA "0">
          <!-- The minute from 0 to 59 --> 
          <!-- Data type: Integer -->
          <!-- Min value: 0 (inclusive) -->
          <!-- Max value: 59 (inclusive) -->
        <!ATTLIST "ImageModificationTime" "second" #CDATA "0">
          <!-- The second from 0 to 60 (60 = leap second) --> 
          <!-- Data type: Integer -->
          <!-- Min value: 0 (inclusive) -->
          <!-- Max value: 60 (inclusive) -->

    <!ELEMENT "Text" (TextEntry)*>
      <!-- Text information --> 

      <!ELEMENT "TextEntry" EMPTY>
        <!-- A text entry --> 
        <!ATTLIST "TextEntry" "keyword" #CDATA #IMPLIED>
          <!-- A keyword associated with the text entry --> 
          <!-- Data type: String -->
        <!ATTLIST "TextEntry" "value" #CDATA #REQUIRED>
          <!-- the text entry --> 
          <!-- Data type: String -->
        <!ATTLIST "TextEntry" "language" #CDATA #IMPLIED>
          <!-- The language of the text --> 
          <!-- Data type: String -->
        <!ATTLIST "TextEntry" "encoding" #CDATA #IMPLIED>
          <!-- The encoding of the text --> 
          <!-- Data type: String -->
        <!ATTLIST "TextEntry" "compression" ("none" | "lzw" | "zip" | 
          "bzip" | "other") "none">
          <!-- The method used to compress the text --> 

    <!ELEMENT "Transparency" (Alpha?, TransparentIndex?, 
      TransparentColor?, TileTransparencies?, TileOpacities?)>
      <!-- Transparency information --> 

      <!ELEMENT "Alpha" EMPTY>
        <!-- The type of alpha information contained in the image --> 
        <!ATTLIST "Alpha" "value" ("none" | "premultiplied" | 
          "nonpremultiplied") "none">

      <!ELEMENT "TransparentIndex" EMPTY>
        <!-- A palette index to be treated as transparent --> 
        <!ATTLIST "TransparentIndex" "value" #CDATA #REQUIRED>
          <!-- Data type: Integer -->

      <!ELEMENT "TransparentColor" EMPTY>
        <!-- An RGB color to be treated as transparent --> 
        <!ATTLIST "TransparentColor" "value" #CDATA #REQUIRED>
          <!-- Data type: List of Integer -->

      <!ELEMENT "TileTransparencies" (TransparentTile)*>
        <!-- A list of completely transparent tiles --> 

        <!ELEMENT "TransparentTile" EMPTY>
          <!-- The index of a completely transparent tile --> 
          <!ATTLIST "TransparentTile" "x" #CDATA #REQUIRED>
            <!-- The tile's X index --> 
            <!-- Data type: Integer -->
          <!ATTLIST "TransparentTile" "y" #CDATA #REQUIRED>
            <!-- The tile's Y index --> 
            <!-- Data type: Integer -->

      <!ELEMENT "TileOpacities" (OpaqueTile)*>
        <!-- A list of completely opaque tiles --> 

        <!ELEMENT "OpaqueTile" EMPTY>
          <!-- The index of a completely opaque tile --> 
          <!ATTLIST "OpaqueTile" "x" #CDATA #REQUIRED>
            <!-- The tile's X index --> 
            <!-- Data type: Integer -->
          <!ATTLIST "OpaqueTile" "y" #CDATA #REQUIRED>
            <!-- The tile's Y index --> 
            <!-- Data type: Integer -->
]>