1 // ================================================================================================= 2 // ADOBE SYSTEMS INCORPORATED 3 // Copyright 2006 Adobe Systems Incorporated 4 // All Rights Reserved 5 // 6 // NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms 7 // of the Adobe license agreement accompanying it. 8 // ================================================================================================= 9 10 package com.adobe.xmp; 11 12 import java.util.Calendar; 13 14 import com.adobe.xmp.options.IteratorOptions; 15 import com.adobe.xmp.options.ParseOptions; 16 import com.adobe.xmp.options.PropertyOptions; 17 import com.adobe.xmp.properties.XMPProperty; 18 19 20 /** 21 * This class represents the set of XMP metadata as a DOM representation. It has methods to read and 22 * modify all kinds of properties, create an iterator over all properties and serialize the metadata 23 * to a String, byte-array or <code>OutputStream</code>. 24 * 25 * @since 20.01.2006 26 */ 27 public interface XMPMeta extends Cloneable 28 { 29 // --------------------------------------------------------------------------------------------- 30 // Basic property manipulation functions 31 32 /** 33 * The property value getter-methods all take a property specification: the first two parameters 34 * are always the top level namespace URI (the "schema" namespace) and the basic name 35 * of the property being referenced. See the introductory discussion of path expression usage 36 * for more information. 37 * <p> 38 * All of the functions return an object inherited from <code>PropertyBase</code> or 39 * <code>null</code> if the property does not exists. The result object contains the value of 40 * the property and option flags describing the property. Arrays and the non-leaf levels of 41 * nodes do not have values. 42 * <p> 43 * See {@link PropertyOptions} for detailed information about the options. 44 * <p> 45 * This is the simplest property getter, mainly for top level simple properties or after using 46 * the path composition functions in XMPPathFactory. 47 * 48 * @param schemaNS The namespace URI for the property. May be <code>null</code> or the empty 49 * string if the first component of the propName path contains a namespace prefix. The 50 * URI must be for a registered namespace. 51 * @param propName The name of the property. May be a general path expression, must not be 52 * <code>null</code> or the empty string. Using a namespace prefix on the first 53 * component is optional. If present without a schemaNS value then the prefix specifies 54 * the namespace. The prefix must be for a registered namespace. If both a schemaNS URI 55 * and propName prefix are present, they must be corresponding parts of a registered 56 * namespace. 57 * @return Returns a <code>XMPProperty</code> containing the value and the options or 58 * <code>null</code> if the property does not exist. 59 * @throws XMPException Wraps all errors and exceptions that may occur. 60 */ getProperty(String schemaNS, String propName)61 XMPProperty getProperty(String schemaNS, String propName) throws XMPException; 62 63 64 /** 65 * Provides access to items within an array. The index is passed as an integer, you need not 66 * worry about the path string syntax for array items, convert a loop index to a string, etc. 67 * 68 * @param schemaNS The namespace URI for the array. Has the same usage as in getProperty. 69 * @param arrayName The name of the array. May be a general path expression, must not be 70 * <code>null</code> or the empty string. Has the same namespace prefix usage as 71 * propName in <code>getProperty()</code>. 72 * @param itemIndex The index of the desired item. Arrays in XMP are indexed from 1. The 73 * constant {@link XMPConst#ARRAY_LAST_ITEM} always refers to the last existing array 74 * item. 75 * @return Returns a <code>XMPProperty</code> containing the value and the options or 76 * <code>null</code> if the property does not exist. 77 * @throws XMPException Wraps all errors and exceptions that may occur. 78 */ getArrayItem(String schemaNS, String arrayName, int itemIndex)79 XMPProperty getArrayItem(String schemaNS, String arrayName, int itemIndex) throws XMPException; 80 81 82 /** 83 * Returns the number of items in the array. 84 * 85 * @param schemaNS The namespace URI for the array. Has the same usage as in getProperty. 86 * @param arrayName The name of the array. May be a general path expression, must not be 87 * <code>null</code> or the empty string. Has the same namespace prefix usage as 88 * propName in <code>getProperty()</code>. 89 * @return Returns the number of items in the array. 90 * @throws XMPException Wraps all errors and exceptions that may occur. 91 */ countArrayItems(String schemaNS, String arrayName)92 int countArrayItems(String schemaNS, String arrayName) throws XMPException; 93 94 95 /** 96 * Provides access to fields within a nested structure. The namespace for the field is passed as 97 * a URI, you need not worry about the path string syntax. 98 * <p> 99 * The names of fields should be XML qualified names, that is within an XML namespace. The path 100 * syntax for a qualified name uses the namespace prefix. This is unreliable since the prefix is 101 * never guaranteed. The URI is the formal name, the prefix is just a local shorthand in a given 102 * sequence of XML text. 103 * 104 * @param schemaNS The namespace URI for the struct. Has the same usage as in getProperty. 105 * @param structName The name of the struct. May be a general path expression, must not be 106 * <code>null</code> or the empty string. Has the same namespace prefix usage as 107 * propName in <code>getProperty()</code>. 108 * @param fieldNS The namespace URI for the field. Has the same URI and prefix usage as the 109 * schemaNS parameter. 110 * @param fieldName The name of the field. Must be a single XML name, must not be 111 * <code>null</code> or the empty string. Has the same namespace prefix usage as the 112 * structName parameter. 113 * @return Returns a <code>XMPProperty</code> containing the value and the options or 114 * <code>null</code> if the property does not exist. Arrays and non-leaf levels of 115 * structs do not have values. 116 * @throws XMPException Wraps all errors and exceptions that may occur. 117 */ getStructField( String schemaNS, String structName, String fieldNS, String fieldName)118 XMPProperty getStructField( 119 String schemaNS, 120 String structName, 121 String fieldNS, 122 String fieldName) throws XMPException; 123 124 125 /** 126 * Provides access to a qualifier attached to a property. The namespace for the qualifier is 127 * passed as a URI, you need not worry about the path string syntax. In many regards qualifiers 128 * are like struct fields. See the introductory discussion of qualified properties for more 129 * information. 130 * <p> 131 * The names of qualifiers should be XML qualified names, that is within an XML namespace. The 132 * path syntax for a qualified name uses the namespace prefix. This is unreliable since the 133 * prefix is never guaranteed. The URI is the formal name, the prefix is just a local shorthand 134 * in a given sequence of XML text. 135 * <p> 136 * <em>Note:</em> Qualifiers are only supported for simple leaf properties at this time. 137 * 138 * @param schemaNS The namespace URI for the struct. Has the same usage as in getProperty. 139 * @param propName The name of the property to which the qualifier is attached. May be a general 140 * path expression, must not be <code>null</code> or the empty string. Has the same 141 * namespace prefix usage as in <code>getProperty()</code>. 142 * @param qualNS The namespace URI for the qualifier. Has the same URI and prefix usage as the 143 * schemaNS parameter. 144 * @param qualName The name of the qualifier. Must be a single XML name, must not be 145 * <code>null</code> or the empty string. Has the same namespace prefix usage as the 146 * propName parameter. 147 * @return Returns a <code>XMPProperty</code> containing the value and the options of the 148 * qualifier or <code>null</code> if the property does not exist. The name of the 149 * qualifier must be a single XML name, must not be <code>null</code> or the empty 150 * string. Has the same namespace prefix usage as the propName parameter. 151 * <p> 152 * The value of the qualifier is only set if it has one (Arrays and non-leaf levels of 153 * structs do not have values). 154 * @throws XMPException Wraps all errors and exceptions that may occur. 155 */ getQualifier( String schemaNS, String propName, String qualNS, String qualName)156 XMPProperty getQualifier( 157 String schemaNS, 158 String propName, 159 String qualNS, 160 String qualName) throws XMPException; 161 162 163 164 // --------------------------------------------------------------------------------------------- 165 // Functions for setting property values 166 167 /** 168 * The property value <code>setters</code> all take a property specification, their 169 * differences are in the form of this. The first two parameters are always the top level 170 * namespace URI (the <code>schema</code> namespace) and the basic name of the property being 171 * referenced. See the introductory discussion of path expression usage for more information. 172 * <p> 173 * All of the functions take a string value for the property and option flags describing the 174 * property. The value must be Unicode in UTF-8 encoding. Arrays and non-leaf levels of structs 175 * do not have values. Empty arrays and structs may be created using appropriate option flags. 176 * All levels of structs that is assigned implicitly are created if necessary. appendArayItem 177 * implicitly creates the named array if necessary. 178 * <p> 179 * See {@link PropertyOptions} for detailed information about the options. 180 * <p> 181 * This is the simplest property setter, mainly for top level simple properties or after using 182 * the path composition functions in {@link XMPPathFactory}. 183 * 184 * @param schemaNS The namespace URI for the property. Has the same usage as in getProperty. 185 * @param propName The name of the property. 186 * Has the same usage as in <code>getProperty()</code>. 187 * @param propValue the value for the property (only leaf properties have a value). 188 * Arrays and non-leaf levels of structs do not have values. 189 * Must be <code>null</code> if the value is not relevant.<br/> 190 * The value is automatically detected: Boolean, Integer, Long, Double, XMPDateTime and 191 * byte[] are handled, on all other <code>toString()</code> is called. 192 * 193 * @param options Option flags describing the property. See the earlier description. 194 * @throws XMPException Wraps all errors and exceptions that may occur. 195 */ setProperty( String schemaNS, String propName, Object propValue, PropertyOptions options)196 void setProperty( 197 String schemaNS, 198 String propName, 199 Object propValue, 200 PropertyOptions options) throws XMPException; 201 202 203 /** 204 * @see XMPMeta#setProperty(String, String, Object, PropertyOptions) 205 * 206 * @param schemaNS The namespace URI 207 * @param propName The name of the property 208 * @param propValue the value for the property 209 * @throws XMPException Wraps all errors and exceptions 210 */ setProperty( String schemaNS, String propName, Object propValue)211 void setProperty( 212 String schemaNS, 213 String propName, 214 Object propValue) throws XMPException; 215 216 217 /** 218 * Replaces an item within an array. The index is passed as an integer, you need not worry about 219 * the path string syntax for array items, convert a loop index to a string, etc. The array 220 * passed must already exist. In normal usage the selected array item is modified. A new item is 221 * automatically appended if the index is the array size plus 1. 222 * 223 * @param schemaNS The namespace URI for the array. Has the same usage as in getProperty. 224 * @param arrayName The name of the array. May be a general path expression, must not be 225 * <code>null</code> or the empty string. Has the same namespace prefix usage as 226 * propName in getProperty. 227 * @param itemIndex The index of the desired item. Arrays in XMP are indexed from 1. To address 228 * the last existing item, use {@link XMPMeta#countArrayItems(String, String)} to find 229 * out the length of the array. 230 * @param itemValue the new value of the array item. Has the same usage as propValue in 231 * <code>setProperty()</code>. 232 * @param options the set options for the item. 233 * @throws XMPException Wraps all errors and exceptions that may occur. 234 */ setArrayItem( String schemaNS, String arrayName, int itemIndex, String itemValue, PropertyOptions options)235 void setArrayItem( 236 String schemaNS, 237 String arrayName, 238 int itemIndex, 239 String itemValue, 240 PropertyOptions options) throws XMPException; 241 242 243 /** 244 * @see XMPMeta#setArrayItem(String, String, int, String, PropertyOptions) 245 * 246 * @param schemaNS The namespace URI 247 * @param arrayName The name of the array 248 * @param itemIndex The index to insert the new item 249 * @param itemValue the new value of the array item 250 * @throws XMPException Wraps all errors and exceptions 251 */ setArrayItem( String schemaNS, String arrayName, int itemIndex, String itemValue)252 void setArrayItem( 253 String schemaNS, 254 String arrayName, 255 int itemIndex, 256 String itemValue) throws XMPException; 257 258 259 /** 260 * Inserts an item into an array previous to the given index. The index is passed as an integer, 261 * you need not worry about the path string syntax for array items, convert a loop index to a 262 * string, etc. The array passed must already exist. In normal usage the selected array item is 263 * modified. A new item is automatically appended if the index is the array size plus 1. 264 * 265 * @param schemaNS The namespace URI for the array. Has the same usage as in getProperty. 266 * @param arrayName The name of the array. May be a general path expression, must not be 267 * <code>null</code> or the empty string. Has the same namespace prefix usage as 268 * propName in getProperty. 269 * @param itemIndex The index to insert the new item. Arrays in XMP are indexed from 1. Use 270 * <code>XMPConst.ARRAY_LAST_ITEM</code> to append items. 271 * @param itemValue the new value of the array item. Has the same usage as 272 * propValue in <code>setProperty()</code>. 273 * @param options the set options that decide about the kind of the node. 274 * @throws XMPException Wraps all errors and exceptions that may occur. 275 */ insertArrayItem( String schemaNS, String arrayName, int itemIndex, String itemValue, PropertyOptions options)276 void insertArrayItem( 277 String schemaNS, 278 String arrayName, 279 int itemIndex, 280 String itemValue, 281 PropertyOptions options) throws XMPException; 282 283 284 /** 285 * @see XMPMeta#insertArrayItem(String, String, int, String, PropertyOptions) 286 * 287 * @param schemaNS The namespace URI for the array 288 * @param arrayName The name of the array 289 * @param itemIndex The index to insert the new item 290 * @param itemValue the value of the array item 291 * @throws XMPException Wraps all errors and exceptions 292 */ insertArrayItem( String schemaNS, String arrayName, int itemIndex, String itemValue)293 void insertArrayItem( 294 String schemaNS, 295 String arrayName, 296 int itemIndex, 297 String itemValue) throws XMPException; 298 299 300 /** 301 * Simplifies the construction of an array by not requiring that you pre-create an empty array. 302 * The array that is assigned is created automatically if it does not yet exist. Each call to 303 * appendArrayItem() appends an item to the array. The corresponding parameters have the same 304 * use as setArrayItem(). The arrayOptions parameter is used to specify what kind of array. If 305 * the array exists, it must have the specified form. 306 * 307 * @param schemaNS The namespace URI for the array. Has the same usage as in getProperty. 308 * @param arrayName The name of the array. May be a general path expression, must not be null or 309 * the empty string. Has the same namespace prefix usage as propPath in getProperty. 310 * @param arrayOptions Option flags describing the array form. The only valid options are 311 * <ul> 312 * <li> {@link PropertyOptions#ARRAY}, 313 * <li> {@link PropertyOptions#ARRAY_ORDERED}, 314 * <li> {@link PropertyOptions#ARRAY_ALTERNATE} or 315 * <li> {@link PropertyOptions#ARRAY_ALT_TEXT}. 316 * </ul> 317 * <em>Note:</em> the array options only need to be provided if the array is not 318 * already existing, otherwise you can set them to <code>null</code> or use 319 * {@link XMPMeta#appendArrayItem(String, String, String)}. 320 * @param itemValue the value of the array item. Has the same usage as propValue in getProperty. 321 * @param itemOptions Option flags describing the item to append ({@link PropertyOptions}) 322 * @throws XMPException Wraps all errors and exceptions that may occur. 323 */ appendArrayItem( String schemaNS, String arrayName, PropertyOptions arrayOptions, String itemValue, PropertyOptions itemOptions)324 void appendArrayItem( 325 String schemaNS, 326 String arrayName, 327 PropertyOptions arrayOptions, 328 String itemValue, 329 PropertyOptions itemOptions) throws XMPException; 330 331 332 /** 333 * @see XMPMeta#appendArrayItem(String, String, PropertyOptions, String, PropertyOptions) 334 * 335 * @param schemaNS The namespace URI for the array 336 * @param arrayName The name of the array 337 * @param itemValue the value of the array item 338 * @throws XMPException Wraps all errors and exceptions 339 */ appendArrayItem( String schemaNS, String arrayName, String itemValue)340 void appendArrayItem( 341 String schemaNS, 342 String arrayName, 343 String itemValue) throws XMPException; 344 345 346 /** 347 * Provides access to fields within a nested structure. The namespace for the field is passed as 348 * a URI, you need not worry about the path string syntax. The names of fields should be XML 349 * qualified names, that is within an XML namespace. The path syntax for a qualified name uses 350 * the namespace prefix, which is unreliable because the prefix is never guaranteed. The URI is 351 * the formal name, the prefix is just a local shorthand in a given sequence of XML text. 352 * 353 * @param schemaNS The namespace URI for the struct. Has the same usage as in getProperty. 354 * @param structName The name of the struct. May be a general path expression, must not be null 355 * or the empty string. Has the same namespace prefix usage as propName in getProperty. 356 * @param fieldNS The namespace URI for the field. Has the same URI and prefix usage as the 357 * schemaNS parameter. 358 * @param fieldName The name of the field. Must be a single XML name, must not be null or the 359 * empty string. Has the same namespace prefix usage as the structName parameter. 360 * @param fieldValue the value of thefield, if the field has a value. 361 * Has the same usage as propValue in getProperty. 362 * @param options Option flags describing the field. See the earlier description. 363 * @throws XMPException Wraps all errors and exceptions that may occur. 364 */ setStructField( String schemaNS, String structName, String fieldNS, String fieldName, String fieldValue, PropertyOptions options)365 void setStructField( 366 String schemaNS, 367 String structName, 368 String fieldNS, 369 String fieldName, 370 String fieldValue, 371 PropertyOptions options) throws XMPException; 372 373 374 /** 375 * @see XMPMeta#setStructField(String, String, String, String, String, PropertyOptions) 376 * 377 * @param schemaNS The namespace URI for the struct 378 * @param structName The name of the struct 379 * @param fieldNS The namespace URI for the field 380 * @param fieldName The name of the field 381 * @param fieldValue the value of the field 382 * @throws XMPException Wraps all errors and exceptions 383 */ setStructField( String schemaNS, String structName, String fieldNS, String fieldName, String fieldValue)384 void setStructField( 385 String schemaNS, 386 String structName, 387 String fieldNS, 388 String fieldName, 389 String fieldValue) throws XMPException; 390 391 392 /** 393 * Provides access to a qualifier attached to a property. The namespace for the qualifier is 394 * passed as a URI, you need not worry about the path string syntax. In many regards qualifiers 395 * are like struct fields. See the introductory discussion of qualified properties for more 396 * information. The names of qualifiers should be XML qualified names, that is within an XML 397 * namespace. The path syntax for a qualified name uses the namespace prefix, which is 398 * unreliable because the prefix is never guaranteed. The URI is the formal name, the prefix is 399 * just a local shorthand in a given sequence of XML text. The property the qualifier 400 * will be attached has to exist. 401 * 402 * @param schemaNS The namespace URI for the struct. Has the same usage as in getProperty. 403 * @param propName The name of the property to which the qualifier is attached. Has the same 404 * usage as in getProperty. 405 * @param qualNS The namespace URI for the qualifier. Has the same URI and prefix usage as the 406 * schemaNS parameter. 407 * @param qualName The name of the qualifier. Must be a single XML name, must not be 408 * <code>null</code> or the empty string. Has the same namespace prefix usage as the 409 * propName parameter. 410 * @param qualValue A pointer to the <code>null</code> terminated UTF-8 string that is the 411 * value of the qualifier, if the qualifier has a value. Has the same usage as propValue 412 * in getProperty. 413 * @param options Option flags describing the qualifier. See the earlier description. 414 * @throws XMPException Wraps all errors and exceptions that may occur. 415 */ setQualifier( String schemaNS, String propName, String qualNS, String qualName, String qualValue, PropertyOptions options)416 void setQualifier( 417 String schemaNS, 418 String propName, 419 String qualNS, 420 String qualName, 421 String qualValue, 422 PropertyOptions options) throws XMPException; 423 424 425 /** 426 * @see XMPMeta#setQualifier(String, String, String, String, String, PropertyOptions) 427 * 428 * @param schemaNS The namespace URI for the struct 429 * @param propName The name of the property to which the qualifier is attached 430 * @param qualNS The namespace URI for the qualifier 431 * @param qualName The name of the qualifier 432 * @param qualValue the value of the qualifier 433 * @throws XMPException Wraps all errors and exceptions 434 */ setQualifier( String schemaNS, String propName, String qualNS, String qualName, String qualValue)435 void setQualifier( 436 String schemaNS, 437 String propName, 438 String qualNS, 439 String qualName, 440 String qualValue) throws XMPException; 441 442 443 444 // --------------------------------------------------------------------------------------------- 445 // Functions for deleting and detecting properties. These should be obvious from the 446 // descriptions of the getters and setters. 447 448 /** 449 * Deletes the given XMP subtree rooted at the given property. It is not an error if the 450 * property does not exist. 451 * 452 * @param schemaNS The namespace URI for the property. Has the same usage as in 453 * <code>getProperty()</code>. 454 * @param propName The name of the property. Has the same usage as in getProperty. 455 */ deleteProperty(String schemaNS, String propName)456 void deleteProperty(String schemaNS, String propName); 457 458 459 /** 460 * Deletes the given XMP subtree rooted at the given array item. It is not an error if the array 461 * item does not exist. 462 * 463 * @param schemaNS The namespace URI for the array. Has the same usage as in getProperty. 464 * @param arrayName The name of the array. May be a general path expression, must not be 465 * <code>null</code> or the empty string. Has the same namespace prefix usage as 466 * propName in <code>getProperty()</code>. 467 * @param itemIndex The index of the desired item. Arrays in XMP are indexed from 1. The 468 * constant <code>XMPConst.ARRAY_LAST_ITEM</code> always refers to the last 469 * existing array item. 470 */ deleteArrayItem(String schemaNS, String arrayName, int itemIndex)471 void deleteArrayItem(String schemaNS, String arrayName, int itemIndex); 472 473 474 /** 475 * Deletes the given XMP subtree rooted at the given struct field. It is not an error if the 476 * field does not exist. 477 * 478 * @param schemaNS The namespace URI for the struct. Has the same usage as in 479 * <code>getProperty()</code>. 480 * @param structName The name of the struct. May be a general path expression, must not be 481 * <code>null</code> or the empty string. Has the same namespace prefix usage as 482 * propName in getProperty. 483 * @param fieldNS The namespace URI for the field. Has the same URI and prefix usage as the 484 * schemaNS parameter. 485 * @param fieldName The name of the field. Must be a single XML name, must not be 486 * <code>null</code> or the empty string. Has the same namespace prefix usage as the 487 * structName parameter. 488 */ deleteStructField(String schemaNS, String structName, String fieldNS, String fieldName)489 void deleteStructField(String schemaNS, String structName, String fieldNS, String fieldName); 490 491 492 /** 493 * Deletes the given XMP subtree rooted at the given qualifier. It is not an error if the 494 * qualifier does not exist. 495 * 496 * @param schemaNS The namespace URI for the struct. Has the same usage as in 497 * <code>getProperty()</code>. 498 * @param propName The name of the property to which the qualifier is attached. Has the same 499 * usage as in getProperty. 500 * @param qualNS The namespace URI for the qualifier. Has the same URI and prefix usage as the 501 * schemaNS parameter. 502 * @param qualName The name of the qualifier. Must be a single XML name, must not be 503 * <code>null</code> or the empty string. Has the same namespace prefix usage as the 504 * propName parameter. 505 */ deleteQualifier(String schemaNS, String propName, String qualNS, String qualName)506 void deleteQualifier(String schemaNS, String propName, String qualNS, String qualName); 507 508 509 /** 510 * Returns whether the property exists. 511 * 512 * @param schemaNS The namespace URI for the property. Has the same usage as in 513 * <code>getProperty()</code>. 514 * @param propName The name of the property. 515 * Has the same usage as in <code>getProperty()</code>. 516 * @return Returns true if the property exists. 517 */ doesPropertyExist(String schemaNS, String propName)518 boolean doesPropertyExist(String schemaNS, String propName); 519 520 521 /** 522 * Tells if the array item exists. 523 * 524 * @param schemaNS The namespace URI for the array. Has the same usage as in 525 * <code>getProperty()</code>. 526 * @param arrayName The name of the array. May be a general path expression, must not be 527 * <code>null</code> or the empty string. Has the same namespace prefix usage as 528 * propName in <code>getProperty()</code>. 529 * @param itemIndex The index of the desired item. Arrays in XMP are indexed from 1. The 530 * constant <code>XMPConst.ARRAY_LAST_ITEM</code> always refers to the last 531 * existing array item. 532 * @return Returns <code>true</code> if the array exists, <code>false</code> otherwise. 533 */ doesArrayItemExist(String schemaNS, String arrayName, int itemIndex)534 boolean doesArrayItemExist(String schemaNS, String arrayName, int itemIndex); 535 536 537 /** 538 * DoesStructFieldExist tells if the struct field exists. 539 * 540 * @param schemaNS The namespace URI for the struct. Has the same usage as in 541 * <code>getProperty()</code>. 542 * @param structName The name of the struct. May be a general path expression, must not be 543 * <code>null</code> or the empty string. Has the same namespace prefix usage as 544 * propName in <code>getProperty()</code>. 545 * @param fieldNS The namespace URI for the field. Has the same URI and prefix usage as the 546 * schemaNS parameter. 547 * @param fieldName The name of the field. Must be a single XML name, must not be 548 * <code>null</code> or the empty string. Has the same namespace prefix usage as the 549 * structName parameter. 550 * @return Returns true if the field exists. 551 */ doesStructFieldExist( String schemaNS, String structName, String fieldNS, String fieldName)552 boolean doesStructFieldExist( 553 String schemaNS, 554 String structName, 555 String fieldNS, 556 String fieldName); 557 558 559 /** 560 * DoesQualifierExist tells if the qualifier exists. 561 * 562 * @param schemaNS The namespace URI for the struct. Has the same usage as in 563 * <code>getProperty()</code>. 564 * @param propName The name of the property to which the qualifier is attached. Has the same 565 * usage as in <code>getProperty()</code>. 566 * @param qualNS The namespace URI for the qualifier. Has the same URI and prefix usage as the 567 * schemaNS parameter. 568 * @param qualName The name of the qualifier. Must be a single XML name, must not be 569 * <code>null</code> or the empty string. Has the same namespace prefix usage as the 570 * propName parameter. 571 * @return Returns true if the qualifier exists. 572 */ doesQualifierExist(String schemaNS, String propName, String qualNS, String qualName)573 boolean doesQualifierExist(String schemaNS, String propName, String qualNS, String qualName); 574 575 576 // --------------------------------------------------------------------------------------------- 577 // Specialized Get and Set functions 578 579 /** 580 * These functions provide convenient support for localized text properties, including a number 581 * of special and obscure aspects. Localized text properties are stored in alt-text arrays. They 582 * allow multiple concurrent localizations of a property value, for example a document title or 583 * copyright in several languages. The most important aspect of these functions is that they 584 * select an appropriate array item based on one or two RFC 3066 language tags. One of these 585 * languages, the "specific" language, is preferred and selected if there is an exact match. For 586 * many languages it is also possible to define a "generic" language that may be used if there 587 * is no specific language match. The generic language must be a valid RFC 3066 primary subtag, 588 * or the empty string. For example, a specific language of "en-US" should be used in the US, 589 * and a specific language of "en-UK" should be used in England. It is also appropriate to use 590 * "en" as the generic language in each case. If a US document goes to England, the "en-US" 591 * title is selected by using the "en" generic language and the "en-UK" specific language. It is 592 * considered poor practice, but allowed, to pass a specific language that is just an RFC 3066 593 * primary tag. For example "en" is not a good specific language, it should only be used as a 594 * generic language. Passing "i" or "x" as the generic language is also considered poor practice 595 * but allowed. Advice from the W3C about the use of RFC 3066 language tags can be found at: 596 * http://www.w3.org/International/articles/language-tags/ 597 * <p> 598 * <em>Note:</em> RFC 3066 language tags must be treated in a case insensitive manner. The XMP 599 * Toolkit does this by normalizing their capitalization: 600 * <ul> 601 * <li> The primary subtag is lower case, the suggested practice of ISO 639. 602 * <li> All 2 letter secondary subtags are upper case, the suggested practice of ISO 3166. 603 * <li> All other subtags are lower case. The XMP specification defines an artificial language, 604 * <li>"x-default", that is used to explicitly denote a default item in an alt-text array. 605 * </ul> 606 * The XMP toolkit normalizes alt-text arrays such that the x-default item is the first item. 607 * The SetLocalizedText function has several special features related to the x-default item, see 608 * its description for details. The selection of the array item is the same for GetLocalizedText 609 * and SetLocalizedText: 610 * <ul> 611 * <li> Look for an exact match with the specific language. 612 * <li> If a generic language is given, look for a partial match. 613 * <li> Look for an x-default item. 614 * <li> Choose the first item. 615 * </ul> 616 * A partial match with the generic language is where the start of the item's language matches 617 * the generic string and the next character is '-'. An exact match is also recognized as a 618 * degenerate case. It is fine to pass x-default as the specific language. In this case, 619 * selection of an x-default item is an exact match by the first rule, not a selection by the 620 * 3rd rule. The last 2 rules are fallbacks used when the specific and generic languages fail to 621 * produce a match. <code>getLocalizedText</code> returns information about a selected item in 622 * an alt-text array. The array item is selected according to the rules given above. 623 * 624 * <em>Note:</em> In a future version of this API a method 625 * using Java <code>java.lang.Locale</code> will be added. 626 * 627 * @param schemaNS The namespace URI for the alt-text array. Has the same usage as in 628 * <code>getProperty()</code>. 629 * @param altTextName The name of the alt-text array. May be a general path expression, must not 630 * be <code>null</code> or the empty string. Has the same namespace prefix usage as 631 * propName in <code>getProperty()</code>. 632 * @param genericLang The name of the generic language as an RFC 3066 primary subtag. May be 633 * <code>null</code> or the empty string if no generic language is wanted. 634 * @param specificLang The name of the specific language as an RFC 3066 tag. Must not be 635 * <code>null</code> or the empty string. 636 * @return Returns an <code>XMPProperty</code> containing the value, the actual language and 637 * the options if an appropriate alternate collection item exists, <code>null</code> 638 * if the property. 639 * does not exist. 640 * @throws XMPException Wraps all errors and exceptions that may occur. 641 */ getLocalizedText( String schemaNS, String altTextName, String genericLang, String specificLang)642 XMPProperty getLocalizedText( 643 String schemaNS, 644 String altTextName, 645 String genericLang, 646 String specificLang) throws XMPException; 647 648 649 /** 650 * Modifies the value of a selected item in an alt-text array. Creates an appropriate array item 651 * if necessary, and handles special cases for the x-default item. If the selected item is from 652 * a match with the specific language, the value of that item is modified. If the existing value 653 * of that item matches the existing value of the x-default item, the x-default item is also 654 * modified. If the array only has 1 existing item (which is not x-default), an x-default item 655 * is added with the given value. If the selected item is from a match with the generic language 656 * and there are no other generic matches, the value of that item is modified. If the existing 657 * value of that item matches the existing value of the x-default item, the x-default item is 658 * also modified. If the array only has 1 existing item (which is not x-default), an x-default 659 * item is added with the given value. If the selected item is from a partial match with the 660 * generic language and there are other partial matches, a new item is created for the specific 661 * language. The x-default item is not modified. If the selected item is from the last 2 rules 662 * then a new item is created for the specific language. If the array only had an x-default 663 * item, the x-default item is also modified. If the array was empty, items are created for the 664 * specific language and x-default. 665 * 666 * <em>Note:</em> In a future version of this API a method 667 * using Java <code>java.lang.Locale</code> will be added. 668 * 669 * 670 * @param schemaNS The namespace URI for the alt-text array. Has the same usage as in 671 * <code>getProperty()</code>. 672 * @param altTextName The name of the alt-text array. May be a general path expression, must not 673 * be <code>null</code> or the empty string. Has the same namespace prefix usage as 674 * propName in <code>getProperty()</code>. 675 * @param genericLang The name of the generic language as an RFC 3066 primary subtag. May be 676 * <code>null</code> or the empty string if no generic language is wanted. 677 * @param specificLang The name of the specific language as an RFC 3066 tag. Must not be 678 * <code>null</code> or the empty string. 679 * @param itemValue A pointer to the <code>null</code> terminated UTF-8 string that is the new 680 * value for the appropriate array item. 681 * @param options Option flags, none are defined at present. 682 * @throws XMPException Wraps all errors and exceptions that may occur. 683 */ setLocalizedText( String schemaNS, String altTextName, String genericLang, String specificLang, String itemValue, PropertyOptions options)684 void setLocalizedText( 685 String schemaNS, 686 String altTextName, 687 String genericLang, 688 String specificLang, 689 String itemValue, 690 PropertyOptions options) throws XMPException; 691 692 693 /** 694 * @see XMPMeta#setLocalizedText(String, String, String, String, String, PropertyOptions) 695 * 696 * @param schemaNS The namespace URI for the alt-text array 697 * @param altTextName The name of the alt-text array 698 * @param genericLang The name of the generic language 699 * @param specificLang The name of the specific language 700 * @param itemValue the new value for the appropriate array item 701 * @throws XMPException Wraps all errors and exceptions 702 */ setLocalizedText( String schemaNS, String altTextName, String genericLang, String specificLang, String itemValue)703 void setLocalizedText( 704 String schemaNS, 705 String altTextName, 706 String genericLang, 707 String specificLang, 708 String itemValue) throws XMPException; 709 710 711 712 // --------------------------------------------------------------------------------------------- 713 // Functions accessing properties as binary values. 714 715 716 /** 717 * These are very similar to <code>getProperty()</code> and <code>SetProperty()</code> above, 718 * but the value is returned or provided in a literal form instead of as a UTF-8 string. 719 * The path composition functions in <code>XMPPathFactory</code> may be used to compose an path 720 * expression for fields in nested structures, items in arrays, or qualifiers. 721 * 722 * @param schemaNS The namespace URI for the property. Has the same usage as in 723 * <code>getProperty()</code>. 724 * @param propName The name of the property. 725 * Has the same usage as in <code>getProperty()</code>. 726 * @return Returns a <code>Boolean</code> value or <code>null</code> 727 * if the property does not exist. 728 * @throws XMPException Wraps all exceptions that may occur, 729 * especially conversion errors. 730 */ getPropertyBoolean(String schemaNS, String propName)731 Boolean getPropertyBoolean(String schemaNS, String propName) throws XMPException; 732 733 734 /** 735 * Convenience method to retrieve the literal value of a property. 736 * 737 * @param schemaNS The namespace URI for the property. Has the same usage as in 738 * <code>getProperty()</code>. 739 * @param propName The name of the property. 740 * Has the same usage as in <code>getProperty()</code>. 741 * @return Returns an <code>Integer</code> value or <code>null</code> 742 * if the property does not exist. 743 * @throws XMPException Wraps all exceptions that may occur, 744 * especially conversion errors. 745 */ getPropertyInteger(String schemaNS, String propName)746 Integer getPropertyInteger(String schemaNS, String propName) throws XMPException; 747 748 749 /** 750 * Convenience method to retrieve the literal value of a property. 751 * 752 * @param schemaNS The namespace URI for the property. Has the same usage as in 753 * <code>getProperty()</code>. 754 * @param propName The name of the property. 755 * Has the same usage as in <code>getProperty()</code>. 756 * @return Returns a <code>Long</code> value or <code>null</code> 757 * if the property does not exist. 758 * @throws XMPException Wraps all exceptions that may occur, 759 * especially conversion errors. 760 */ getPropertyLong(String schemaNS, String propName)761 Long getPropertyLong(String schemaNS, String propName) throws XMPException; 762 763 764 /** 765 * Convenience method to retrieve the literal value of a property. 766 * 767 * @param schemaNS The namespace URI for the property. Has the same usage as in 768 * <code>getProperty()</code>. 769 * @param propName The name of the property. 770 * Has the same usage as in <code>getProperty()</code>. 771 * @return Returns a <code>Double</code> value or <code>null</code> 772 * if the property does not exist. 773 * @throws XMPException Wraps all exceptions that may occur, 774 * especially conversion errors. 775 */ getPropertyDouble(String schemaNS, String propName)776 Double getPropertyDouble(String schemaNS, String propName) throws XMPException; 777 778 779 /** 780 * Convenience method to retrieve the literal value of a property. 781 * 782 * @param schemaNS The namespace URI for the property. Has the same usage as in 783 * <code>getProperty()</code>. 784 * @param propName The name of the property. 785 * Has the same usage as in <code>getProperty()</code>. 786 * @return Returns a <code>XMPDateTime</code>-object or <code>null</code> 787 * if the property does not exist. 788 * @throws XMPException Wraps all exceptions that may occur, 789 * especially conversion errors. 790 */ getPropertyDate(String schemaNS, String propName)791 XMPDateTime getPropertyDate(String schemaNS, String propName) throws XMPException; 792 793 794 /** 795 * Convenience method to retrieve the literal value of a property. 796 * 797 * @param schemaNS The namespace URI for the property. Has the same usage as in 798 * <code>getProperty()</code>. 799 * @param propName The name of the property. 800 * Has the same usage as in <code>getProperty()</code>. 801 * @return Returns a Java <code>Calendar</code>-object or <code>null</code> 802 * if the property does not exist. 803 * @throws XMPException Wraps all exceptions that may occur, 804 * especially conversion errors. 805 */ getPropertyCalendar(String schemaNS, String propName)806 Calendar getPropertyCalendar(String schemaNS, String propName) throws XMPException; 807 808 809 /** 810 * Convenience method to retrieve the literal value of a property. 811 * 812 * @param schemaNS The namespace URI for the property. Has the same usage as in 813 * <code>getProperty()</code>. 814 * @param propName The name of the property. 815 * Has the same usage as in <code>getProperty()</code>. 816 * @return Returns a <code>byte[]</code>-array contained the decoded base64 value 817 * or <code>null</code> if the property does not exist. 818 * @throws XMPException Wraps all exceptions that may occur, 819 * especially conversion errors. 820 */ getPropertyBase64(String schemaNS, String propName)821 byte[] getPropertyBase64(String schemaNS, String propName) throws XMPException; 822 823 824 /** 825 * Convenience method to retrieve the literal value of a property. 826 * <em>Note:</em> There is no <code>setPropertyString()</code>, 827 * because <code>setProperty()</code> sets a string value. 828 * 829 * @param schemaNS The namespace URI for the property. Has the same usage as in 830 * <code>getProperty()</code>. 831 * @param propName The name of the property. 832 * Has the same usage as in <code>getProperty()</code>. 833 * @return Returns a <code>String</code> value or <code>null</code> 834 * if the property does not exist. 835 * @throws XMPException Wraps all exceptions that may occur, 836 * especially conversion errors. 837 */ getPropertyString(String schemaNS, String propName)838 String getPropertyString(String schemaNS, String propName) throws XMPException; 839 840 841 /** 842 * Convenience method to set a property to a literal <code>boolean</code> value. 843 * 844 * @param schemaNS The namespace URI for the property. Has the same usage as in 845 * <code>setProperty()</code>. 846 * @param propName The name of the property. 847 * Has the same usage as in <code>getProperty()</code>. 848 * @param propValue the literal property value as <code>boolean</code>. 849 * @param options options of the property to set (optional). 850 * @throws XMPException Wraps all exceptions that may occur. 851 */ setPropertyBoolean( String schemaNS, String propName, boolean propValue, PropertyOptions options)852 void setPropertyBoolean( 853 String schemaNS, 854 String propName, 855 boolean propValue, 856 PropertyOptions options) throws XMPException; 857 858 859 /** 860 * @see XMPMeta#setPropertyBoolean(String, String, boolean, PropertyOptions) 861 * 862 * @param schemaNS The namespace URI for the property 863 * @param propName The name of the property 864 * @param propValue the literal property value as <code>boolean</code> 865 * @throws XMPException Wraps all exceptions 866 */ setPropertyBoolean( String schemaNS, String propName, boolean propValue)867 void setPropertyBoolean( 868 String schemaNS, 869 String propName, 870 boolean propValue) throws XMPException; 871 872 873 /** 874 * Convenience method to set a property to a literal <code>int</code> value. 875 * 876 * @param schemaNS The namespace URI for the property. Has the same usage as in 877 * <code>setProperty()</code>. 878 * @param propName The name of the property. 879 * Has the same usage as in <code>getProperty()</code>. 880 * @param propValue the literal property value as <code>int</code>. 881 * @param options options of the property to set (optional). 882 * @throws XMPException Wraps all exceptions that may occur. 883 */ setPropertyInteger( String schemaNS, String propName, int propValue, PropertyOptions options)884 void setPropertyInteger( 885 String schemaNS, 886 String propName, 887 int propValue, 888 PropertyOptions options) throws XMPException; 889 890 891 /** 892 * @see XMPMeta#setPropertyInteger(String, String, int, PropertyOptions) 893 * 894 * @param schemaNS The namespace URI for the property 895 * @param propName The name of the property 896 * @param propValue the literal property value as <code>int</code> 897 * @throws XMPException Wraps all exceptions 898 */ setPropertyInteger( String schemaNS, String propName, int propValue)899 void setPropertyInteger( 900 String schemaNS, 901 String propName, 902 int propValue) throws XMPException; 903 904 905 /** 906 * Convenience method to set a property to a literal <code>long</code> value. 907 * 908 * @param schemaNS The namespace URI for the property. Has the same usage as in 909 * <code>setProperty()</code>. 910 * @param propName The name of the property. 911 * Has the same usage as in <code>getProperty()</code>. 912 * @param propValue the literal property value as <code>long</code>. 913 * @param options options of the property to set (optional). 914 * @throws XMPException Wraps all exceptions that may occur. 915 */ setPropertyLong( String schemaNS, String propName, long propValue, PropertyOptions options)916 void setPropertyLong( 917 String schemaNS, 918 String propName, 919 long propValue, 920 PropertyOptions options) throws XMPException; 921 922 923 /** 924 * @see XMPMeta#setPropertyLong(String, String, long, PropertyOptions) 925 * 926 * @param schemaNS The namespace URI for the property 927 * @param propName The name of the property 928 * @param propValue the literal property value as <code>long</code> 929 * @throws XMPException Wraps all exceptions 930 */ setPropertyLong( String schemaNS, String propName, long propValue)931 void setPropertyLong( 932 String schemaNS, 933 String propName, 934 long propValue) throws XMPException; 935 936 937 /** 938 * Convenience method to set a property to a literal <code>double</code> value. 939 * 940 * @param schemaNS The namespace URI for the property. Has the same usage as in 941 * <code>setProperty()</code>. 942 * @param propName The name of the property. 943 * Has the same usage as in <code>getProperty()</code>. 944 * @param propValue the literal property value as <code>double</code>. 945 * @param options options of the property to set (optional). 946 * @throws XMPException Wraps all exceptions that may occur. 947 */ setPropertyDouble( String schemaNS, String propName, double propValue, PropertyOptions options)948 void setPropertyDouble( 949 String schemaNS, 950 String propName, 951 double propValue, 952 PropertyOptions options) throws XMPException; 953 954 955 /** 956 * @see XMPMeta#setPropertyDouble(String, String, double, PropertyOptions) 957 * 958 * @param schemaNS The namespace URI for the property 959 * @param propName The name of the property 960 * @param propValue the literal property value as <code>double</code> 961 * @throws XMPException Wraps all exceptions 962 */ setPropertyDouble( String schemaNS, String propName, double propValue)963 void setPropertyDouble( 964 String schemaNS, 965 String propName, 966 double propValue) throws XMPException; 967 968 969 /** 970 * Convenience method to set a property with an XMPDateTime-object, 971 * which is serialized to an ISO8601 date. 972 * 973 * @param schemaNS The namespace URI for the property. Has the same usage as in 974 * <code>setProperty()</code>. 975 * @param propName The name of the property. 976 * Has the same usage as in <code>getProperty()</code>. 977 * @param propValue the property value as <code>XMPDateTime</code>. 978 * @param options options of the property to set (optional). 979 * @throws XMPException Wraps all exceptions that may occur. 980 */ setPropertyDate( String schemaNS, String propName, XMPDateTime propValue, PropertyOptions options)981 void setPropertyDate( 982 String schemaNS, 983 String propName, 984 XMPDateTime propValue, 985 PropertyOptions options) throws XMPException; 986 987 988 /** 989 * @see XMPMeta#setPropertyDate(String, String, XMPDateTime, PropertyOptions) 990 * 991 * @param schemaNS The namespace URI for the property 992 * @param propName The name of the property 993 * @param propValue the property value as <code>XMPDateTime</code> 994 * @throws XMPException Wraps all exceptions 995 */ setPropertyDate( String schemaNS, String propName, XMPDateTime propValue)996 void setPropertyDate( 997 String schemaNS, 998 String propName, 999 XMPDateTime propValue) throws XMPException; 1000 1001 1002 /** 1003 * Convenience method to set a property with a Java Calendar-object, 1004 * which is serialized to an ISO8601 date. 1005 * 1006 * @param schemaNS The namespace URI for the property. Has the same usage as in 1007 * <code>setProperty()</code>. 1008 * @param propName The name of the property. 1009 * Has the same usage as in <code>getProperty()</code>. 1010 * @param propValue the property value as Java <code>Calendar</code>. 1011 * @param options options of the property to set (optional). 1012 * @throws XMPException Wraps all exceptions that may occur. 1013 */ setPropertyCalendar( String schemaNS, String propName, Calendar propValue, PropertyOptions options)1014 void setPropertyCalendar( 1015 String schemaNS, 1016 String propName, 1017 Calendar propValue, 1018 PropertyOptions options) throws XMPException; 1019 1020 1021 /** 1022 * @see XMPMeta#setPropertyCalendar(String, String, Calendar, PropertyOptions) 1023 * 1024 * @param schemaNS The namespace URI for the property 1025 * @param propName The name of the property 1026 * @param propValue the property value as <code>Calendar</code> 1027 * @throws XMPException Wraps all exceptions 1028 */ setPropertyCalendar( String schemaNS, String propName, Calendar propValue)1029 void setPropertyCalendar( 1030 String schemaNS, 1031 String propName, 1032 Calendar propValue) throws XMPException; 1033 1034 1035 /** 1036 * Convenience method to set a property from a binary <code>byte[]</code>-array, 1037 * which is serialized as base64-string. 1038 * 1039 * @param schemaNS The namespace URI for the property. Has the same usage as in 1040 * <code>setProperty()</code>. 1041 * @param propName The name of the property. 1042 * Has the same usage as in <code>getProperty()</code>. 1043 * @param propValue the literal property value as byte array. 1044 * @param options options of the property to set (optional). 1045 * @throws XMPException Wraps all exceptions that may occur. 1046 */ setPropertyBase64( String schemaNS, String propName, byte[] propValue, PropertyOptions options)1047 void setPropertyBase64( 1048 String schemaNS, 1049 String propName, 1050 byte[] propValue, 1051 PropertyOptions options) throws XMPException; 1052 1053 1054 /** 1055 * @see XMPMeta#setPropertyBase64(String, String, byte[], PropertyOptions) 1056 * 1057 * @param schemaNS The namespace URI for the property 1058 * @param propName The name of the property 1059 * @param propValue the literal property value as byte array 1060 * @throws XMPException Wraps all exceptions 1061 */ setPropertyBase64( String schemaNS, String propName, byte[] propValue)1062 void setPropertyBase64( 1063 String schemaNS, 1064 String propName, 1065 byte[] propValue) throws XMPException; 1066 1067 1068 /** 1069 * Constructs an iterator for the properties within this XMP object. 1070 * 1071 * @return Returns an <code>XMPIterator</code>. 1072 * @see XMPMeta#iterator(String, String, IteratorOptions) 1073 * @throws XMPException Wraps all errors and exceptions that may occur. 1074 */ iterator()1075 XMPIterator iterator() throws XMPException; 1076 1077 1078 /** 1079 * Constructs an iterator for the properties within this XMP object using some options. 1080 * 1081 * @param options Option flags to control the iteration. 1082 * @return Returns an <code>XMPIterator</code>. 1083 * @see XMPMeta#iterator(String, String, IteratorOptions) 1084 * @throws XMPException Wraps all errors and exceptions that may occur. 1085 */ iterator(IteratorOptions options)1086 XMPIterator iterator(IteratorOptions options) throws XMPException; 1087 1088 1089 /** 1090 * Construct an iterator for the properties within an XMP object. The general operation of an 1091 * XMP object iterator was. According to the parameters it iterates the entire data tree, 1092 * properties within a specific schema, or a subtree rooted at a specific node. 1093 * 1094 * @param schemaNS Optional schema namespace URI to restrict the iteration. Omitted (visit all 1095 * schema) by passing <code>null</code> or empty String. 1096 * @param propName Optional property name to restrict the iteration. May be an arbitrary path 1097 * expression. Omitted (visit all properties) by passing <code>null</code> or empty 1098 * String. If no schema URI is given, it is ignored. 1099 * @param options Option flags to control the iteration. See {@link IteratorOptions} for 1100 * details. 1101 * @return Returns an <code>XMPIterator</code> for this <code>XMPMeta</code>-object 1102 * considering the given options. 1103 * @throws XMPException Wraps all errors and exceptions that may occur. 1104 */ iterator( String schemaNS, String propName, IteratorOptions options)1105 XMPIterator iterator( 1106 String schemaNS, 1107 String propName, 1108 IteratorOptions options) throws XMPException; 1109 1110 1111 /** 1112 * This correlates to the about-attribute, 1113 * returns the empty String if no name is set. 1114 * 1115 * @return Returns the name of the XMP object. 1116 */ getObjectName()1117 String getObjectName(); 1118 1119 1120 /** 1121 * @param name Sets the name of the XMP object. 1122 */ setObjectName(String name)1123 void setObjectName(String name); 1124 1125 1126 /** 1127 * @return Returns the unparsed content of the <?xpacket> processing instruction. 1128 * This contains normally the attribute-like elements 'begin="<BOM>" 1129 * id="W5M0MpCehiHzreSzNTczkc9d"' and possibly the deprecated elements 'bytes="1234"' or 1130 * 'encoding="XXX"'. If the parsed packet has not been wrapped into an xpacket, 1131 * <code>null</code> is returned. 1132 */ getPacketHeader()1133 String getPacketHeader(); 1134 1135 1136 /** 1137 * Clones the complete metadata tree. 1138 * 1139 * @return Returns a deep copy of this instance. 1140 */ clone()1141 Object clone(); 1142 1143 1144 /** 1145 * Sorts the complete datamodel according to the following rules: 1146 * <ul> 1147 * <li>Schema nodes are sorted by prefix. 1148 * <li>Properties at top level and within structs are sorted by full name, that is 1149 * prefix + local name. 1150 * <li>Array items are not sorted, even if they have no certain order such as bags. 1151 * <li>Qualifier are sorted, with the exception of "xml:lang" and/or "rdf:type" 1152 * that stay at the top of the list in that order. 1153 * </ul> 1154 */ sort()1155 void sort(); 1156 1157 1158 /** 1159 * Perform the normalization as a separate parsing step. 1160 * Normally it is done during parsing, unless the parsing option 1161 * {@link ParseOptions#OMIT_NORMALIZATION} is set to <code>true</code>. 1162 * <em>Note:</em> It does no harm to call this method to an already normalized xmp object. 1163 * It was a PDF/A requirement to get hand on the unnormalized <code>XMPMeta</code> object. 1164 * 1165 * @param options optional parsing options. 1166 * @throws XMPException Wraps all errors and exceptions that may occur. 1167 */ normalize(ParseOptions options)1168 void normalize(ParseOptions options) throws XMPException; 1169 1170 1171 /** 1172 * Renders this node and the tree unter this node in a human readable form. 1173 * @return Returns a multiline string containing the dump. 1174 */ dumpObject()1175 String dumpObject(); 1176 }