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