source: gs2-extensions/parallel-building/trunk/src/perllib/cpan/Image/ExifTool/XMP2.pl@ 24626

Last change on this file since 24626 was 24626, checked in by jmt12, 13 years ago

An (almost) complete copy of the perllib directory from a (circa SEP2011) head checkout from Greenstone 2 trunk - in order to try and make merging in this extension a little easier later on (as there have been some major changes to buildcol.pl commited in the main trunk but not in the x64 branch)

  • Property svn:executable set to *
File size: 43.2 KB
Line 
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
17package Image::ExifTool::XMP;
18
19use strict;
20use Image::ExifTool qw(:Utils);
21use Image::ExifTool::XMP;
22
23# structure definitions
24my %sCuePointParam = (
25 STRUCT_NAME => 'CuePointParam',
26 NAMESPACE => 'xmpDM',
27 key => { },
28 value => { },
29);
30my %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);
46my %sTime = (
47 STRUCT_NAME => 'Time',
48 NAMESPACE => 'xmpDM',
49 scale => { Writable => 'rational' },
50 value => { Writable => 'integer' },
51);
52my %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
298my %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?)
306my %plusLicensee = (
307 STRUCT_NAME => 'Licensee',
308 NAMESPACE => 'plus',
309 TYPE => 'plus:LicenseeDetail',
310 LicenseeID => { },
311 LicenseeName=> { },
312);
313my %plusEndUser = (
314 STRUCT_NAME => 'EndUser',
315 NAMESPACE => 'plus',
316 TYPE => 'plus:EndUserDetail',
317 EndUserID => { },
318 EndUserName => { },
319);
320my %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);
357my %plusCopyrightOwner = (
358 STRUCT_NAME => 'CopyrightOwner',
359 NAMESPACE => 'plus',
360 TYPE => 'plus:CopyrightOwnerDetail',
361 CopyrightOwnerID => { },
362 CopyrightOwnerName => { },
363);
364my %plusImageCreator = (
365 STRUCT_NAME => 'ImageCreator',
366 NAMESPACE => 'plus',
367 TYPE => 'plus:ImageCreatorDetail',
368 ImageCreatorID => { },
369 ImageCreatorName => { },
370);
371my %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
970my %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);
983my %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);
1008my %sKeywordStruct4 = (
1009 STRUCT_NAME => 'KeywordStruct4',
1010 NAMESPACE => 'mwg-kw',
1011 Keyword => { },
1012 Applied => { Writable => 'boolean' },
1013);
1014my %sKeywordStruct3 = (
1015 STRUCT_NAME => 'KeywordStruct3',
1016 NAMESPACE => 'mwg-kw',
1017 Keyword => { },
1018 Applied => { Writable => 'boolean' },
1019 Children => { Struct => \%sKeywordStruct4, List => 'Bag' },
1020);
1021my %sKeywordStruct2 = (
1022 STRUCT_NAME => 'KeywordStruct2',
1023 NAMESPACE => 'mwg-kw',
1024 Keyword => { },
1025 Applied => { Writable => 'boolean' },
1026 Children => { Struct => \%sKeywordStruct3, List => 'Bag' },
1027);
1028my %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
1159my ($table, $key);
1160foreach $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
11711; #end
1172
1173__END__
1174
1175=head1 NAME
1176
1177Image::ExifTool::XMP2.pl - Additional XMP schema definitions
1178
1179=head1 SYNOPSIS
1180
1181This module is loaded automatically by Image::ExifTool when required.
1182
1183=head1 DESCRIPTION
1184
1185This file contains definitions for less common XMP schemas.
1186
1187=head1 AUTHOR
1188
1189Copyright 2003-2011, Phil Harvey (phil at owl.phy.queensu.ca)
1190
1191This library is free software; you can redistribute it and/or modify it
1192under 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
1214L<Image::ExifTool::TagNames/XMP Tags>,
1215L<Image::ExifTool(3pm)|Image::ExifTool>
1216
1217=cut
Note: See TracBrowser for help on using the repository browser.