--- old/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/tiff_metadata.html 2017-10-23 13:51:09.000000000 -0700 +++ new/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/tiff_metadata.html 2017-10-23 13:51:09.000000000 -0700 @@ -1,8 +1,11 @@ - - + + + + TIFF Metadata Format Specification and Usage Notes + -TIFF Metadata Format Specification and Usage Notes - + - +

TIFF Metadata Format Specification and Usage Notes

-

-TIFF Metadata Format Specification and Usage Notes -

- -

-Reading Images
- +Reading Images

- Writing Images
- - Native Stream Metadata Format
Native Image Metadata Format -

-

Reading Images

+

Reading Images

TIFF images are read by an ImageReader which may be controlled by its public interface as well as via a supplied @@ -95,14 +79,14 @@ -

Color Conversion

+

Color Conversion

If the source image data have photometric type CIE L*a*b* or YCbCr, and the destination color space type is RGB, then the source image data will be automatically converted to RGB using an internal color converter.

-

Color Spaces

+

Color Spaces

The raw color space assigned by default, i.e., in the absence of a user-supplied ImageTypeSpecifier, @@ -112,7 +96,7 @@
  • A color space created from the ICC Profile metadata field if it is present and compatible with the image data layout.
  • -
  • sRGB if the image is monochrome/bilevel +
  • sRGB if the image is monochrome/bilevel (a two-level color map is created internally).
  • sRGB if the image is palette-color.
  • Linear RGB if the image has three samples per pixel, has photometric type @@ -136,7 +120,7 @@ sample.
  • -

    The normalized color coordinate transformations +

    The normalized color coordinate transformations used for the default CMYK color space are defined as follows:

    -

    -

    The generic color space used when no other color space +

    The generic color space used when no other color space can be inferred is provided merely to enable the data to be loaded. It is not intended to provide accurate conversions of any kind.

    @@ -171,7 +154,7 @@ supplied to the reader and should be derived from a color space which is correct for the data in question.

    -

    ICC Profiles

    +

    ICC Profiles

    If an ICC profile is contained in the image metadata ( @@ -203,7 +186,6 @@ ImageReadParam.setDestinationType.
  • Pass the parameter object to the appropriate read method.
  • -

    If the inferred color space not based on the ICC Profile field is compatible with the ICC profile-based color space, then a second @@ -214,7 +196,7 @@ more than one type, the first one will be based on the ICC profile and the second on the inferred color space.

    -

    Metadata Issues

    +

    Metadata Issues

    By default all recognized fields in the TIFF image file directory (IFD) are loaded into the native image metadata object. Which fields are loaded may be @@ -244,7 +226,7 @@ object returned by the TIFF reader using the TIFFDirectory.createFromMetadata method.

    -
    +
    Mapping of TIFF Native Image Metadata to the Standard Metadata Format
    The derivation of standard metadata format @@ -252,7 +234,6 @@ elements from TIFF native image metadata is given in the following table. -

    @@ -261,9 +242,9 @@ +"GRAY"; RGB, PaletteColor => "RGB"; CMYK => "CMYK"; +YCbCr => "YCbCr"; +CIELab, ICCLab => "Lab". @@ -271,7 +252,7 @@ - + @@ -279,28 +260,28 @@ - +Deflate => "Deflate"; Exif JPEG => "JPEG". - + - + - @@ -310,8 +291,8 @@ - + @@ -343,9 +324,9 @@ - + @@ -357,24 +338,23 @@ Artist, HostComputer, InkNames, Copyright: /Text/TextEntry@keyword = field name, /Text/TextEntry@value = field value.
    -Example: TIFF Software field => /Text/TextEntry@keyword = "Software", +Example: TIFF Software field => /Text/TextEntry@keyword = "Software", /Text/TextEntry@value = Name and version number of the software package(s) used to create the image. - +
    Standard Metadata Element
    /Chroma/ColorSpaceType@name PhotometricInterpretation: WhiteIsZero, BlackIsZero, TransparencyMask = -"GRAY"; RGB, PaletteColor => "RGB"; CMYK => "CMYK"; -YCbCr => "YCbCr"; -CIELab, ICCLab => "Lab".
    /Chroma/NumChannels@value
    /Chroma/BlackIsZero@value"TRUE" <=> PhotometricInterpretation => WhiteIsZero"TRUE" <=> PhotometricInterpretation => WhiteIsZero
    /Chroma/Palette
    /Compression/CompressionTypeName@valueCompression: Uncompressed => "none"; CCITT 1D => "CCITT +Compression: Uncompressed => "none"; CCITT 1D => "CCITT RLE"; -Group 3 Fax => "CCITT T.4"; Group 4 Fax => "CCITT T.6"; -LZW => "LZW"; -JPEG => "Old JPEG"; New JPEG => "JPEG"; Zlib =>> "ZLib"; PackBits => +Group 3 Fax => "CCITT T.4"; Group 4 Fax => "CCITT T.6"; +LZW => "LZW"; +JPEG => "Old JPEG"; New JPEG => "JPEG"; Zlib =>> "ZLib"; PackBits => "PackBits"; -Deflate => "Deflate"; Exif JPEG => "JPEG".
    /Compression/Lossless@valueCompression: JPEG or New JPEG => "FALSE"; otherwise "TRUE".Compression: JPEG or New JPEG => "FALSE"; otherwise "TRUE".
    /Data/PlanarConfiguration@valueChunky => "PixelInterleaved"; Planar => "PlaneInterleaved".Chunky => "PixelInterleaved"; Planar => "PlaneInterleaved".
    /Data/SampleFormat@valuePhotometricInterpretation PaletteColor => "Index"; -SampleFormat unsigned integer data => "UnsignedIntegral"; -SampleFormat two's complement signed integer data => "SignedIntegral"; -SampleFormat IEEE floating point data => "Real"; +PhotometricInterpretation PaletteColor => "Index"; +SampleFormat unsigned integer data => "UnsignedIntegral"; +SampleFormat two's complement signed integer data => "SignedIntegral"; +SampleFormat IEEE floating point data => "Real"; otherwise element not emitted.
    /Data/SampleMSB@valueFillOrder: left-to-right => space-separated list of BitsPerSample-1; -right-to-left => space-separated list of 0s.FillOrder: left-to-right => space-separated list of BitsPerSample-1; +right-to-left => space-separated list of 0s.
    /Dimension/PixelAspectRatio@value
    /Document/SubimageInterpretation@valueNewSubFileType: transparency => "TransparencyMask"; -reduced-resolution => "ReducedResolution"; -single page => "SinglePage".NewSubFileType: transparency => "TransparencyMask"; +reduced-resolution => "ReducedResolution"; +single page => "SinglePage".
    /Document/ImageCreationTime@value
    /Transparency/Alpha@valueExtraSamples: associated alpha => "premultiplied"; -unassociated alpha => "nonpremultiplied".ExtraSamples: associated alpha => "premultiplied"; +unassociated alpha => "nonpremultiplied".
    -

    -

    Reading Exif Images

    +

    Reading Exif Images

    The TIFF reader may be used to read an uncompressed Exif image or the -contents of the APP1 marker segment of a compressed Exif image. +contents of the APP1 marker segment of a compressed Exif image. -
    Reading Uncompressed Exif Images
    +
    Reading Uncompressed Exif Images
    An uncompressed Exif image is a one- or two-page uncompressed TIFF image with a specific ordering of its IFD and image data content. Each pixel @@ -406,12 +386,12 @@ stream and not as a thumbnail, i.e., tiffReader.hasThumbnails(0) will return false. -
    Reading Compressed Exif Images
    +
    Reading Compressed Exif Images
    A compressed Exif image is a 3-band ISO/IEC 10918-1 baseline DCT JPEG stream -with an inserted APP1 marker segment. The parameters of the marker +with an inserted APP1 marker segment. The parameters of the marker segment after the length are the 6-byte sequence -{'E', 'x', 'i', 'f', 0x00, 0x00} +{'E', 'x', 'i', 'f', 0x00, 0x00} followed by a complete TIFF stream. The embedded TIFF stream contains a primary IFD describing the JPEG image optionally followed by a thumbnail IFD and compressed or uncompressed thumbnail image data. Note that the embedded TIFF @@ -419,12 +399,12 @@ nor any descriptive fields which duplicate information found in the JPEG stream itself. -

    The parameter content of the APP1 marker segment may be obtained +

    The parameter content of the APP1 marker segment may be obtained from the user object of the associated Node in a -javax_imageio_jpeg_image_1.0 native image metadata tree extracted +javax_imageio_jpeg_image_1.0 native image metadata tree extracted from the image metadata object returned by the JPEG reader. This APP1 Exif node will be a child of the node named "markerSequence" and will -have name unknown and an attribute named MarkerTag with +have name unknown and an attribute named MarkerTag with integral value 0xE1 (String value "225"). The user object of this node will be a byte array which starts with the six bytes {'E', 'x', 'i', 'f', '0', '0'}. @@ -472,9 +452,8 @@ images. Calling tiffReader.read(0, readParam) will throw an exception as the primary image in the embedded TIFF stream is always empty; the primary image should be obtained using the JPEG reader itself. -

    -

    Writing Images

    +

    Writing Images

    TIFF images are written by a ImageWriter which may be controlled by its public interface as well as via a supplied @@ -482,7 +461,7 @@ by the getDefaultWriteParam() method of the TIFF ImageWriter, the canWriteTiles() and canWriteCompressed() methods will return true; the canOffsetTiles() and -canWriteProgressive() methods will return false.

    +canWriteProgressive() methods will return false. The TIFF writer supports many optional capabilities including writing tiled images, inserting images, writing or inserting empty images, and replacing image @@ -497,12 +476,12 @@ compression is being used and strips are being written, the number of rows per strip is rounded to a multiple of 8 times the maximum MCU over both dimensions.

    - + -

    Compression

    +

    Compression

    The compression type may be set via the setCompressionType() method of the ImageWriteParam after setting the compression mode to @@ -594,21 +573,21 @@

    If ZLib/Deflate or JPEG compression is used, the compression quality may be set. For ZLib/Deflate the supplied floating point quality value is -rescaled to the range [1, 9] and truncated to an integer +rescaled to the range [1, 9] and truncated to an integer to derive the Deflate compression level. For JPEG the floating point quality value is passed directly to the JPEG writer plug-in which interprets it in the usual way.

    -

    Color Conversion

    +

    Color Conversion

    If the source image data color space type is RGB, and the destination photometric type is CIE L*a*b* or YCbCr, then the source image data will be automatically converted from RGB using an internal color converter.

    -

    ICC Profiles

    +

    ICC Profiles

    -An ICC Profile field will be written if either: +An ICC Profile field will be written if either: -

    Metadata Issues

    +

    Metadata Issues

    Some behavior of the writer is affected by or may affect the contents of the image metadata which may be supplied by the user. -

    For bilevel images, the FillOrder, and T4Options +

    For bilevel images, the FillOrder, and T4Options fields affect the output data. The data will be filled right-to-left if -FillOrder is present with a value of 2 +FillOrder is present with a value of 2 (BaselineTIFFTagSet.FILL_ORDER_RIGHT_TO_LEFT) -and will be filled left-to-right otherwise. The value of T4Options +and will be filled left-to-right otherwise. The value of T4Options specifies whether the data should be 1D- or 2D-encoded and whether EOL padding should be used.

    -

    For all images the value of the RowsPerStrip field is used +

    For all images the value of the RowsPerStrip field is used to the set the number of rows per strip if the image is not tiled. The default number of rows per strip is either 8 or the number of rows which would fill no more than 8 kilobytes, whichever is larger.

    -

    For all images the tile dimensions may be set using the TileWidth -and TileLength field values if the tiling mode is +

    For all images the tile dimensions may be set using the TileWidth +and TileLength field values if the tiling mode is ImageWriteParam.MODE_COPY_FROM_METADATA. If this mode is set but the fields are not, their respective default values are the image width and height.

    -

    When using JPEG-in-TIFF compression, a JPEGTables field will be +

    When using JPEG-in-TIFF compression, a JPEGTables field will be written to the IFD and abbreviated JPEG streams to each strip or tile if and -only if a JPEGTables field is contained in the metadata object -provided to the writer. If the contents of the JPEGTables field is +only if a JPEGTables field is contained in the metadata object +provided to the writer. If the contents of the JPEGTables field is a valid tables-only JPEG stream, then it will be used; otherwise the contents of the field will be replaced with default visually lossless tables. If no -such JPEGTables field is present in the metadata, then no -JPEGTables field will be written to the output and each strip or +such JPEGTables field is present in the metadata, then no +JPEGTables field will be written to the output and each strip or tile will be written as a separate, self-contained JPEG stream.

    When using Deflate/ZLib or LZW compression, if the image has 8 bits per sample, a horizontal differencing predictor will be used if the -Predictor field is present with a value of 2 +Predictor field is present with a value of 2 (BaselineTIFFTagSet.PREDICTOR_HORIZONTAL_DIFFERENCING). If prediction is so requested but the image does not have 8 bits per sample the field will be reset to have the value 1 @@ -669,30 +648,30 @@

    Some fields may be added or modified:

    @@ -700,24 +679,23 @@

    Some fields may be removed:

    -

    Other fields present in the supplied metadata are uninterpreted and will be written as supplied.

    @@ -737,7 +715,7 @@ IIOMetadata object so obtained may then be passed to the TIFF writer.

    -
    +
    Mapping of the Standard Metadata Format to TIFF Native Image Metadata
    The derivation of TIFF native image metadata @@ -745,7 +723,6 @@ javax_imageio_1.0 is given in the following table. -

    @@ -756,10 +733,10 @@ PhotometricInterpretation +=> WhiteIsZero; "GRAY" and /Document/SubimageInterpretation@value = +"TransparencyMask" => TransparencyMask; "RGB" and /Chroma/Palette present => +PaletteColor; "GRAY" => BlackIsZero; "RGB" => RGB; "YCbCr" => YCbCr; +"CMYK" => CMYK; "Lab" => CIELab. @@ -771,21 +748,21 @@ - + - + - @@ -794,8 +771,8 @@ - @@ -828,9 +805,9 @@ - + @@ -845,29 +822,28 @@ - +
    TIFF Field /Chroma/ColorSpaceType@name: "GRAY" and /Chroma/BlackIsZero@value = "FALSE" -=> WhiteIsZero; "GRAY" and /Document/SubimageInterpretation@value = -"TransparencyMask" => TransparencyMask; "RGB" and /Chroma/Palette present => -PaletteColor; "GRAY" => BlackIsZero; "RGB" => RGB; "YCbCr" => YCbCr; -"CMYK" => CMYK; "Lab" => CIELab.
    SamplesPerPixel
    Compression/Compression/CompressionTypeName@value: "none" => Uncompressed; -"CCITT RLE" => CCITT 1D; "CCITT T.4" => Group 3 Fax; "CCITT T.6" => Group 4 -Fax; "LZW" => LZW; "Old JPEG" => JPEG; "JPEG" => New JPEG; "ZLib" => ZLib; -"PackBits" => PackBits; "Deflate" => Deflate./Compression/CompressionTypeName@value: "none" => Uncompressed; +"CCITT RLE" => CCITT 1D; "CCITT T.4" => Group 3 Fax; "CCITT T.6" => Group 4 +Fax; "LZW" => LZW; "Old JPEG" => JPEG; "JPEG" => New JPEG; "ZLib" => ZLib; +"PackBits" => PackBits; "Deflate" => Deflate.
    PlanarConfiguration/Data/PlanarConfiguration@value: "PixelInterleaved" => Chunky; -"PlaneInterleaved" => Planar./Data/PlanarConfiguration@value: "PixelInterleaved" => Chunky; +"PlaneInterleaved" => Planar.
    SampleFormat/Data/SampleFormat@value: "SignedIntegral" => two's complement signed -integer data; "UnsignedIntegral" => unsigned integer data; "Real" => -IEEE floating point data; "Index" => unsigned integer data. +/Data/SampleFormat@value: "SignedIntegral" => two's complement signed +integer data; "UnsignedIntegral" => unsigned integer data; "Real" => +IEEE floating point data; "Index" => unsigned integer data.
    FillOrder/Data/SampleMSB@value: if all values in space-separated list are 0s => -right-to-left; otherwise => left-to-right. +/Data/SampleMSB@value: if all values in space-separated list are 0s => +right-to-left; otherwise => left-to-right.
    NewSubFileType/Document/SubimageInterpretation@value: "TransparencyMask" => -transparency mask; "ReducedResolution" => reduced-resolution; -"SinglePage" => single page./Document/SubimageInterpretation@value: "TransparencyMask" => +transparency mask; "ReducedResolution" => reduced-resolution; +"SinglePage" => single page.
    DateTime
    ExtraSamples/Transparency/Alpha@value: "premultiplied" => associated alpha, count 1; -"nonpremultiplied" => unassociated alpha, count 1./Transparency/Alpha@value: "premultiplied" => associated alpha, count 1; +"nonpremultiplied" => unassociated alpha, count 1.
    -

    -

    Writing Exif Images

    +

    Writing Exif Images

    The TIFF writer may be used to write an uncompressed Exif image or the -contents of the APP1 marker segment of a compressed Exif image. +contents of the APP1 marker segment of a compressed Exif image. -
    Writing Uncompressed Exif Images
    +
    Writing Uncompressed Exif Images
    When writing a sequence of images each image is normally recorded as {IFD, IFD Value, Image Data}. The Exif specification requires that an uncompressed Exif image be structured as follows: +
      -
    1. Image File Header
    2. Primary IFD
    3. Primary IFD Value
    4. @@ -927,9 +903,9 @@ } -
      Writing Compressed Exif Images
      +
      Writing Compressed Exif Images
      -The structure of the embedded TIFF stream in the APP1 segment of a +The structure of the embedded TIFF stream in the APP1 segment of a compressed Exif image is identical to the uncompressed Exif image structure except that there are no primary image data, i.e., the primary IFD does not refer to any image data. @@ -1015,7 +991,7 @@ Node tree = jpegImageMetadata.getAsTree(nativeFormat); NodeList children = tree.getChildNodes(); int numChildren = children.getLength(); - for (int i = 0; i < numChildren; i++) { + for (int i = 0; i < numChildren; i++) { Node child = children.item(i); if (child.getNodeName().equals("markerSequence")) { child.appendChild(app1Node); @@ -1034,7 +1010,7 @@ and written to the JPEG stream when the primary image is written using the JPEG writer. -

      Stream Metadata

      +

      Stream Metadata

      The DTD for the TIFF native stream metadata format is as follows: @@ -1044,14 +1020,14 @@ <!ELEMENT "javax_imageio_tiff_stream_1.0" (ByteOrder)> <!ELEMENT "ByteOrder" EMPTY> - <!-- The stream byte order --> + <!-- The stream byte order --> <!ATTLIST "ByteOrder" "value" #CDATA #REQUIRED> - <!-- One of "BIG_ENDIAN" or "LITTLE_ENDIAN" --> + <!-- One of "BIG_ENDIAN" or "LITTLE_ENDIAN" --> <!-- Data type: String --> ]> -

      Image Metadata

      +

      Image Metadata

      The DTD for the TIFF native image metadata format is as follows: @@ -1061,140 +1037,140 @@ <!ELEMENT "javax_imageio_tiff_image_1.0" (TIFFIFD)*> <!ELEMENT "TIFFIFD" (TIFFField | TIFFIFD)*> - <!-- An IFD (directory) containing fields --> + <!-- An IFD (directory) containing fields --> <!ATTLIST "TIFFIFD" "tagSets" #CDATA #REQUIRED> <!-- Data type: String --> <!ATTLIST "TIFFIFD" "parentTagNumber" #CDATA #IMPLIED> - <!-- The tag number of the field pointing to this IFD --> + <!-- The tag number of the field pointing to this IFD --> <!-- Data type: Integer --> <!ATTLIST "TIFFIFD" "parentTagName" #CDATA #IMPLIED> - <!-- A mnemonic name for the field pointing to this IFD, if known - --> + <!-- A mnemonic name for the field pointing to this IFD, if known + --> <!-- Data type: String --> <!ELEMENT "TIFFField" (TIFFBytes | TIFFAsciis | TIFFShorts | TIFFSShorts | TIFFLongs | TIFFSLongs | TIFFRationals | TIFFSRationals | TIFFFloats | TIFFDoubles | TIFFUndefined)> - <!-- A field containing data --> + <!-- A field containing data --> <!ATTLIST "TIFFField" "number" #CDATA #REQUIRED> - <!-- The tag number asociated with the field --> + <!-- The tag number asociated with the field --> <!-- Data type: String --> <!ATTLIST "TIFFField" "name" #CDATA #IMPLIED> - <!-- A mnemonic name associated with the field, if known --> + <!-- A mnemonic name associated with the field, if known --> <!-- Data type: String --> <!ELEMENT "TIFFBytes" (TIFFByte)*> - <!-- A sequence of TIFFByte nodes --> + <!-- A sequence of TIFFByte nodes --> <!ELEMENT "TIFFByte" EMPTY> - <!-- An integral value between 0 and 255 --> + <!-- An integral value between 0 and 255 --> <!ATTLIST "TIFFByte" "value" #CDATA #IMPLIED> - <!-- The value --> + <!-- The value --> <!-- Data type: String --> <!ATTLIST "TIFFByte" "description" #CDATA #IMPLIED> - <!-- A description, if available --> + <!-- A description, if available --> <!-- Data type: String --> <!ELEMENT "TIFFAsciis" (TIFFAscii)*> - <!-- A sequence of TIFFAscii nodes --> + <!-- A sequence of TIFFAscii nodes --> <!ELEMENT "TIFFAscii" EMPTY> - <!-- A String value --> + <!-- A String value --> <!ATTLIST "TIFFAscii" "value" #CDATA #IMPLIED> - <!-- The value --> + <!-- The value --> <!-- Data type: String --> <!ELEMENT "TIFFShorts" (TIFFShort)*> - <!-- A sequence of TIFFShort nodes --> + <!-- A sequence of TIFFShort nodes --> <!ELEMENT "TIFFShort" EMPTY> - <!-- An integral value between 0 and 65535 --> + <!-- An integral value between 0 and 65535 --> <!ATTLIST "TIFFShort" "value" #CDATA #IMPLIED> - <!-- The value --> + <!-- The value --> <!-- Data type: String --> <!ATTLIST "TIFFShort" "description" #CDATA #IMPLIED> - <!-- A description, if available --> + <!-- A description, if available --> <!-- Data type: String --> <!ELEMENT "TIFFSShorts" (TIFFSShort)*> - <!-- A sequence of TIFFSShort nodes --> + <!-- A sequence of TIFFSShort nodes --> <!ELEMENT "TIFFSShort" EMPTY> - <!-- An integral value between -32768 and 32767 --> + <!-- An integral value between -32768 and 32767 --> <!ATTLIST "TIFFSShort" "value" #CDATA #IMPLIED> - <!-- The value --> + <!-- The value --> <!-- Data type: String --> <!ATTLIST "TIFFSShort" "description" #CDATA #IMPLIED> - <!-- A description, if available --> + <!-- A description, if available --> <!-- Data type: String --> <!ELEMENT "TIFFLongs" (TIFFLong)*> - <!-- A sequence of TIFFLong nodes --> + <!-- A sequence of TIFFLong nodes --> <!ELEMENT "TIFFLong" EMPTY> - <!-- An integral value between 0 and 4294967295 --> + <!-- An integral value between 0 and 4294967295 --> <!ATTLIST "TIFFLong" "value" #CDATA #IMPLIED> - <!-- The value --> + <!-- The value --> <!-- Data type: String --> <!ATTLIST "TIFFLong" "description" #CDATA #IMPLIED> - <!-- A description, if available --> + <!-- A description, if available --> <!-- Data type: String --> <!ELEMENT "TIFFSLongs" (TIFFSLong)*> - <!-- A sequence of TIFFSLong nodes --> + <!-- A sequence of TIFFSLong nodes --> <!ELEMENT "TIFFSLong" EMPTY> - <!-- An integral value between -2147483648 and 2147482647 --> + <!-- An integral value between -2147483648 and 2147482647 --> <!ATTLIST "TIFFSLong" "value" #CDATA #IMPLIED> - <!-- The value --> + <!-- The value --> <!-- Data type: String --> <!ATTLIST "TIFFSLong" "description" #CDATA #IMPLIED> - <!-- A description, if available --> + <!-- A description, if available --> <!-- Data type: String --> <!ELEMENT "TIFFRationals" (TIFFRational)*> - <!-- A sequence of TIFFRational nodes --> + <!-- A sequence of TIFFRational nodes --> <!ELEMENT "TIFFRational" EMPTY> - <!-- A rational value consisting of an unsigned numerator and - denominator --> + <!-- A rational value consisting of an unsigned numerator and + denominator --> <!ATTLIST "TIFFRational" "value" #CDATA #IMPLIED> - <!-- The numerator and denominator, separated by a slash --> + <!-- The numerator and denominator, separated by a slash --> <!-- Data type: String --> <!ELEMENT "TIFFSRationals" (TIFFSRational)*> - <!-- A sequence of TIFFSRational nodes --> + <!-- A sequence of TIFFSRational nodes --> <!ELEMENT "TIFFSRational" EMPTY> - <!-- A rational value consisting of a signed numerator and - denominator --> + <!-- A rational value consisting of a signed numerator and + denominator --> <!ATTLIST "TIFFSRational" "value" #CDATA #IMPLIED> - <!-- The numerator and denominator, separated by a slash --> + <!-- The numerator and denominator, separated by a slash --> <!-- Data type: String --> <!ELEMENT "TIFFFloats" (TIFFFloat)*> - <!-- A sequence of TIFFFloat nodes --> + <!-- A sequence of TIFFFloat nodes --> <!ELEMENT "TIFFFloat" EMPTY> - <!-- A single-precision floating-point value --> + <!-- A single-precision floating-point value --> <!ATTLIST "TIFFFloat" "value" #CDATA #IMPLIED> - <!-- The value --> + <!-- The value --> <!-- Data type: String --> <!ELEMENT "TIFFDoubles" (TIFFDouble)*> - <!-- A sequence of TIFFDouble nodes --> + <!-- A sequence of TIFFDouble nodes --> <!ELEMENT "TIFFDouble" EMPTY> - <!-- A double-precision floating-point value --> + <!-- A double-precision floating-point value --> <!ATTLIST "TIFFDouble" "value" #CDATA #IMPLIED> - <!-- The value --> + <!-- The value --> <!-- Data type: String --> <!ELEMENT "TIFFUndefined" EMPTY> - <!-- Uninterpreted byte data --> + <!-- Uninterpreted byte data --> <!ATTLIST "TIFFUndefined" "value" #CDATA #IMPLIED> - <!-- A list of comma-separated byte values --> + <!-- A list of comma-separated byte values --> <!-- Data type: String --> ]>