1f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// ================================================================================================= 2f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// ADOBE SYSTEMS INCORPORATED 3f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// Copyright 2006 Adobe Systems Incorporated 4f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// All Rights Reserved 5f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// 6f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms 7f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// of the Adobe license agreement accompanying it. 8f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// ================================================================================================= 9f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 10f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingpackage com.adobe.xmp; 11f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 12f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport java.util.Map; 13f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 14f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport com.adobe.xmp.properties.XMPAliasInfo; 15f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 16f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling/** 17f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * The schema registry keeps track of all namespaces and aliases used in the XMP 18f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * metadata. At initialisation time, the default namespaces and default aliases 19f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * are automatically registered. <b>Namespaces</b> must be registered before 20f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * used in namespace URI parameters or path expressions. Within the XMP Toolkit 21f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * the registered namespace URIs and prefixes must be unique. Additional 22f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * namespaces encountered when parsing RDF are automatically registered. The 23f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * namespace URI should always end in an XML name separator such as '/' or '#'. 24f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * This is because some forms of RDF shorthand catenate a namespace URI with an 25f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * element name to form a new URI. 26f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <p> 27f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <b>Aliases</b> in XMP serve the same purpose as Windows file shortcuts, 28f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Macintosh file aliases, or UNIX file symbolic links. The aliases are simply 29f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * multiple names for the same property. One distinction of XMP aliases is that 30f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * they are ordered, there is an alias name pointing to an actual name. The 31f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * primary significance of the actual name is that it is the preferred name for 32f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * output, generally the most widely recognized name. 33f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <p> 34f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * The names that can be aliased in XMP are restricted. The alias must be a top 35f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * level property name, not a field within a structure or an element within an 36f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * array. The actual may be a top level property name, the first element within 37f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * a top level array, or the default element in an alt-text array. This does not 38f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * mean the alias can only be a simple property. It is OK to alias a top level 39f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * structure or array to an identical top level structure or array, or to the 40f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * first item of an array of structures. 41f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 42f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @since 27.01.2006 43f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 44f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingpublic interface XMPSchemaRegistry 45f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling{ 46f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling // --------------------------------------------------------------------------------------------- 47f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling // Namespace Functions 48f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 49f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 50f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Register a namespace URI with a suggested prefix. It is not an error if 51f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * the URI is already registered, no matter what the prefix is. If the URI 52f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * is not registered but the suggested prefix is in use, a unique prefix is 53f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * created from the suggested one. The actual registeed prefix is always 54f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * returned. The function result tells if the registered prefix is the 55f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * suggested one. 56f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <p> 57f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Note: No checking is presently done on either the URI or the prefix. 58f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 59f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param namespaceURI 60f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * The URI for the namespace. Must be a valid XML URI. 61f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param suggestedPrefix 62f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * The suggested prefix to be used if the URI is not yet 63f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * registered. Must be a valid XML name. 64f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns the registered prefix for this URI, is equal to the 65f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * suggestedPrefix if the namespace hasn't been registered before, 66f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * otherwise the existing prefix. 67f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @throws XMPException If the parameters are not accordingly set 68f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 69f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling String registerNamespace(String namespaceURI, String suggestedPrefix) throws XMPException; 70f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 71f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 72f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 73f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Obtain the prefix for a registered namespace URI. 74f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <p> 75f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * It is not an error if the namespace URI is not registered. The output 76f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * namespacePrefix string is not modified if the namespace URI is not 77f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * registered. 78f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 79f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param namespaceURI 80f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * The URI for the namespace. Must not be null or the empty 81f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * string. 82f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns true if the namespace URI is registered. 83f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 84f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling String getNamespacePrefix(String namespaceURI); 85f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 86f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 87f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 88f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Obtain the URI for a registered namespace prefix. 89f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <p> 90f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * It is not an error if the namespace prefix is not registered. The output 91f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * namespaceURI string is not modified if the namespace prefix is not 92f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * registered. 93f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 94f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param namespacePrefix 95f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * The prefix for the namespace. Must not be null or the empty 96f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * string. 97f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns the URI registered for this prefix. 98f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 99f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling String getNamespaceURI(String namespacePrefix); 100f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 101f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 102f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 103f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns the registered prefix/namespace-pairs as map, where the keys are the 104f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * namespaces and the values are the prefixes. 105f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 106f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling Map getNamespaces(); 107f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 108f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 109f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 110f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns the registered namespace/prefix-pairs as map, where the keys are the 111f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * prefixes and the values are the namespaces. 112f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 113f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling Map getPrefixes(); 114f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 115f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 116f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 117f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Deletes a namespace from the registry. 118f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <p> 119f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Does nothing if the URI is not registered, or if the namespaceURI 120f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * parameter is null or the empty string. 121f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <p> 122f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Note: Not yet implemented. 123f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 124f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param namespaceURI 125f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * The URI for the namespace. 126f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 127f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling void deleteNamespace(String namespaceURI); 128f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 129f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 130f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 131f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 132f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 133f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling // --------------------------------------------------------------------------------------------- 134f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling // Alias Functions 135f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 136f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 137f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 138f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Determines if a name is an alias, and what it is aliased to. 139f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 140f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param aliasNS 141f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * The namespace URI of the alias. Must not be <code>null</code> or the empty 142f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * string. 143f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param aliasProp 144f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * The name of the alias. May be an arbitrary path expression 145f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * path, must not be <code>null</code> or the empty string. 146f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns the <code>XMPAliasInfo</code> for the given alias namespace and property or 147f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <code>null</code> if there is no such alias. 148f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 149f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling XMPAliasInfo resolveAlias(String aliasNS, String aliasProp); 150f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 151f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 152f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 153f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Collects all aliases that are contained in the provided namespace. 154f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * If nothing is found, an empty array is returned. 155f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 156f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param aliasNS a schema namespace URI 157f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns all alias infos from aliases that are contained in the provided namespace. 158f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 159f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling XMPAliasInfo[] findAliases(String aliasNS); 160f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 161f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 162f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 163f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Searches for registered aliases. 164f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 165f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param qname 166f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * an XML conform qname 167f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns if an alias definition for the given qname to another 168f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * schema and property is registered. 169f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 170f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling XMPAliasInfo findAlias(String qname); 171f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 172f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 173f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 174f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns the registered aliases as map, where the key is the "qname" (prefix and name) 175f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * and the value an <code>XMPAliasInfo</code>-object. 176f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 177f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling Map getAliases(); 178f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 179f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 180f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling}