[24107] | 1 | #------------------------------------------------------------------------------
|
---|
| 2 | # File: XMP2.pl
|
---|
| 3 | #
|
---|
| 4 | # Description: Additional XMP schema definitions
|
---|
| 5 | #
|
---|
| 6 | # Revisions: 10/12/2008 - P. Harvey Created
|
---|
| 7 | #
|
---|
| 8 | # References: 1) PLUS - http://ns.useplus.org/
|
---|
| 9 | # 2) PRISM - http://www.prismstandard.org/
|
---|
| 10 | # 3) http://www.portfoliofaq.com/pfaq/v7mappings.htm
|
---|
| 11 | # 5) http://creativecommons.org/technology/xmp
|
---|
| 12 | # --> changed to http://wiki.creativecommons.org/Companion_File_metadata_specification (2007/12/21)
|
---|
| 13 | # 6) http://www.optimasc.com/products/fileid/xmp-extensions.pdf
|
---|
| 14 | # 9) http://www.w3.org/TR/SVG11/
|
---|
| 15 | #------------------------------------------------------------------------------
|
---|
| 16 |
|
---|
| 17 | package Image::ExifTool::XMP;
|
---|
| 18 |
|
---|
| 19 | use strict;
|
---|
| 20 | use Image::ExifTool qw(:Utils);
|
---|
| 21 | use Image::ExifTool::XMP;
|
---|
| 22 |
|
---|
| 23 | # structure definitions
|
---|
| 24 | my %sCuePointParam = (
|
---|
| 25 | STRUCT_NAME => 'CuePointParam',
|
---|
| 26 | NAMESPACE => 'xmpDM',
|
---|
| 27 | key => { },
|
---|
| 28 | value => { },
|
---|
| 29 | );
|
---|
| 30 | my %sMarker = (
|
---|
| 31 | STRUCT_NAME => 'Marker',
|
---|
| 32 | NAMESPACE => 'xmpDM',
|
---|
| 33 | comment => { },
|
---|
| 34 | duration => { },
|
---|
| 35 | location => { },
|
---|
| 36 | name => { },
|
---|
| 37 | startTime => { },
|
---|
| 38 | target => { },
|
---|
| 39 | type => { },
|
---|
| 40 | # added Oct 2008
|
---|
| 41 | cuePointParams => { Struct => \%sCuePointParam, List => 'Seq' },
|
---|
| 42 | cuePointType=> { },
|
---|
| 43 | probability => { Writable => 'real' },
|
---|
| 44 | speaker => { },
|
---|
| 45 | );
|
---|
| 46 | my %sTime = (
|
---|
| 47 | STRUCT_NAME => 'Time',
|
---|
| 48 | NAMESPACE => 'xmpDM',
|
---|
| 49 | scale => { Writable => 'rational' },
|
---|
| 50 | value => { Writable => 'integer' },
|
---|
| 51 | );
|
---|
| 52 | my %sTimecode = (
|
---|
| 53 | STRUCT_NAME => 'Timecode',
|
---|
| 54 | NAMESPACE => 'xmpDM',
|
---|
| 55 | timeFormat => {
|
---|
| 56 | PrintConv => {
|
---|
| 57 | '24Timecode' => '24 fps',
|
---|
| 58 | '25Timecode' => '25 fps',
|
---|
| 59 | '2997DropTimecode' => '29.97 fps (drop)',
|
---|
| 60 | '2997NonDropTimecode' => '29.97 fps (non-drop)',
|
---|
| 61 | '30Timecode' => '30 fps',
|
---|
| 62 | '50Timecode' => '50 fps',
|
---|
| 63 | '5994DropTimecode' => '59.94 fps (drop)',
|
---|
| 64 | '5994NonDropTimecode' => '59.94 fps (non-drop)',
|
---|
| 65 | '60Timecode' => '60 fps',
|
---|
| 66 | '23976Timecode' => '23.976 fps',
|
---|
| 67 | },
|
---|
| 68 | },
|
---|
| 69 | timeValue => { },
|
---|
| 70 | value => { Writable => 'integer' },
|
---|
| 71 | );
|
---|
| 72 |
|
---|
| 73 | # XMP Dynamic Media schema properties (xmpDM)
|
---|
| 74 | %Image::ExifTool::XMP::xmpDM = (
|
---|
| 75 | %xmpTableDefaults,
|
---|
| 76 | GROUPS => { 1 => 'XMP-xmpDM', 2 => 'Image' },
|
---|
| 77 | NAMESPACE => 'xmpDM',
|
---|
| 78 | NOTES => 'XMP Dynamic Media schema tags.',
|
---|
| 79 | absPeakAudioFilePath=> { },
|
---|
| 80 | album => { },
|
---|
| 81 | altTapeName => { },
|
---|
| 82 | altTimecode => { Struct => \%sTimecode },
|
---|
| 83 | artist => { Avoid => 1, Groups => { 2 => 'Author' } },
|
---|
| 84 | audioModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
---|
| 85 | audioSampleRate => { Writable => 'integer' },
|
---|
| 86 | audioSampleType => {
|
---|
| 87 | PrintConv => {
|
---|
| 88 | '8Int' => '8-bit integer',
|
---|
| 89 | '16Int' => '16-bit integer',
|
---|
| 90 | '24Int' => '24-bit integer',
|
---|
| 91 | '32Int' => '32-bit integer',
|
---|
| 92 | '32Float' => '32-bit float',
|
---|
| 93 | 'Compressed' => 'Compressed',
|
---|
| 94 | 'Packed' => 'Packed',
|
---|
| 95 | 'Other' => 'Other',
|
---|
| 96 | },
|
---|
| 97 | },
|
---|
| 98 | audioChannelType => {
|
---|
| 99 | PrintConv => {
|
---|
| 100 | 'Mono' => 'Mono',
|
---|
| 101 | 'Stereo' => 'Stereo',
|
---|
| 102 | '5.1' => '5.1',
|
---|
| 103 | '7.1' => '7.1',
|
---|
| 104 | '16 Channel' => '16 Channel',
|
---|
| 105 | 'Other' => 'Other',
|
---|
| 106 | },
|
---|
| 107 | },
|
---|
| 108 | audioCompressor => { },
|
---|
| 109 | beatSpliceParams => {
|
---|
| 110 | Struct => {
|
---|
| 111 | STRUCT_NAME => 'BeatSpliceStretch',
|
---|
| 112 | NAMESPACE => 'xmpDM',
|
---|
| 113 | riseInDecibel => { Writable => 'real' },
|
---|
| 114 | riseInTimeDuration => { Struct => \%sTime },
|
---|
| 115 | useFileBeatsMarker => { Writable => 'boolean' },
|
---|
| 116 | },
|
---|
| 117 | },
|
---|
| 118 | cameraAngle => { },
|
---|
| 119 | cameraLabel => { },
|
---|
| 120 | cameraModel => { },
|
---|
| 121 | cameraMove => { },
|
---|
| 122 | client => { },
|
---|
| 123 | comment => { Name => 'DMComment' },
|
---|
| 124 | composer => { Groups => { 2 => 'Author' } },
|
---|
| 125 | contributedMedia => {
|
---|
| 126 | Struct => {
|
---|
| 127 | STRUCT_NAME => 'Media',
|
---|
| 128 | NAMESPACE => 'xmpDM',
|
---|
| 129 | duration => { Struct => \%sTime },
|
---|
| 130 | managed => { Writable => 'boolean' },
|
---|
| 131 | path => { },
|
---|
| 132 | startTime => { Struct => \%sTime },
|
---|
| 133 | track => { },
|
---|
| 134 | webStatement=> { },
|
---|
| 135 | },
|
---|
| 136 | List => 'Bag',
|
---|
| 137 | },
|
---|
| 138 | copyright => { Avoid => 1, Groups => { 2 => 'Author' } }, # (deprecated)
|
---|
| 139 | director => { },
|
---|
| 140 | directorPhotography => { },
|
---|
| 141 | duration => { Struct => \%sTime },
|
---|
| 142 | engineer => { },
|
---|
| 143 | fileDataRate => { Writable => 'rational' },
|
---|
| 144 | genre => { },
|
---|
| 145 | good => { Writable => 'boolean' },
|
---|
| 146 | instrument => { },
|
---|
| 147 | introTime => { Struct => \%sTime },
|
---|
| 148 | key => {
|
---|
| 149 | PrintConvColumns => 3,
|
---|
| 150 | PrintConv => {
|
---|
| 151 | 'C' => 'C', 'C#' => 'C#', 'D' => 'D', 'D#' => 'D#',
|
---|
| 152 | 'E' => 'E', 'F' => 'F', 'F#' => 'F#', 'G' => 'G',
|
---|
| 153 | 'G#' => 'G#', 'A' => 'A', 'A#' => 'A#', 'B' => 'B',
|
---|
| 154 | },
|
---|
| 155 | },
|
---|
| 156 | logComment => { },
|
---|
| 157 | loop => { Writable => 'boolean' },
|
---|
| 158 | numberOfBeats => { Writable => 'real' },
|
---|
| 159 | markers => { Struct => \%sMarker, List => 'Seq' },
|
---|
| 160 | metadataModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
---|
| 161 | outCue => { Struct => \%sTime },
|
---|
| 162 | projectName => { },
|
---|
| 163 | projectRef => {
|
---|
| 164 | Struct => {
|
---|
| 165 | STRUCT_NAME => 'ProjectLink',
|
---|
| 166 | NAMESPACE => 'xmpDM',
|
---|
| 167 | path => { },
|
---|
| 168 | type => {
|
---|
| 169 | PrintConv => {
|
---|
| 170 | movie => 'Movie',
|
---|
| 171 | still => 'Still Image',
|
---|
| 172 | audio => 'Audio',
|
---|
| 173 | custom => 'Custom',
|
---|
| 174 | },
|
---|
| 175 | },
|
---|
| 176 | },
|
---|
| 177 | },
|
---|
| 178 | pullDown => {
|
---|
| 179 | PrintConvColumns => 2,
|
---|
| 180 | PrintConv => {
|
---|
| 181 | 'WSSWW' => 'WSSWW', 'SSWWW' => 'SSWWW',
|
---|
| 182 | 'SWWWS' => 'SWWWS', 'WWWSS' => 'WWWSS',
|
---|
| 183 | 'WWSSW' => 'WWSSW', 'WWWSW' => 'WWWSW',
|
---|
| 184 | 'WWSWW' => 'WWSWW', 'WSWWW' => 'WSWWW',
|
---|
| 185 | 'SWWWW' => 'SWWWW', 'WWWWS' => 'WWWWS',
|
---|
| 186 | },
|
---|
| 187 | },
|
---|
| 188 | relativePeakAudioFilePath => { },
|
---|
| 189 | relativeTimestamp => { Struct => \%sTime },
|
---|
| 190 | releaseDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
---|
| 191 | resampleParams => {
|
---|
| 192 | Struct => {
|
---|
| 193 | STRUCT_NAME => 'ResampleStretch',
|
---|
| 194 | NAMESPACE => 'xmpDM',
|
---|
| 195 | quality => { PrintConv => { Low => 'Low', Medium => 'Medium', High => 'High' } },
|
---|
| 196 | },
|
---|
| 197 | },
|
---|
| 198 | scaleType => {
|
---|
| 199 | PrintConv => {
|
---|
| 200 | Major => 'Major',
|
---|
| 201 | Minor => 'Minor',
|
---|
| 202 | Both => 'Both',
|
---|
| 203 | Neither => 'Neither',
|
---|
| 204 | },
|
---|
| 205 | },
|
---|
| 206 | scene => { Avoid => 1 },
|
---|
| 207 | shotDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
---|
| 208 | shotDay => { },
|
---|
| 209 | shotLocation => { },
|
---|
| 210 | shotName => { },
|
---|
| 211 | shotNumber => { },
|
---|
| 212 | shotSize => { },
|
---|
| 213 | speakerPlacement=> { },
|
---|
| 214 | startTimecode => { Struct => \%sTimecode },
|
---|
| 215 | stretchMode => {
|
---|
| 216 | PrintConv => {
|
---|
| 217 | 'Fixed length' => 'Fixed length',
|
---|
| 218 | 'Time-Scale' => 'Time-Scale',
|
---|
| 219 | 'Resample' => 'Resample',
|
---|
| 220 | 'Beat Splice' => 'Beat Splice',
|
---|
| 221 | 'Hybrid' => 'Hybrid',
|
---|
| 222 | },
|
---|
| 223 | },
|
---|
| 224 | takeNumber => { Writable => 'integer' },
|
---|
| 225 | tapeName => { },
|
---|
| 226 | tempo => { Writable => 'real' },
|
---|
| 227 | timeScaleParams => {
|
---|
| 228 | Struct => {
|
---|
| 229 | STRUCT_NAME => 'TimeScaleStretch',
|
---|
| 230 | NAMESPACE => 'xmpDM',
|
---|
| 231 | frameOverlappingPercentage => { Writable => 'real' },
|
---|
| 232 | frameSize => { Writable => 'real' },
|
---|
| 233 | quality => { PrintConv => { Low => 'Low', Medium => 'Medium', High => 'High' } },
|
---|
| 234 | },
|
---|
| 235 | },
|
---|
| 236 | timeSignature => {
|
---|
| 237 | PrintConvColumns => 3,
|
---|
| 238 | PrintConv => {
|
---|
| 239 | '2/4' => '2/4', '3/4' => '3/4', '4/4' => '4/4',
|
---|
| 240 | '5/4' => '5/4', '7/4' => '7/4', '6/8' => '6/8',
|
---|
| 241 | '9/8' => '9/8', '12/8'=> '12/8', 'other' => 'other',
|
---|
| 242 | },
|
---|
| 243 | },
|
---|
| 244 | trackNumber => { Writable => 'integer' },
|
---|
| 245 | Tracks => {
|
---|
| 246 | Struct => {
|
---|
| 247 | STRUCT_NAME => 'Track',
|
---|
| 248 | NAMESPACE => 'xmpDM',
|
---|
| 249 | frameRate => { },
|
---|
| 250 | markers => { Struct => \%sMarker, List => 'Seq' },
|
---|
| 251 | trackName => { },
|
---|
| 252 | trackType => { },
|
---|
| 253 | },
|
---|
| 254 | List => 'Bag',
|
---|
| 255 | },
|
---|
| 256 | videoAlphaMode => {
|
---|
| 257 | PrintConv => {
|
---|
| 258 | 'straight' => 'Straight',
|
---|
| 259 | 'pre-multiplied', => 'Pre-multiplied',
|
---|
| 260 | 'none' => 'None',
|
---|
| 261 | },
|
---|
| 262 | },
|
---|
| 263 | videoAlphaPremultipleColor => { Struct => \%sColorant },
|
---|
| 264 | videoAlphaUnityIsTransparent => { Writable => 'boolean' },
|
---|
| 265 | videoColorSpace => {
|
---|
| 266 | PrintConv => {
|
---|
| 267 | 'sRGB' => 'sRGB',
|
---|
| 268 | 'CCIR-601' => 'CCIR-601',
|
---|
| 269 | 'CCIR-709' => 'CCIR-709',
|
---|
| 270 | },
|
---|
| 271 | },
|
---|
| 272 | videoCompressor => { },
|
---|
| 273 | videoFieldOrder => {
|
---|
| 274 | PrintConv => {
|
---|
| 275 | Upper => 'Upper',
|
---|
| 276 | Lower => 'Lower',
|
---|
| 277 | Progressive => 'Progressive',
|
---|
| 278 | },
|
---|
| 279 | },
|
---|
| 280 | videoFrameRate => { },
|
---|
| 281 | videoFrameSize => { Struct => \%sDimensions },
|
---|
| 282 | videoModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
---|
| 283 | videoPixelAspectRatio => { Writable => 'rational' },
|
---|
| 284 | videoPixelDepth => {
|
---|
| 285 | PrintConv => {
|
---|
| 286 | '8Int' => '8-bit integer',
|
---|
| 287 | '16Int' => '16-bit integer',
|
---|
| 288 | '24Int' => '24-bit integer',
|
---|
| 289 | '32Int' => '32-bit integer',
|
---|
| 290 | '32Float' => '32-bit float',
|
---|
| 291 | 'Other' => 'Other',
|
---|
| 292 | },
|
---|
| 293 | },
|
---|
| 294 | );
|
---|
| 295 |
|
---|
| 296 | #------------------------------------------------------------------------------
|
---|
| 297 | # PLUS vocabulary conversions
|
---|
| 298 | my %plusVocab = (
|
---|
| 299 | ValueConv => '$val =~ s{http://ns.useplus.org/ldf/vocab/}{}; $val',
|
---|
| 300 | ValueConvInv => '"http://ns.useplus.org/ldf/vocab/$val"',
|
---|
| 301 | );
|
---|
| 302 |
|
---|
| 303 | # PLUS License Data Format 1.2.0 structures
|
---|
| 304 | # (this seems crazy to me -- why did they define different ID/Name structures
|
---|
| 305 | # for each field rather than just re-using the same structure?)
|
---|
| 306 | my %plusLicensee = (
|
---|
| 307 | STRUCT_NAME => 'Licensee',
|
---|
| 308 | NAMESPACE => 'plus',
|
---|
| 309 | TYPE => 'plus:LicenseeDetail',
|
---|
| 310 | LicenseeID => { },
|
---|
| 311 | LicenseeName=> { },
|
---|
| 312 | );
|
---|
| 313 | my %plusEndUser = (
|
---|
| 314 | STRUCT_NAME => 'EndUser',
|
---|
| 315 | NAMESPACE => 'plus',
|
---|
| 316 | TYPE => 'plus:EndUserDetail',
|
---|
| 317 | EndUserID => { },
|
---|
| 318 | EndUserName => { },
|
---|
| 319 | );
|
---|
| 320 | my %plusLicensor = (
|
---|
| 321 | STRUCT_NAME => 'Licensor',
|
---|
| 322 | NAMESPACE => 'plus',
|
---|
| 323 | TYPE => 'plus:LicensorDetail',
|
---|
| 324 | LicensorID => { },
|
---|
| 325 | LicensorName => { },
|
---|
| 326 | LicensorStreetAddress => { },
|
---|
| 327 | LicensorExtendedAddress => { },
|
---|
| 328 | LicensorCity => { },
|
---|
| 329 | LicensorRegion => { },
|
---|
| 330 | LicensorPostalCode => { },
|
---|
| 331 | LicensorCountry => { },
|
---|
| 332 | LicensorTelephoneType1 => {
|
---|
| 333 | %plusVocab,
|
---|
| 334 | PrintConv => {
|
---|
| 335 | 'work' => 'Work',
|
---|
| 336 | 'cell' => 'Cell',
|
---|
| 337 | 'fax' => 'FAX',
|
---|
| 338 | 'home' => 'Home',
|
---|
| 339 | 'pager' => 'Pager',
|
---|
| 340 | },
|
---|
| 341 | },
|
---|
| 342 | LicensorTelephone1 => { },
|
---|
| 343 | LicensorTelephoneType2 => {
|
---|
| 344 | %plusVocab,
|
---|
| 345 | PrintConv => {
|
---|
| 346 | 'work' => 'Work',
|
---|
| 347 | 'cell' => 'Cell',
|
---|
| 348 | 'fax' => 'FAX',
|
---|
| 349 | 'home' => 'Home',
|
---|
| 350 | 'pager' => 'Pager',
|
---|
| 351 | },
|
---|
| 352 | },
|
---|
| 353 | LicensorTelephone2 => { },
|
---|
| 354 | LicensorEmail => { },
|
---|
| 355 | LicensorURL => { },
|
---|
| 356 | );
|
---|
| 357 | my %plusCopyrightOwner = (
|
---|
| 358 | STRUCT_NAME => 'CopyrightOwner',
|
---|
| 359 | NAMESPACE => 'plus',
|
---|
| 360 | TYPE => 'plus:CopyrightOwnerDetail',
|
---|
| 361 | CopyrightOwnerID => { },
|
---|
| 362 | CopyrightOwnerName => { },
|
---|
| 363 | );
|
---|
| 364 | my %plusImageCreator = (
|
---|
| 365 | STRUCT_NAME => 'ImageCreator',
|
---|
| 366 | NAMESPACE => 'plus',
|
---|
| 367 | TYPE => 'plus:ImageCreatorDetail',
|
---|
| 368 | ImageCreatorID => { },
|
---|
| 369 | ImageCreatorName => { },
|
---|
| 370 | );
|
---|
| 371 | my %plusImageSupplier = (
|
---|
| 372 | STRUCT_NAME => 'ImageSupplier',
|
---|
| 373 | NAMESPACE => 'plus',
|
---|
| 374 | TYPE => 'plus:ImageSupplierDetail',
|
---|
| 375 | ImageSupplierID => { },
|
---|
| 376 | ImageSupplierName => { },
|
---|
| 377 | );
|
---|
| 378 |
|
---|
| 379 | # PLUS License Data Format 1.2.0 (plus) (ref 1)
|
---|
| 380 | %Image::ExifTool::XMP::plus = (
|
---|
| 381 | %xmpTableDefaults,
|
---|
| 382 | GROUPS => { 0 => 'XMP', 1 => 'XMP-plus', 2 => 'Author' },
|
---|
| 383 | NAMESPACE => 'plus',
|
---|
| 384 | NOTES => q{
|
---|
| 385 | PLUS License Data Format 1.2.0 schema tags. Note that all
|
---|
| 386 | controlled-vocabulary tags in this table (ie. tags with a fixed set of
|
---|
| 387 | values) have raw values which begin with "http://ns.useplus.org/ldf/vocab/",
|
---|
| 388 | but to reduce clutter this prefix has been removed from the values shown
|
---|
| 389 | below. (see L<http://ns.useplus.org/>)
|
---|
| 390 | },
|
---|
| 391 | Version => { Name => 'PLUSVersion' },
|
---|
| 392 | Licensee => {
|
---|
| 393 | Struct => \%plusLicensee,
|
---|
| 394 | List => 'Seq',
|
---|
| 395 | },
|
---|
| 396 | LicenseeLicenseeID => { Flat => 1, Name => 'LicenseeID' },
|
---|
| 397 | LicenseeLicenseeName => { Flat => 1, Name => 'LicenseeName' },
|
---|
| 398 | EndUser => {
|
---|
| 399 | Struct => \%plusEndUser,
|
---|
| 400 | List => 'Seq',
|
---|
| 401 | },
|
---|
| 402 | EndUserEndUserID => { Flat => 1, Name => 'EndUserID' },
|
---|
| 403 | EndUserEndUserName => { Flat => 1, Name => 'EndUserName' },
|
---|
| 404 | Licensor => {
|
---|
| 405 | Struct => \%plusLicensor,
|
---|
| 406 | List => 'Seq',
|
---|
| 407 | },
|
---|
| 408 | LicensorLicensorID => { Flat => 1, Name => 'LicensorID' },
|
---|
| 409 | LicensorLicensorName => { Flat => 1, Name => 'LicensorName' },
|
---|
| 410 | LicensorLicensorStreetAddress => { Flat => 1, Name => 'LicensorStreetAddress' },
|
---|
| 411 | LicensorLicensorExtendedAddress => { Flat => 1, Name => 'LicensorExtendedAddress' },
|
---|
| 412 | LicensorLicensorCity => { Flat => 1, Name => 'LicensorCity' },
|
---|
| 413 | LicensorLicensorRegion => { Flat => 1, Name => 'LicensorRegion' },
|
---|
| 414 | LicensorLicensorPostalCode => { Flat => 1, Name => 'LicensorPostalCode' },
|
---|
| 415 | LicensorLicensorCountry => { Flat => 1, Name => 'LicensorCountry' },
|
---|
| 416 | LicensorLicensorTelephoneType1 => { Flat => 1, Name => 'LicensorTelephoneType1' },
|
---|
| 417 | LicensorLicensorTelephone1 => { Flat => 1, Name => 'LicensorTelephone1' },
|
---|
| 418 | LicensorLicensorTelephoneType2 => { Flat => 1, Name => 'LicensorTelephoneType2' },
|
---|
| 419 | LicensorLicensorTelephone2 => { Flat => 1, Name => 'LicensorTelephone2' },
|
---|
| 420 | LicensorLicensorEmail => { Flat => 1, Name => 'LicensorEmail' },
|
---|
| 421 | LicensorLicensorURL => { Flat => 1, Name => 'LicensorURL' },
|
---|
| 422 | LicensorNotes => { Writable => 'lang-alt' },
|
---|
| 423 | MediaSummaryCode => { },
|
---|
| 424 | LicenseStartDate => { %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 425 | LicenseEndDate => { %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 426 | MediaConstraints => { Writable => 'lang-alt' },
|
---|
| 427 | RegionConstraints => { Writable => 'lang-alt' },
|
---|
| 428 | ProductOrServiceConstraints => { Writable => 'lang-alt' },
|
---|
| 429 | ImageFileConstraints => {
|
---|
| 430 | List => 'Bag',
|
---|
| 431 | %plusVocab,
|
---|
| 432 | PrintConv => {
|
---|
| 433 | 'IF-MFN' => 'Maintain File Name',
|
---|
| 434 | 'IF-MID' => 'Maintain ID in File Name',
|
---|
| 435 | 'IF-MMD' => 'Maintain Metadata',
|
---|
| 436 | 'IF-MFT' => 'Maintain File Type',
|
---|
| 437 | },
|
---|
| 438 | },
|
---|
| 439 | ImageAlterationConstraints => {
|
---|
| 440 | List => 'Bag',
|
---|
| 441 | %plusVocab,
|
---|
| 442 | PrintConv => {
|
---|
| 443 | 'AL-CRP' => 'No Cropping',
|
---|
| 444 | 'AL-FLP' => 'No Flipping',
|
---|
| 445 | 'AL-RET' => 'No Retouching',
|
---|
| 446 | 'AL-CLR' => 'No Colorization',
|
---|
| 447 | 'AL-DCL' => 'No De-Colorization',
|
---|
| 448 | 'AL-MRG' => 'No Merging',
|
---|
| 449 | },
|
---|
| 450 | },
|
---|
| 451 | ImageDuplicationConstraints => {
|
---|
| 452 | %plusVocab,
|
---|
| 453 | PrintConv => {
|
---|
| 454 | 'DP-NDC' => 'No Duplication Constraints',
|
---|
| 455 | 'DP-LIC' => 'Duplication Only as Necessary Under License',
|
---|
| 456 | 'DP-NOD' => 'No Duplication',
|
---|
| 457 | },
|
---|
| 458 | },
|
---|
| 459 | ModelReleaseStatus => {
|
---|
| 460 | %plusVocab,
|
---|
| 461 | PrintConv => {
|
---|
| 462 | 'MR-NON' => 'None',
|
---|
| 463 | 'MR-NAP' => 'Not Applicable',
|
---|
| 464 | 'MR-UMR' => 'Unlimited Model Releases',
|
---|
| 465 | 'MR-LMR' => 'Limited or Incomplete Model Releases',
|
---|
| 466 | },
|
---|
| 467 | },
|
---|
| 468 | ModelReleaseID => { List => 'Bag' },
|
---|
| 469 | MinorModelAgeDisclosure => {
|
---|
| 470 | %plusVocab,
|
---|
| 471 | PrintConv => {
|
---|
| 472 | 'AG-UNK' => 'Age Unknown',
|
---|
| 473 | 'AG-A25' => 'Age 25 or Over',
|
---|
| 474 | 'AG-A24' => 'Age 24',
|
---|
| 475 | 'AG-A23' => 'Age 23',
|
---|
| 476 | 'AG-A22' => 'Age 22',
|
---|
| 477 | 'AG-A21' => 'Age 21',
|
---|
| 478 | 'AG-A20' => 'Age 20',
|
---|
| 479 | 'AG-A19' => 'Age 19',
|
---|
| 480 | 'AG-A18' => 'Age 18',
|
---|
| 481 | 'AG-A17' => 'Age 17',
|
---|
| 482 | 'AG-A16' => 'Age 16',
|
---|
| 483 | 'AG-A15' => 'Age 15',
|
---|
| 484 | 'AG-U14' => 'Age 14 or Under',
|
---|
| 485 | },
|
---|
| 486 | },
|
---|
| 487 | PropertyReleaseStatus => {
|
---|
| 488 | %plusVocab,
|
---|
| 489 | PrintConv => {
|
---|
| 490 | 'PR-NON' => 'None',
|
---|
| 491 | 'PR-NAP' => 'Not Applicable',
|
---|
| 492 | 'PR-UPR' => 'Unlimited Property Releases',
|
---|
| 493 | 'PR-LPR' => 'Limited or Incomplete Property Releases',
|
---|
| 494 | },
|
---|
| 495 | },
|
---|
| 496 | PropertyReleaseID => { List => 'Bag' },
|
---|
| 497 | OtherConstraints => { Writable => 'lang-alt' },
|
---|
| 498 | CreditLineRequired => {
|
---|
| 499 | %plusVocab,
|
---|
| 500 | PrintConv => {
|
---|
| 501 | 'CR-NRQ' => 'Not Required',
|
---|
| 502 | 'CR-COI' => 'Credit on Image',
|
---|
| 503 | 'CR-CAI' => 'Credit Adjacent To Image',
|
---|
| 504 | 'CR-CCA' => 'Credit in Credits Area',
|
---|
| 505 | },
|
---|
| 506 | },
|
---|
| 507 | AdultContentWarning => {
|
---|
| 508 | %plusVocab,
|
---|
| 509 | PrintConv => {
|
---|
| 510 | 'CW-NRQ' => 'Not Required',
|
---|
| 511 | 'CW-AWR' => 'Adult Content Warning Required',
|
---|
| 512 | 'CW-UNK' => 'Unknown',
|
---|
| 513 | },
|
---|
| 514 | },
|
---|
| 515 | OtherLicenseRequirements => { Writable => 'lang-alt' },
|
---|
| 516 | TermsAndConditionsText => { Writable => 'lang-alt' },
|
---|
| 517 | TermsAndConditionsURL => { },
|
---|
| 518 | OtherConditions => { Writable => 'lang-alt' },
|
---|
| 519 | ImageType => {
|
---|
| 520 | %plusVocab,
|
---|
| 521 | PrintConv => {
|
---|
| 522 | 'TY-PHO' => 'Photographic Image',
|
---|
| 523 | 'TY-ILL' => 'Illustrated Image',
|
---|
| 524 | 'TY-MCI' => 'Multimedia or Composited Image',
|
---|
| 525 | 'TY-VID' => 'Video',
|
---|
| 526 | 'TY-OTR' => 'Other',
|
---|
| 527 | },
|
---|
| 528 | },
|
---|
| 529 | LicensorImageID => { },
|
---|
| 530 | FileNameAsDelivered => { },
|
---|
| 531 | ImageFileFormatAsDelivered => {
|
---|
| 532 | %plusVocab,
|
---|
| 533 | PrintConv => {
|
---|
| 534 | 'FF-JPG' => 'JPEG Interchange Formats (JPG, JIF, JFIF)',
|
---|
| 535 | 'FF-TIF' => 'Tagged Image File Format (TIFF)',
|
---|
| 536 | 'FF-GIF' => 'Graphics Interchange Format (GIF)',
|
---|
| 537 | 'FF-RAW' => 'Proprietary RAW Image Format',
|
---|
| 538 | 'FF-DNG' => 'Digital Negative (DNG)',
|
---|
| 539 | 'FF-EPS' => 'Encapsulated PostScript (EPS)',
|
---|
| 540 | 'FF-BMP' => 'Windows Bitmap (BMP)',
|
---|
| 541 | 'FF-PSD' => 'Photoshop Document (PSD)',
|
---|
| 542 | 'FF-PIC' => 'Macintosh Picture (PICT)',
|
---|
| 543 | 'FF-PNG' => 'Portable Network Graphics (PNG)',
|
---|
| 544 | 'FF-WMP' => 'Windows Media Photo (HD Photo)',
|
---|
| 545 | 'FF-OTR' => 'Other',
|
---|
| 546 | },
|
---|
| 547 | },
|
---|
| 548 | ImageFileSizeAsDelivered => {
|
---|
| 549 | %plusVocab,
|
---|
| 550 | PrintConv => {
|
---|
| 551 | 'SZ-U01' => 'Up to 1 MB',
|
---|
| 552 | 'SZ-U10' => 'Up to 10 MB',
|
---|
| 553 | 'SZ-U30' => 'Up to 30 MB',
|
---|
| 554 | 'SZ-U50' => 'Up to 50 MB',
|
---|
| 555 | 'SZ-G50' => 'Greater than 50 MB',
|
---|
| 556 | },
|
---|
| 557 | },
|
---|
| 558 | CopyrightStatus => {
|
---|
| 559 | %plusVocab,
|
---|
| 560 | PrintConv => {
|
---|
| 561 | 'CS-PRO' => 'Protected',
|
---|
| 562 | 'CS-PUB' => 'Public Domain',
|
---|
| 563 | 'CS-UNK' => 'Unknown',
|
---|
| 564 | },
|
---|
| 565 | },
|
---|
| 566 | CopyrightRegistrationNumber => { },
|
---|
| 567 | FirstPublicationDate => { %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 568 | CopyrightOwner => { Struct => \%plusCopyrightOwner, List => 'Seq' },
|
---|
| 569 | CopyrightOwnerCopyrightOwnerID => { Flat => 1, Name => 'CopyrightOwnerID' },
|
---|
| 570 | CopyrightOwnerCopyrightOwnerName => { Flat => 1, Name => 'CopyrightOwnerName' },
|
---|
| 571 | CopyrightOwnerImageID => { },
|
---|
| 572 | ImageCreator => {
|
---|
| 573 | Struct => \%plusImageCreator,
|
---|
| 574 | List => 'Seq',
|
---|
| 575 | },
|
---|
| 576 | ImageCreatorImageCreatorID => { Flat => 1, Name => 'ImageCreatorID' },
|
---|
| 577 | ImageCreatorImageCreatorName => { Flat => 1, Name => 'ImageCreatorName' },
|
---|
| 578 | ImageCreatorImageID => { },
|
---|
| 579 | ImageSupplier => {
|
---|
| 580 | Struct => \%plusImageSupplier,
|
---|
| 581 | List => 'Seq',
|
---|
| 582 | },
|
---|
| 583 | ImageSupplierImageSupplierID => { Flat => 1, Name => 'ImageSupplierID' },
|
---|
| 584 | ImageSupplierImageSupplierName => { Flat => 1, Name => 'ImageSupplierName' },
|
---|
| 585 | ImageSupplierImageID => { },
|
---|
| 586 | LicenseeImageID => { },
|
---|
| 587 | LicenseeImageNotes => { Writable => 'lang-alt' },
|
---|
| 588 | OtherImageInfo => { Writable => 'lang-alt' },
|
---|
| 589 | LicenseID => { },
|
---|
| 590 | LicensorTransactionID => { List => 'Bag' },
|
---|
| 591 | LicenseeTransactionID => { List => 'Bag' },
|
---|
| 592 | LicenseeProjectReference=> { List => 'Bag' },
|
---|
| 593 | LicenseTransactionDate => { %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 594 | Reuse => {
|
---|
| 595 | %plusVocab,
|
---|
| 596 | PrintConv => {
|
---|
| 597 | 'RE-REU' => 'Repeat Use',
|
---|
| 598 | 'RE-NAP' => 'Not Applicable',
|
---|
| 599 | },
|
---|
| 600 | },
|
---|
| 601 | OtherLicenseDocuments => { List => 'Bag' },
|
---|
| 602 | OtherLicenseInfo => { Writable => 'lang-alt' },
|
---|
| 603 | # Note: these are Bag's of lang-alt lists -- a nested list tag!
|
---|
| 604 | Custom1 => { List => 'Bag', Writable => 'lang-alt' },
|
---|
| 605 | Custom2 => { List => 'Bag', Writable => 'lang-alt' },
|
---|
| 606 | Custom3 => { List => 'Bag', Writable => 'lang-alt' },
|
---|
| 607 | Custom4 => { List => 'Bag', Writable => 'lang-alt' },
|
---|
| 608 | Custom5 => { List => 'Bag', Writable => 'lang-alt' },
|
---|
| 609 | Custom6 => { List => 'Bag', Writable => 'lang-alt' },
|
---|
| 610 | Custom7 => { List => 'Bag', Writable => 'lang-alt' },
|
---|
| 611 | Custom8 => { List => 'Bag', Writable => 'lang-alt' },
|
---|
| 612 | Custom9 => { List => 'Bag', Writable => 'lang-alt' },
|
---|
| 613 | Custom10 => { List => 'Bag', Writable => 'lang-alt' },
|
---|
| 614 | );
|
---|
| 615 |
|
---|
| 616 | #------------------------------------------------------------------------------
|
---|
| 617 | # PRISM
|
---|
| 618 | #
|
---|
| 619 | # NOTE: The "Avoid" flag is set for all PRISM tags
|
---|
| 620 |
|
---|
| 621 | # my %obsolete = (
|
---|
| 622 | # Notes => 'obsolete in 2.0',
|
---|
| 623 | # ValueConvInv => sub {
|
---|
| 624 | # my ($val, $self) = @_;
|
---|
| 625 | # unless ($self->Options('IgnoreMinorErrors')) {
|
---|
| 626 | # warn "Warning: [minor] Attempt to write obsolete tag\n";
|
---|
| 627 | # return undef;
|
---|
| 628 | # }
|
---|
| 629 | # return $val;
|
---|
| 630 | # }
|
---|
| 631 | # );
|
---|
| 632 |
|
---|
| 633 | # Publishing Requirements for Industry Standard Metadata 2.1 (prism) (ref 2)
|
---|
| 634 | %Image::ExifTool::XMP::prism = (
|
---|
| 635 | %xmpTableDefaults,
|
---|
| 636 | GROUPS => { 0 => 'XMP', 1 => 'XMP-prism', 2 => 'Document' },
|
---|
| 637 | NAMESPACE => 'prism',
|
---|
| 638 | NOTES => q{
|
---|
| 639 | Publishing Requirements for Industry Standard Metadata 2.1 schema tags. (see
|
---|
| 640 | L<http://www.prismstandard.org/>)
|
---|
| 641 | },
|
---|
| 642 | aggregationType => { List => 'Bag' },
|
---|
| 643 | alternateTitle => { List => 'Bag' },
|
---|
| 644 | byteCount => { Writable => 'integer' },
|
---|
| 645 | channel => { List => 'Bag' },
|
---|
| 646 | complianceProfile=>{ PrintConv => { three => 'Three' } },
|
---|
| 647 | copyright => { Groups => { 2 => 'Author' } },
|
---|
| 648 | corporateEntity => { List => 'Bag' },
|
---|
| 649 | coverDate => { %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 650 | coverDisplayDate=> { },
|
---|
| 651 | creationDate => { %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 652 | dateRecieved => { %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 653 | distributor => { },
|
---|
| 654 | doi => { Name => 'DOI', Description => 'Digital Object Identifier' },
|
---|
| 655 | edition => { },
|
---|
| 656 | eIssn => { },
|
---|
| 657 | embargoDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 658 | endingPage => { },
|
---|
| 659 | event => { List => 'Bag' },
|
---|
| 660 | expirationDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 661 | genre => { List => 'Bag' },
|
---|
| 662 | hasAlternative => { List => 'Bag' },
|
---|
| 663 | hasCorrection => { },
|
---|
| 664 | hasPreviousVersion => { },
|
---|
| 665 | hasTranslation => { List => 'Bag' },
|
---|
| 666 | industry => { List => 'Bag' },
|
---|
| 667 | isCorrectionOf => { List => 'Bag' },
|
---|
| 668 | issn => { Name => 'ISSN' },
|
---|
| 669 | issueIdentifier => { },
|
---|
| 670 | issueName => { },
|
---|
| 671 | isTranslationOf => { },
|
---|
| 672 | keyword => { List => 'Bag' },
|
---|
| 673 | killDate => { %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 674 | location => { List => 'Bag' },
|
---|
| 675 | # metadataContainer => { }, (not valid for PRISM XMP)
|
---|
| 676 | modificationDate=> { %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 677 | number => { },
|
---|
| 678 | object => { List => 'Bag' },
|
---|
| 679 | organization => { List => 'Bag' },
|
---|
| 680 | originPlatform => {
|
---|
| 681 | List => 'Bag',
|
---|
| 682 | PrintConv => {
|
---|
| 683 | email => 'E-Mail',
|
---|
| 684 | mobile => 'Mobile',
|
---|
| 685 | broadcast => 'Broadcast',
|
---|
| 686 | web => 'Web',
|
---|
| 687 | 'print' => 'Print',
|
---|
| 688 | recordableMedia => 'Recordable Media',
|
---|
| 689 | other => 'Other',
|
---|
| 690 | },
|
---|
| 691 | },
|
---|
| 692 | pageRange => { List => 'Bag' },
|
---|
| 693 | person => { },
|
---|
| 694 | publicationDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 695 | publicationName => { },
|
---|
| 696 | rightsAgent => { },
|
---|
| 697 | section => { },
|
---|
| 698 | startingPage => { },
|
---|
| 699 | subsection1 => { },
|
---|
| 700 | subsection2 => { },
|
---|
| 701 | subsection3 => { },
|
---|
| 702 | subsection4 => { },
|
---|
| 703 | teaser => { List => 'Bag' },
|
---|
| 704 | ticker => { List => 'Bag' },
|
---|
| 705 | timePeriod => { },
|
---|
| 706 | url => { Name => 'URL', List => 'Bag' },
|
---|
| 707 | versionIdentifier => { },
|
---|
| 708 | volume => { },
|
---|
| 709 | wordCount => { Writable => 'integer' },
|
---|
| 710 | # new in PRISM 2.1
|
---|
| 711 | isbn => { Name => 'ISBN' },
|
---|
| 712 | # tags that existed in version 1.3
|
---|
| 713 | # category => { %obsolete, List => 'Bag' },
|
---|
| 714 | # hasFormat => { %obsolete, List => 'Bag' },
|
---|
| 715 | # hasPart => { %obsolete, List => 'Bag' },
|
---|
| 716 | # isFormatOf => { %obsolete, List => 'Bag' },
|
---|
| 717 | # isPartOf => { %obsolete },
|
---|
| 718 | # isReferencedBy => { %obsolete, List => 'Bag' },
|
---|
| 719 | # isRequiredBy => { %obsolete, List => 'Bag' },
|
---|
| 720 | # isVersionOf => { %obsolete },
|
---|
| 721 | # objectTitle => { %obsolete, List => 'Bag' },
|
---|
| 722 | # receptionDate => { %obsolete },
|
---|
| 723 | # references => { %obsolete, List => 'Bag' },
|
---|
| 724 | # requires => { %obsolete, List => 'Bag' },
|
---|
| 725 | # tags in older versions
|
---|
| 726 | # page
|
---|
| 727 | # contentLength
|
---|
| 728 | # creationTime
|
---|
| 729 | # expirationTime
|
---|
| 730 | # hasVersion
|
---|
| 731 | # isAlternativeFor
|
---|
| 732 | # isBasedOn
|
---|
| 733 | # isBasisFor
|
---|
| 734 | # modificationTime
|
---|
| 735 | # publicationTime
|
---|
| 736 | # receptionTime
|
---|
| 737 | # releaseTime
|
---|
| 738 | );
|
---|
| 739 |
|
---|
| 740 | # PRISM Rights Language 2.1 schema (prl) (ref 2)
|
---|
| 741 | %Image::ExifTool::XMP::prl = (
|
---|
| 742 | %xmpTableDefaults,
|
---|
| 743 | GROUPS => { 0 => 'XMP', 1 => 'XMP-prl', 2 => 'Document' },
|
---|
| 744 | NAMESPACE => 'prl',
|
---|
| 745 | NOTES => q{
|
---|
| 746 | PRISM Rights Language 2.1 schema tags. (see
|
---|
| 747 | L<http://www.prismstandard.org/>)
|
---|
| 748 | },
|
---|
| 749 | geography => { List => 'Bag' },
|
---|
| 750 | industry => { List => 'Bag' },
|
---|
| 751 | usage => { List => 'Bag' },
|
---|
| 752 | );
|
---|
| 753 |
|
---|
| 754 | # PRISM Usage Rights 2.1 schema (prismusagerights) (ref 2)
|
---|
| 755 | %Image::ExifTool::XMP::pur = (
|
---|
| 756 | %xmpTableDefaults,
|
---|
| 757 | GROUPS => { 0 => 'XMP', 1 => 'XMP-pur', 2 => 'Document' },
|
---|
| 758 | NAMESPACE => 'pur',
|
---|
| 759 | NOTES => q{
|
---|
| 760 | Prism Usage Rights 2.1 schema tags. (see L<http://www.prismstandard.org/>)
|
---|
| 761 | },
|
---|
| 762 | adultContentWarning => { List => 'Bag' },
|
---|
| 763 | agreement => { List => 'Bag' },
|
---|
| 764 | copyright => { Writable => 'lang-alt', Groups => { 2 => 'Author' } },
|
---|
| 765 | creditLine => { List => 'Bag' },
|
---|
| 766 | embargoDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 767 | exclusivityEndDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 768 | expirationDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 769 | imageSizeRestriction=> { },
|
---|
| 770 | optionEndDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} },
|
---|
| 771 | permissions => { List => 'Bag' },
|
---|
| 772 | restrictions => { List => 'Bag' },
|
---|
| 773 | reuseProhibited => { Writable => 'boolean' },
|
---|
| 774 | rightsAgent => { },
|
---|
| 775 | rightsOwner => { },
|
---|
| 776 | usageFee => { List => 'Bag' },
|
---|
| 777 | );
|
---|
| 778 |
|
---|
| 779 | # DICOM schema properties (DICOM) (ref PH, written by CS3)
|
---|
| 780 | %Image::ExifTool::XMP::DICOM = (
|
---|
| 781 | %xmpTableDefaults,
|
---|
| 782 | GROUPS => { 1 => 'XMP-DICOM', 2 => 'Image' },
|
---|
| 783 | NAMESPACE => 'DICOM',
|
---|
| 784 | NOTES => 'DICOM schema tags.',
|
---|
| 785 | # change some tag names to correspond with DICOM tags
|
---|
| 786 | PatientName => { },
|
---|
| 787 | PatientID => { },
|
---|
| 788 | PatientSex => { },
|
---|
| 789 | PatientDOB => {
|
---|
| 790 | Name => 'PatientBirthDate',
|
---|
| 791 | Groups => { 2 => 'Time' },
|
---|
| 792 | %dateTimeInfo,
|
---|
| 793 | },
|
---|
| 794 | StudyID => { },
|
---|
| 795 | StudyPhysician => { },
|
---|
| 796 | StudyDateTime => { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
---|
| 797 | StudyDescription => { },
|
---|
| 798 | SeriesNumber => { },
|
---|
| 799 | SeriesModality => { },
|
---|
| 800 | SeriesDateTime => { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
---|
| 801 | SeriesDescription => { },
|
---|
| 802 | EquipmentInstitution => { },
|
---|
| 803 | EquipmentManufacturer => { },
|
---|
| 804 | );
|
---|
| 805 |
|
---|
| 806 | # PixelLive schema properties (PixelLive) (ref 3)
|
---|
| 807 | %Image::ExifTool::XMP::PixelLive = (
|
---|
| 808 | GROUPS => { 1 => 'XMP-PixelLive', 2 => 'Image' },
|
---|
| 809 | NAMESPACE => 'PixelLive',
|
---|
| 810 | NOTES => q{
|
---|
| 811 | PixelLive schema tags. These tags are not writable becase they are very
|
---|
| 812 | uncommon and I haven't been able to locate a reference which gives the
|
---|
| 813 | namespace URI.
|
---|
| 814 | },
|
---|
| 815 | AUTHOR => { Name => 'Author', Avoid => 1, Groups => { 2 => 'Author' } },
|
---|
| 816 | COMMENTS => { Name => 'Comments', Avoid => 1 },
|
---|
| 817 | COPYRIGHT => { Name => 'Copyright',Avoid => 1, Groups => { 2 => 'Author' } },
|
---|
| 818 | DATE => { Name => 'Date', Avoid => 1, Groups => { 2 => 'Time' } },
|
---|
| 819 | GENRE => { Name => 'Genre', Avoid => 1 },
|
---|
| 820 | TITLE => { Name => 'Title', Avoid => 1 },
|
---|
| 821 | );
|
---|
| 822 |
|
---|
| 823 | # ACDSee schema (acdsee) (ref PH)
|
---|
| 824 | %Image::ExifTool::XMP::acdsee = (
|
---|
| 825 | %xmpTableDefaults,
|
---|
| 826 | GROUPS => { 0 => 'XMP', 1 => 'XMP-acdsee', 2 => 'Image' },
|
---|
| 827 | NAMESPACE => 'acdsee',
|
---|
| 828 | NOTES => q{
|
---|
| 829 | ACD Systems ACDSee schema tags.
|
---|
| 830 |
|
---|
| 831 | (A note to software developers: Re-inventing your own private tags instead
|
---|
| 832 | of using the equivalent tags in standard XMP schemas defeats one of the most
|
---|
| 833 | valuable features of metadata: interoperability. Your applications mumble
|
---|
| 834 | to themselves instead of speaking out for the rest of the world to hear.)
|
---|
| 835 | },
|
---|
| 836 | author => { Avoid => 1, Groups => { 2 => 'Author' } },
|
---|
| 837 | caption => { Avoid => 1 },
|
---|
| 838 | categories => { Avoid => 1 },
|
---|
| 839 | datetime => { Avoid => 1, Groups => { 2 => 'Time' }, %dateTimeInfo },
|
---|
| 840 | keywords => { Avoid => 1, List => 'Bag' },
|
---|
| 841 | notes => { Avoid => 1 },
|
---|
| 842 | rating => { Avoid => 1, Writable => 'real' }, # integer?
|
---|
| 843 | tagged => { Avoid => 1, Writable => 'boolean' },
|
---|
| 844 | rpp => {
|
---|
| 845 | Name => 'RPP',
|
---|
| 846 | Writable => 'lang-alt',
|
---|
| 847 | Notes => 'raw processing settings in XML format',
|
---|
| 848 | Binary => 1,
|
---|
| 849 | },
|
---|
| 850 | );
|
---|
| 851 |
|
---|
| 852 | # Picture Licensing Universal System schema properties (xmpPLUS)
|
---|
| 853 | %Image::ExifTool::XMP::xmpPLUS = (
|
---|
| 854 | %xmpTableDefaults,
|
---|
| 855 | GROUPS => { 1 => 'XMP-xmpPLUS', 2 => 'Author' },
|
---|
| 856 | NAMESPACE => 'xmpPLUS',
|
---|
| 857 | NOTES => 'XMP Picture Licensing Universal System (PLUS) schema tags.',
|
---|
| 858 | CreditLineReq => { Writable => 'boolean' },
|
---|
| 859 | ReuseAllowed => { Writable => 'boolean' },
|
---|
| 860 | );
|
---|
| 861 |
|
---|
| 862 | # Creative Commons schema properties (cc) (ref 5)
|
---|
| 863 | %Image::ExifTool::XMP::cc = (
|
---|
| 864 | %xmpTableDefaults,
|
---|
| 865 | GROUPS => { 1 => 'XMP-cc', 2 => 'Author' },
|
---|
| 866 | NAMESPACE => 'cc',
|
---|
| 867 | NOTES => q{
|
---|
| 868 | Creative Commons schema tags. (see
|
---|
| 869 | L<http://creativecommons.org/technology/xmp>)
|
---|
| 870 | },
|
---|
| 871 | license => { },
|
---|
| 872 | morePermissions => { },
|
---|
| 873 | attributionName => { },
|
---|
| 874 | attributionURL => { },
|
---|
| 875 | );
|
---|
| 876 |
|
---|
| 877 | # Description Explorer schema properties (dex) (ref 6)
|
---|
| 878 | %Image::ExifTool::XMP::dex = (
|
---|
| 879 | %xmpTableDefaults,
|
---|
| 880 | GROUPS => { 1 => 'XMP-dex', 2 => 'Image' },
|
---|
| 881 | NAMESPACE => 'dex',
|
---|
| 882 | NOTES => q{
|
---|
| 883 | Description Explorer schema tags. These tags are not very common. The
|
---|
| 884 | Source and Rating tags are avoided when writing due to name conflicts with
|
---|
| 885 | other XMP tags. (see L<http://www.optimasc.com/products/fileid/>)
|
---|
| 886 | },
|
---|
| 887 | crc32 => { Name => 'CRC32', Writable => 'integer' },
|
---|
| 888 | source => { Avoid => 1 },
|
---|
| 889 | shortdescription => {
|
---|
| 890 | Name => 'ShortDescription',
|
---|
| 891 | Writable => 'lang-alt',
|
---|
| 892 | },
|
---|
| 893 | licensetype => {
|
---|
| 894 | Name => 'LicenseType',
|
---|
| 895 | PrintConv => {
|
---|
| 896 | unknown => 'Unknown',
|
---|
| 897 | shareware => 'Shareware',
|
---|
| 898 | freeware => 'Freeware',
|
---|
| 899 | adware => 'Adware',
|
---|
| 900 | demo => 'Demo',
|
---|
| 901 | commercial => 'Commercial',
|
---|
| 902 | 'public domain' => 'Public Domain',
|
---|
| 903 | 'open source' => 'Open Source',
|
---|
| 904 | },
|
---|
| 905 | },
|
---|
| 906 | revision => { },
|
---|
| 907 | rating => { Avoid => 1 },
|
---|
| 908 | os => { Name => 'OS', Writable => 'integer' },
|
---|
| 909 | ffid => { Name => 'FFID' },
|
---|
| 910 | );
|
---|
| 911 |
|
---|
| 912 | # iView MediaPro schema properties (mediapro) (ref PH)
|
---|
| 913 | %Image::ExifTool::XMP::MediaPro = (
|
---|
| 914 | %xmpTableDefaults,
|
---|
| 915 | GROUPS => { 1 => 'XMP-mediapro', 2 => 'Image' },
|
---|
| 916 | NAMESPACE => 'mediapro',
|
---|
| 917 | NOTES => 'iView MediaPro schema tags.',
|
---|
| 918 | Event => { },
|
---|
| 919 | Location => {
|
---|
| 920 | Avoid => 1,
|
---|
| 921 | Groups => { 2 => 'Location' },
|
---|
| 922 | Notes => 'avoided due to conflict with XMP-iptcCore:Location',
|
---|
| 923 | },
|
---|
| 924 | Status => { },
|
---|
| 925 | People => { List => 'Bag' },
|
---|
| 926 | UserFields => { List => 'Bag' },
|
---|
| 927 | CatalogSets => { List => 'Bag' },
|
---|
| 928 | );
|
---|
| 929 |
|
---|
| 930 | # DigiKam schema tags (ref PH)
|
---|
| 931 | %Image::ExifTool::XMP::digiKam = (
|
---|
| 932 | %xmpTableDefaults,
|
---|
| 933 | GROUPS => { 1 => 'XMP-digiKam', 2 => 'Image' },
|
---|
| 934 | NAMESPACE => 'digiKam',
|
---|
| 935 | NOTES => 'DigiKam schema tags.',
|
---|
| 936 | CaptionsAuthorNames => { Writable => 'lang-alt' },
|
---|
| 937 | CaptionsDateTimeStamps => { Writable => 'lang-alt' },
|
---|
| 938 | TagsList => { List => 'Seq' },
|
---|
| 939 | );
|
---|
| 940 |
|
---|
| 941 | # SWF schema tags (ref PH)
|
---|
| 942 | %Image::ExifTool::XMP::swf = (
|
---|
| 943 | %xmpTableDefaults,
|
---|
| 944 | GROUPS => { 1 => 'XMP-swf', 2 => 'Image' },
|
---|
| 945 | NAMESPACE => 'swf',
|
---|
| 946 | NOTES => 'Adobe SWF schema tags.',
|
---|
| 947 | type => { Avoid => 1 },
|
---|
| 948 | bgalpha => { Name => 'BackgroundAlpha', Writable => 'integer' },
|
---|
| 949 | forwardlock => { Name => 'ForwardLock', Writable => 'boolean' },
|
---|
| 950 | maxstorage => { Name => 'MaxStorage', Writable => 'integer' }, # (CS5)
|
---|
| 951 | );
|
---|
| 952 |
|
---|
| 953 | # Sony Ericsson cell phone location tags
|
---|
| 954 | # refs: http://www.opencellid.org/api
|
---|
| 955 | # http://zonetag.research.yahoo.com/faq_location.php
|
---|
| 956 | # http://www.cs.columbia.edu/sip/drafts/LIF%20TS%20101%20v2.0.0.pdf
|
---|
| 957 | %Image::ExifTool::XMP::cell = (
|
---|
| 958 | %xmpTableDefaults,
|
---|
| 959 | GROUPS => { 1 => 'XMP-cell', 2 => 'Location' },
|
---|
| 960 | NAMESPACE => 'cell',
|
---|
| 961 | NOTES => 'Location tags written by some Sony Ericsson phones.',
|
---|
| 962 | mcc => { Name => 'MobileCountryCode' },
|
---|
| 963 | mnc => { Name => 'MobileNetworkCode' },
|
---|
| 964 | lac => { Name => 'LocationAreaCode' },
|
---|
| 965 | cellid => { Name => 'CellTowerID' },
|
---|
| 966 | cgi => { Name => 'CellGlobalID' },
|
---|
| 967 | r => { Name => 'CellR' }, # (what is this? Radius?)
|
---|
| 968 | );
|
---|
| 969 |
|
---|
| 970 | my %sExtensions = (
|
---|
| 971 | STRUCT_NAME => 'Extensions',
|
---|
| 972 | NAMESPACE => undef, # variable namespace
|
---|
| 973 | NOTES => q{
|
---|
| 974 | This structure may contain any top-level XMP tags, but none have been
|
---|
| 975 | pre-defined in ExifTool. Without pre-defined flattened tag names,
|
---|
| 976 | RegionExtensions may be written only as a structure (ie.
|
---|
| 977 | C<{xmp-dc:creator=me,rating=5}>). Fields for this structure are identified
|
---|
| 978 | using the standard ExifTool tag name (with optional leading group name,
|
---|
| 979 | and/or trailing language code, and/or trailing C<#> symbol to disable print
|
---|
| 980 | conversion).
|
---|
| 981 | },
|
---|
| 982 | );
|
---|
| 983 | my %sRegionStruct = (
|
---|
| 984 | STRUCT_NAME => 'RegionStruct',
|
---|
| 985 | NAMESPACE => 'mwg-rs',
|
---|
| 986 | Area => { Struct => \%sArea },
|
---|
| 987 | Type => {
|
---|
| 988 | PrintConv => {
|
---|
| 989 | Face => 'Face',
|
---|
| 990 | Pet => 'Pet',
|
---|
| 991 | Focus => 'Focus',
|
---|
| 992 | BarCode => 'BarCode',
|
---|
| 993 | },
|
---|
| 994 | },
|
---|
| 995 | Name => { },
|
---|
| 996 | Description => { },
|
---|
| 997 | FocusUsage => {
|
---|
| 998 | PrintConv => {
|
---|
| 999 | EvaluatedUsed => 'Evaluated, Used',
|
---|
| 1000 | EvaluatedNotUsed => 'Evaluated, Not Used',
|
---|
| 1001 | NotEvaluatedNotUsed => 'Not Evaluated, Not Used',
|
---|
| 1002 | },
|
---|
| 1003 | },
|
---|
| 1004 | BarCodeValue=> { },
|
---|
| 1005 | Extensions => { Struct => \%sExtensions },
|
---|
| 1006 | seeAlso => { Namespace => 'rdfs', Resource => 1 },
|
---|
| 1007 | );
|
---|
| 1008 | my %sKeywordStruct4 = (
|
---|
| 1009 | STRUCT_NAME => 'KeywordStruct4',
|
---|
| 1010 | NAMESPACE => 'mwg-kw',
|
---|
| 1011 | Keyword => { },
|
---|
| 1012 | Applied => { Writable => 'boolean' },
|
---|
| 1013 | );
|
---|
| 1014 | my %sKeywordStruct3 = (
|
---|
| 1015 | STRUCT_NAME => 'KeywordStruct3',
|
---|
| 1016 | NAMESPACE => 'mwg-kw',
|
---|
| 1017 | Keyword => { },
|
---|
| 1018 | Applied => { Writable => 'boolean' },
|
---|
| 1019 | Children => { Struct => \%sKeywordStruct4, List => 'Bag' },
|
---|
| 1020 | );
|
---|
| 1021 | my %sKeywordStruct2 = (
|
---|
| 1022 | STRUCT_NAME => 'KeywordStruct2',
|
---|
| 1023 | NAMESPACE => 'mwg-kw',
|
---|
| 1024 | Keyword => { },
|
---|
| 1025 | Applied => { Writable => 'boolean' },
|
---|
| 1026 | Children => { Struct => \%sKeywordStruct3, List => 'Bag' },
|
---|
| 1027 | );
|
---|
| 1028 | my %sKeywordStruct1 = (
|
---|
| 1029 | STRUCT_NAME => 'KeywordStruct1',
|
---|
| 1030 | NAMESPACE => 'mwg-kw',
|
---|
| 1031 | Keyword => { },
|
---|
| 1032 | Applied => { Writable => 'boolean' },
|
---|
| 1033 | Children => { Struct => \%sKeywordStruct2, List => 'Bag' },
|
---|
| 1034 | );
|
---|
| 1035 |
|
---|
| 1036 | # MWG 2.0 region schema tags
|
---|
| 1037 | %Image::ExifTool::XMP::mwg_rs = (
|
---|
| 1038 | %xmpTableDefaults,
|
---|
| 1039 | GROUPS => { 1 => 'XMP-mwg-rs', 2 => 'Image' },
|
---|
| 1040 | NAMESPACE => 'mwg-rs',
|
---|
| 1041 | NOTES => q{
|
---|
| 1042 | Image region metadata defined by the MWG 2.0 specification. See
|
---|
| 1043 | L<http://www.metadataworkinggroup.org/> for the official specification.
|
---|
| 1044 | },
|
---|
| 1045 | Regions => {
|
---|
| 1046 | Name => 'RegionInfo',
|
---|
| 1047 | Struct => {
|
---|
| 1048 | STRUCT_NAME => 'RegionInfo',
|
---|
| 1049 | NAMESPACE => 'mwg-rs',
|
---|
| 1050 | RegionList => { Struct => \%sRegionStruct, List => 'Bag' },
|
---|
| 1051 | AppliedToDimensions => { Struct => \%sDimensions },
|
---|
| 1052 | },
|
---|
| 1053 | },
|
---|
| 1054 | RegionsAppliedToDimensions => { Flat => 1, Name => 'RegionAppliedToDimensions' },
|
---|
| 1055 | RegionsAppliedToDimensionsW => { Flat => 1, Name => 'RegionAppliedToDimensionsW' },
|
---|
| 1056 | RegionsAppliedToDimensionsH => { Flat => 1, Name => 'RegionAppliedToDimensionsH' },
|
---|
| 1057 | RegionsAppliedToDimensionsUnit=>{Flat => 1, Name => 'RegionAppliedToDimensionsUnit' },
|
---|
| 1058 | RegionsRegionList => { Flat => 1, Name => 'RegionList' },
|
---|
| 1059 | RegionsRegionListArea => { Flat => 1, Name => 'RegionArea' },
|
---|
| 1060 | RegionsRegionListAreaX => { Flat => 1, Name => 'RegionAreaX' },
|
---|
| 1061 | RegionsRegionListAreaY => { Flat => 1, Name => 'RegionAreaY' },
|
---|
| 1062 | RegionsRegionListAreaW => { Flat => 1, Name => 'RegionAreaW' },
|
---|
| 1063 | RegionsRegionListAreaH => { Flat => 1, Name => 'RegionAreaH' },
|
---|
| 1064 | RegionsRegionListAreaD => { Flat => 1, Name => 'RegionAreaD' },
|
---|
| 1065 | RegionsRegionListAreaUnit => { Flat => 1, Name => 'RegionAreaUnit' },
|
---|
| 1066 | RegionsRegionListType => { Flat => 1, Name => 'RegionType' },
|
---|
| 1067 | RegionsRegionListName => { Flat => 1, Name => 'RegionName' },
|
---|
| 1068 | RegionsRegionListDescription=> { Flat => 1, Name => 'RegionDescription' },
|
---|
| 1069 | RegionsRegionListFocusUsage => { Flat => 1, Name => 'RegionFocusUsage' },
|
---|
| 1070 | RegionsRegionListBarCodeValue=>{ Flat => 1, Name => 'RegionBarCodeValue' },
|
---|
| 1071 | RegionsRegionListExtensions => { Flat => 1, Name => 'RegionExtensions' },
|
---|
| 1072 | RegionsRegionListSeeAlso => { Flat => 1, Name => 'RegionSeeAlso' },
|
---|
| 1073 | );
|
---|
| 1074 |
|
---|
| 1075 | # MWG 2.0 hierarchical keyword schema tags
|
---|
| 1076 | %Image::ExifTool::XMP::mwg_kw = (
|
---|
| 1077 | %xmpTableDefaults,
|
---|
| 1078 | GROUPS => { 1 => 'XMP-mwg-kw', 2 => 'Image' },
|
---|
| 1079 | NAMESPACE => 'mwg-kw',
|
---|
| 1080 | NOTES => q{
|
---|
| 1081 | Hierarchical keywords metadata defined by the MWG 2.0 specification.
|
---|
| 1082 | ExifTool unrolls keyword structures to an arbitrary depth of 4 to allow
|
---|
| 1083 | individual levels to be accessed with different tag names, and to avoid
|
---|
| 1084 | infinite recursion. See L<http://www.metadataworkinggroup.org/> for the
|
---|
| 1085 | official specification.
|
---|
| 1086 | },
|
---|
| 1087 | # arbitrarily define only the first 4 levels of the keyword hierarchy
|
---|
| 1088 | Keywords => {
|
---|
| 1089 | Name => 'KeywordInfo',
|
---|
| 1090 | Struct => {
|
---|
| 1091 | STRUCT_NAME => 'KeywordInfo',
|
---|
| 1092 | NAMESPACE => 'mwg-kw',
|
---|
| 1093 | Hierarchy => { Struct => \%sKeywordStruct1, List => 'Bag' },
|
---|
| 1094 | },
|
---|
| 1095 | },
|
---|
| 1096 | KeywordsHierarchy => { Name => 'HierarchicalKeywords', Flat => 1 },
|
---|
| 1097 | KeywordsHierarchyKeyword => { Name => 'HierarchicalKeywords1', Flat => 1 },
|
---|
| 1098 | KeywordsHierarchyApplied => { Name => 'HierarchicalKeywords1Applied', Flat => 1 },
|
---|
| 1099 | KeywordsHierarchyChildren => { Name => 'HierarchicalKeywords1Children', Flat => 1 },
|
---|
| 1100 | KeywordsHierarchyChildrenKeyword => { Name => 'HierarchicalKeywords2', Flat => 1 },
|
---|
| 1101 | KeywordsHierarchyChildrenApplied => { Name => 'HierarchicalKeywords2Applied', Flat => 1 },
|
---|
| 1102 | KeywordsHierarchyChildrenChildren => { Name => 'HierarchicalKeywords2Children', Flat => 1 },
|
---|
| 1103 | KeywordsHierarchyChildrenChildrenKeyword => { Name => 'HierarchicalKeywords3', Flat => 1 },
|
---|
| 1104 | KeywordsHierarchyChildrenChildrenApplied => { Name => 'HierarchicalKeywords3Applied', Flat => 1 },
|
---|
| 1105 | KeywordsHierarchyChildrenChildrenChildren => { Name => 'HierarchicalKeywords3Children', Flat => 1 },
|
---|
| 1106 | KeywordsHierarchyChildrenChildrenChildrenKeyword => { Name => 'HierarchicalKeywords4', Flat => 1 },
|
---|
| 1107 | KeywordsHierarchyChildrenChildrenChildrenApplied => { Name => 'HierarchicalKeywords4Applied', Flat => 1 },
|
---|
| 1108 | );
|
---|
| 1109 |
|
---|
| 1110 | # MWG 2.0 collections schema tags
|
---|
| 1111 | %Image::ExifTool::XMP::mwg_coll = (
|
---|
| 1112 | %xmpTableDefaults,
|
---|
| 1113 | GROUPS => { 1 => 'XMP-mwg-coll', 2 => 'Image' },
|
---|
| 1114 | NAMESPACE => 'mwg-coll',
|
---|
| 1115 | NOTES => q{
|
---|
| 1116 | Collections metadata defined by the MWG 2.0 specification. See
|
---|
| 1117 | L<http://www.metadataworkinggroup.org/> for the official specification.
|
---|
| 1118 | },
|
---|
| 1119 | Collections => {
|
---|
| 1120 | List => 'Bag',
|
---|
| 1121 | Struct => {
|
---|
| 1122 | STRUCT_NAME => 'CollectionInfo',
|
---|
| 1123 | NAMESPACE => 'mwg-coll',
|
---|
| 1124 | CollectionName => { },
|
---|
| 1125 | CollectionURI => { },
|
---|
| 1126 | },
|
---|
| 1127 | },
|
---|
| 1128 | CollectionsCollectionName => { Name => 'CollectionName', Flat => 1 },
|
---|
| 1129 | CollectionsCollectionURI => { Name => 'CollectionURI', Flat => 1 },
|
---|
| 1130 | );
|
---|
| 1131 |
|
---|
| 1132 | # SVG schema properties (ref 9)
|
---|
| 1133 | %Image::ExifTool::XMP::SVG = (
|
---|
| 1134 | GROUPS => { 0 => 'SVG', 1 => 'SVG', 2 => 'Image' },
|
---|
| 1135 | NAMESPACE => 'svg',
|
---|
| 1136 | LANG_INFO => \&GetLangInfo,
|
---|
| 1137 | NOTES => q{
|
---|
| 1138 | SVG (Scalable Vector Graphics) image tags. By default, only the top-level
|
---|
| 1139 | SVG and Metadata tags are extracted from these images, but all graphics tags
|
---|
| 1140 | may be extracted by setting the Unknown option to 2 (-U on the command
|
---|
| 1141 | line). The SVG tags are not part of XMP as such, but are included with the
|
---|
| 1142 | XMP module for convenience. (see L<http://www.w3.org/TR/SVG11/>)
|
---|
| 1143 | },
|
---|
| 1144 | version => 'SVGVersion',
|
---|
| 1145 | id => 'ID',
|
---|
| 1146 | metadataId => 'MetadataID',
|
---|
| 1147 | width => 'ImageWidth',
|
---|
| 1148 | height => 'ImageHeight',
|
---|
| 1149 | );
|
---|
| 1150 |
|
---|
| 1151 | # table to add tags in other namespaces
|
---|
| 1152 | %Image::ExifTool::XMP::otherSVG = (
|
---|
| 1153 | GROUPS => { 0 => 'SVG', 2 => 'Unknown' },
|
---|
| 1154 | LANG_INFO => \&GetLangInfo,
|
---|
| 1155 | NAMESPACE => undef, # variable namespace
|
---|
| 1156 | );
|
---|
| 1157 |
|
---|
| 1158 | # set "Avoid" flag for all PRISM tags
|
---|
| 1159 | my ($table, $key);
|
---|
| 1160 | foreach $table (
|
---|
| 1161 | \%Image::ExifTool::XMP::prism,
|
---|
| 1162 | \%Image::ExifTool::XMP::prl,
|
---|
| 1163 | \%Image::ExifTool::XMP::pur)
|
---|
| 1164 | {
|
---|
| 1165 | foreach $key (TagTableKeys($table)) {
|
---|
| 1166 | $table->{$key}->{Avoid} = 1;
|
---|
| 1167 | }
|
---|
| 1168 | }
|
---|
| 1169 |
|
---|
| 1170 |
|
---|
| 1171 | 1; #end
|
---|
| 1172 |
|
---|
| 1173 | __END__
|
---|
| 1174 |
|
---|
| 1175 | =head1 NAME
|
---|
| 1176 |
|
---|
| 1177 | Image::ExifTool::XMP2.pl - Additional XMP schema definitions
|
---|
| 1178 |
|
---|
| 1179 | =head1 SYNOPSIS
|
---|
| 1180 |
|
---|
| 1181 | This module is loaded automatically by Image::ExifTool when required.
|
---|
| 1182 |
|
---|
| 1183 | =head1 DESCRIPTION
|
---|
| 1184 |
|
---|
| 1185 | This file contains definitions for less common XMP schemas.
|
---|
| 1186 |
|
---|
| 1187 | =head1 AUTHOR
|
---|
| 1188 |
|
---|
| 1189 | Copyright 2003-2011, Phil Harvey (phil at owl.phy.queensu.ca)
|
---|
| 1190 |
|
---|
| 1191 | This library is free software; you can redistribute it and/or modify it
|
---|
| 1192 | under the same terms as Perl itself.
|
---|
| 1193 |
|
---|
| 1194 | =head1 REFERENCES
|
---|
| 1195 |
|
---|
| 1196 | =over 4
|
---|
| 1197 |
|
---|
| 1198 | =item L<http://ns.useplus.org/>
|
---|
| 1199 |
|
---|
| 1200 | =item L<http://www.prismstandard.org/>
|
---|
| 1201 |
|
---|
| 1202 | =item L<http://www.portfoliofaq.com/pfaq/v7mappings.htm>
|
---|
| 1203 |
|
---|
| 1204 | =item L<http://creativecommons.org/technology/xmp>
|
---|
| 1205 |
|
---|
| 1206 | =item L<http://www.optimasc.com/products/fileid/xmp-extensions.pdf>
|
---|
| 1207 |
|
---|
| 1208 | =item L<http://www.w3.org/TR/SVG11/>
|
---|
| 1209 |
|
---|
| 1210 | =back
|
---|
| 1211 |
|
---|
| 1212 | =head1 SEE ALSO
|
---|
| 1213 |
|
---|
| 1214 | L<Image::ExifTool::TagNames/XMP Tags>,
|
---|
| 1215 | L<Image::ExifTool(3pm)|Image::ExifTool>
|
---|
| 1216 |
|
---|
| 1217 | =cut
|
---|