/// <summary>
        /// Gets the DSPL data controller for SDMX v2.0 SOAP or REST.
        /// </summary>
        /// <param name="dataFormat">
        /// The compact data format.
        /// </param>
        /// <param name="sdmxSchema">
        /// The SDMX schema V20.
        /// </param>
        /// <param name="principal">
        /// The principal.
        /// </param>
        /// <returns>
        /// The <see cref="IController{XmlNode,XmlWriter}"/>.
        /// </returns>
        //private DsplDataController<DsplTextWriter> GetDsplDataController(BaseDataFormat dataFormat, SdmxSchema sdmxSchema, DataflowPrincipal principal)
        //{
        //    DsplDataController<DsplTextWriter> dsplDataController;

        //    var dataWriterBuilder = new DsplDataWriterBuilder(dataFormat, sdmxSchema);
        //    var dsplDataResponseGenerator = new DsplDataResponseGenerator<DsplTextWriter>(this.GetDataRetrievalWithWriter(sdmxSchema.EnumType), dataWriterBuilder);
        //    dsplDataController = new DsplDataController<DsplTextWriter>(dsplDataResponseGenerator, new DataRequestValidator(dataFormat, sdmxSchema), principal);

        //    return dsplDataController;
        //}

        private DsplDataController<DsplTextWriter> GetDsplDataController(DataflowPrincipal principal)
        {
            DsplDataController<DsplTextWriter> dsplDataController;

            var dataWriterBuilder = new DsplDataWriterBuilder();
            var dsplDataResponseGenerator = new DsplDataResponseGenerator<DsplTextWriter>(this.GetDataRetrievalWithWriter(), dataWriterBuilder);
            dsplDataController = new DsplDataController<DsplTextWriter>(dsplDataResponseGenerator, new DsplDataFormat.Controller.DataRequestValidator(), principal);

            return dsplDataController;
        }
        /// <summary>
        /// Builds the DSPL data controller for SDMX V21.
        /// </summary>
        /// <param name="principal">
        /// The principal.
        /// </param>
        /// <param name="baseDataFormat">
        /// The base data format.
        /// </param>
        /// <param name="sdmxSchema">
        /// The SDMX schema.
        /// </param>
        /// <returns>
        /// The <see cref="IController{XmlNode,XmlWriter}"/>.
        /// </returns>
        /// <exception cref="SdmxSemmanticException">
        /// Impossible request. Requested CrossSectional for SDMX v2.1.
        /// </exception>
        public IController<IRestDataQuery, DsplTextWriter> BuildDsplDataRest(DataflowPrincipal principal, BaseDataFormat baseDataFormat, SdmxSchema sdmxSchema)
        {
            DsplDataController<DsplTextWriter> dsplDataController;

            var dataWriterBuilder = new DsplDataWriterBuilder(baseDataFormat, sdmxSchema);            
            var dsplDataResponseGenerator = new DsplDataResponseGenerator<DsplTextWriter>(this.GetDataRetrievalWithWriter(sdmxSchema.EnumType), dataWriterBuilder);
            dsplDataController = new DsplDataController<DsplTextWriter>(dsplDataResponseGenerator, new DataRequestValidator(baseDataFormat, sdmxSchema), principal);

            return dsplDataController;

        }