Example #1
0
        /// <summary>
        /// Creates a XSTL-based ISO Schematron validator.
        /// </summary>
        /// <remarks>
        /// <para>
        /// The purpose is to precompute the XSTL in order to validate then
        /// many XML documents using the same schema.
        /// </para>
        /// <para>
        /// The performance of this method in not that interesing.
        /// </para>
        /// </remarks>
        /// <param name="xSchema">Schematron schema for validation</param>
        /// <returns>Schematron validator with a precomputed XSLT transform</returns>
        public static Validator Create(XDocument xSchema)
        {
            Validator validator = new Validator();

            XslCompiledTransform xsl1 = LoadXsl("iso_dsdl_include.xsl");
            XslCompiledTransform xsl2 = LoadXsl("iso_abstract_expand.xsl");
            XslCompiledTransform xsl3 = LoadXsl("iso_svrl_for_xslt1.xsl");

            XmlDocument xDoc0 = new XmlDocument();
            xDoc0.LoadXml(xSchema.ToString());

            XmlDocument xDoc1 = Transform(xsl1, xDoc0);
            XmlDocument xDoc2 = Transform(xsl2, xDoc1);
            XmlDocument xDoc3 = Transform(xsl3, xDoc2);

            validator.xslTranform = new XslCompiledTransform();
            validator.xslTranform.Load(xDoc3);

            return validator;
        }
Example #2
0
        private static Validator CreateWithMeasurement(XDocument xSchema)
        {
            Validator validator = new Validator();

            XslCompiledTransform xsl1 = LoadXsl("iso_dsdl_include.xsl");
            XslCompiledTransform xsl2 = LoadXsl("iso_abstract_expand.xsl");
            XslCompiledTransform xsl3 = LoadXsl("iso_svrl_for_xslt1.xsl");

            int iterationCount = 1000;
            Console.WriteLine("Action description: Create XSLT validator");
            Console.WriteLine("Number of iterations: {0}", iterationCount);

            Stopwatch stopWatch = new Stopwatch();
            stopWatch.Reset();
            stopWatch.Start();

            for (int i = 0; i < iterationCount; i++)
            {
                XmlDocument xDoc0 = new XmlDocument();
                xDoc0.LoadXml(xSchema.ToString());

                XmlDocument xDoc1 = Transform(xsl1, xDoc0);
                XmlDocument xDoc2 = Transform(xsl2, xDoc1);
                XmlDocument xDoc3 = Transform(xsl3, xDoc2);

                validator.xslTranform = new XslCompiledTransform();
                validator.xslTranform.Load(xDoc3);

            }
            stopWatch.Stop();
            float avgTime = stopWatch.ElapsedMilliseconds / (float)iterationCount;
            Console.WriteLine("Total time: {0} ms", stopWatch.ElapsedMilliseconds);
            Console.WriteLine("Average time: {0} ms", avgTime);
            Console.WriteLine("Throughput: {0} / sec", 1000 / avgTime);
            Console.WriteLine();

            return validator;
        }