/// <summary>
        /// Builds the categorisation dictionary where dataflow <see cref="IMaintainableRefObject"/> are keys and lists of
        ///     <see cref="ICategorisationMutableObject"/>
        ///     the value.
        /// </summary>
        /// <param name="categorisations">
        /// The categorisations.
        /// </param>
        /// <param name="itemScheme">
        /// The Category Scheme
        /// </param>
        /// <returns>
        /// The categorisation dictionary
        /// </returns>
        private static IDictionaryOfLists<string, ICategorisationMutableObject> BuildCategorisationMap(
            IEnumerable<ICategorisationMutableObject> categorisations, IMaintainableMutableObject itemScheme)
        {
            var categorisationMap = new DictionaryOfLists<string, ICategorisationMutableObject>(StringComparer.Ordinal);
            var categorySchemeRef = new MaintainableRefObjectImpl(
                itemScheme.AgencyId, itemScheme.Id, itemScheme.Version);
            foreach (ICategorisationMutableObject categorisation in categorisations)
            {
                IStructureReference structureReference = categorisation.StructureReference;
                switch (structureReference.MaintainableStructureEnumType.EnumType)
                {
                    case SdmxStructureEnumType.Dataflow:
                        IStructureReference categoryRef = categorisation.CategoryReference;
                        if (categorySchemeRef.Equals(categoryRef.MaintainableReference))
                        {
                            IList<ICategorisationMutableObject> categoryDataflows;
                            string categoryId = categoryRef.ChildReference.GetLastId();
                            if (!categorisationMap.TryGetValue(categoryId, out categoryDataflows))
                            {
                                categoryDataflows = new List<ICategorisationMutableObject>();
                                categorisationMap.Add(categoryId, categoryDataflows);
                            }

                            categoryDataflows.Add(categorisation);
                        }

                        break;
                }
            }

            return categorisationMap;
        }
        /// <summary>
        /// Builds the categorisation dictionary where dataflow <see cref="IMaintainableRefObject"/> are keys and lists of
        ///     <see cref="ICategorisationMutableObject"/>
        ///     the value.
        /// </summary>
        /// <param name="categorisations">
        /// The categorisations.
        /// </param>
        /// <returns>
        /// The categorisation dictionary
        /// </returns>
        private static IDictionaryOfLists<IMaintainableRefObject, ICategorisationMutableObject> BuildCategorisationMap(
            IEnumerable<ICategorisationMutableObject> categorisations)
        {
            var categorisationMap = new DictionaryOfLists<IMaintainableRefObject, ICategorisationMutableObject>();
            foreach (ICategorisationMutableObject categorisation in categorisations)
            {
                IStructureReference structureReference = categorisation.StructureReference;
                switch (structureReference.MaintainableStructureEnumType.EnumType)
                {
                    case SdmxStructureEnumType.Dataflow:
                        IList<ICategorisationMutableObject> dataflowCategories;
                        IMaintainableRefObject dataflowReference = structureReference.MaintainableReference;
                        if (!categorisationMap.TryGetValue(dataflowReference, out dataflowCategories))
                        {
                            dataflowCategories = new List<ICategorisationMutableObject>();
                            categorisationMap.Add(dataflowReference, dataflowCategories);
                        }

                        dataflowCategories.Add(categorisation);

                        break;
                }
            }

            return categorisationMap;
        }