Options for XMPSchemaRegistryImpl#registerAlias. @since 20.02.2006
Inheritance: XmpOptions
        /// <summary>
        /// Register the standard aliases.
        /// Note: This method is not lock because only called by the constructor.
        /// </summary>
        /// <exception cref="XmpException"> If the registrations of at least one alias fails. </exception>
        private void RegisterStandardAliases() {
            AliasOptions aliasToArrayOrdered = new AliasOptions();
            aliasToArrayOrdered.ArrayOrdered = true;

            AliasOptions aliasToArrayAltText = new AliasOptions();
            aliasToArrayAltText.ArrayAltText = true;


            // Aliases from XMP to DC.
            RegisterAlias(NS_XMP, "Author", NS_DC, "creator", aliasToArrayOrdered);
            RegisterAlias(NS_XMP, "Authors", NS_DC, "creator", null);
            RegisterAlias(NS_XMP, "Description", NS_DC, "description", null);
            RegisterAlias(NS_XMP, "Format", NS_DC, "format", null);
            RegisterAlias(NS_XMP, "Keywords", NS_DC, "subject", null);
            RegisterAlias(NS_XMP, "Locale", NS_DC, "language", null);
            RegisterAlias(NS_XMP, "Title", NS_DC, "title", null);
            RegisterAlias(NS_XMP_RIGHTS, "Copyright", NS_DC, "rights", null);

            // Aliases from PDF to DC and XMP.
            RegisterAlias(NS_PDF, "Author", NS_DC, "creator", aliasToArrayOrdered);
            RegisterAlias(NS_PDF, "BaseURL", NS_XMP, "BaseURL", null);
            RegisterAlias(NS_PDF, "CreationDate", NS_XMP, "CreateDate", null);
            RegisterAlias(NS_PDF, "Creator", NS_XMP, "CreatorTool", null);
            RegisterAlias(NS_PDF, "ModDate", NS_XMP, "ModifyDate", null);
            RegisterAlias(NS_PDF, "Subject", NS_DC, "description", aliasToArrayAltText);
            RegisterAlias(NS_PDF, "Title", NS_DC, "title", aliasToArrayAltText);

            // Aliases from PHOTOSHOP to DC and XMP.
            RegisterAlias(NS_PHOTOSHOP, "Author", NS_DC, "creator", aliasToArrayOrdered);
            RegisterAlias(NS_PHOTOSHOP, "Caption", NS_DC, "description", aliasToArrayAltText);
            RegisterAlias(NS_PHOTOSHOP, "Copyright", NS_DC, "rights", aliasToArrayAltText);
            RegisterAlias(NS_PHOTOSHOP, "Keywords", NS_DC, "subject", null);
            RegisterAlias(NS_PHOTOSHOP, "Marked", NS_XMP_RIGHTS, "Marked", null);
            RegisterAlias(NS_PHOTOSHOP, "Title", NS_DC, "title", aliasToArrayAltText);
            RegisterAlias(NS_PHOTOSHOP, "WebStatement", NS_XMP_RIGHTS, "WebStatement", null);

            // Aliases from TIFF and EXIF to DC and XMP.
            RegisterAlias(NS_TIFF, "Artist", NS_DC, "creator", aliasToArrayOrdered);
            RegisterAlias(NS_TIFF, "Copyright", NS_DC, "rights", null);
            RegisterAlias(NS_TIFF, "DateTime", NS_XMP, "ModifyDate", null);
            RegisterAlias(NS_TIFF, "ImageDescription", NS_DC, "description", null);
            RegisterAlias(NS_TIFF, "Software", NS_XMP, "CreatorTool", null);

            // Aliases from PNG (Acrobat ImageCapture) to DC and XMP.
            RegisterAlias(NS_PNG, "Author", NS_DC, "creator", aliasToArrayOrdered);
            RegisterAlias(NS_PNG, "Copyright", NS_DC, "rights", aliasToArrayAltText);
            RegisterAlias(NS_PNG, "CreationTime", NS_XMP, "CreateDate", null);
            RegisterAlias(NS_PNG, "Description", NS_DC, "description", aliasToArrayAltText);
            RegisterAlias(NS_PNG, "ModificationTime", NS_XMP, "ModifyDate", null);
            RegisterAlias(NS_PNG, "Software", NS_XMP, "CreatorTool", null);
            RegisterAlias(NS_PNG, "Title", NS_DC, "title", aliasToArrayAltText);
        }
 public XmpAliasInfoImpl(string @namespace, string prefix, string propName, AliasOptions aliasForm) {
     _namespace = @namespace;
     _prefix = prefix;
     _propName = propName;
     _aliasForm = aliasForm;
 }
        private void RegisterAlias(string aliasNs, string aliasProp, string actualNs, string actualProp,
                                   AliasOptions aliasForm) {
            ParameterAsserts.AssertSchemaNs(aliasNs);
            ParameterAsserts.AssertPropName(aliasProp);
            ParameterAsserts.AssertSchemaNs(actualNs);
            ParameterAsserts.AssertPropName(actualProp);

            // Fix the alias options
            AliasOptions aliasOpts = aliasForm != null
                                         ? new AliasOptions(
                                               XmpNodeUtils.VerifySetOptions(aliasForm.ToPropertyOptions(), null).
                                                   Options)
                                         : new AliasOptions();
            if (_regex.IsMatch(aliasProp) || _regex.IsMatch(actualProp)) {
                throw new XmpException("Alias and actual property names must be simple", XmpError.BADXPATH);
            }

            // check if both namespaces are registered
            string aliasPrefix = GetNamespacePrefix(aliasNs);
            string actualPrefix = GetNamespacePrefix(actualNs);
            if (aliasPrefix == null) {
                throw new XmpException("Alias namespace is not registered", XmpError.BADSCHEMA);
            }
            if (actualPrefix == null) {
                throw new XmpException("Actual namespace is not registered", XmpError.BADSCHEMA);
            }

            string key = aliasPrefix + aliasProp;

            // check if alias is already existing
            if (_aliasMap.Contains(key)) {
                throw new XmpException("Alias is already existing", XmpError.BADPARAM);
            }
            if (_aliasMap.Contains(actualPrefix + actualProp)) {
                throw new XmpException("Actual property is already an alias, use the base property",
                                       XmpError.BADPARAM);
            }

            IXmpAliasInfo aliasInfo = new XmpAliasInfoImpl(actualNs, actualPrefix, actualProp, aliasOpts);

            _aliasMap[key] = aliasInfo;
        }