Esempio n. 1
0
 public void ExtendsRule1()
 {
     SchematronValidator validator = new SchematronValidator(SchematronReader.ReadSchematron("Schematron/Samples/All.sch"));
      XmlDocument doc = new XmlDocument();
      doc.LoadXml("<fixed-element name='x1' xmlns='urn:testing'>bad value</fixed-element>");
      ExceptionAssert.Throws<SchematronValidationException>(() => validator.Validate(doc), "/fixed-element must be 'fixed");
 }
Esempio n. 2
0
        public void Validate(XmlDocument document)
        {
            try
            {
                this.logger.Trace("SchematronValidation");
                if (document == null)
                {
                    throw new SchematronValidationInterceptionEmptyBodyException();
                }

                DocumentTypeConfig           documentType = searcher.FindUniqueDocumentType(document);
                SchematronStore              store        = new SchematronStore();
                SchematronValidationConfig[] schematronValidationConfigCollection = documentType.SchematronValidationConfigs;
                foreach (SchematronValidationConfig schematronValidationConfig in schematronValidationConfigCollection)
                {
                    CompiledXslt        compiledXsltEntry = store.GetCompiledSchematron(schematronValidationConfig.SchematronDocumentPath);
                    SchematronValidator validator         = new SchematronValidator(schematronValidationConfig.ErrorXPath, schematronValidationConfig.ErrorMessageXPath);
                    validator.SchematronValidateXmlDocument(document, compiledXsltEntry);
                }
            }
            catch (SchematronErrorException ex)
            {
                this.logger.Info("XmlDocument rejected, as it contant at least one schematron error.");
                throw new SchematronValidateDocumentFailedException(ex);
            }
            catch (Exception ex)
            {
                this.logger.Error("Schematron validation failed", ex);
                throw new SchematronValidateDocumentFailedException(ex);
            }
        }
Esempio n. 3
0
 public void NameErrorMessage_NoPrefix()
 {
     SchematronValidator validator = new SchematronValidator(SchematronReader.ReadSchematron("Schematron/Samples/All.sch"));
      XmlDocument doc = new XmlDocument();
      doc.LoadXml("<dummy xmlns='urn:testing'/>");
      ExceptionAssert.Throws<SchematronValidationException>(() => validator.Validate(doc), "The element /dummy is not allowed.");
 }
Esempio n. 4
0
        public void Validate_NonIsoDocument_OnText()
        {
            string nonIsoDocument = _fileResolver.GetResourceStream("Generic_CDA_Document_OldSchematron.xml").GetText();
            var    res            = new SchematronValidator(nonIsoDocument, convertToIsoNamespace: true).Validate(_fileResolver.GetResourceStream("POCD_EX150001UK06_05.xml").GetText());

            Assert.True(res.Status);
        }
Esempio n. 5
0
 public void ExtendsRule2()
 {
     SchematronValidator validator = new SchematronValidator(SchematronReader.ReadSchematron("Schematron/Samples/All.sch"));
      XmlDocument doc = new XmlDocument();
      doc.LoadXml("<fixed-element name='X1' xmlns='urn:testing'>fixed</fixed-element>");
      ExceptionAssert.Throws<SchematronValidationException>(() => validator.Validate(doc), "The attribute 'name', of element /fixed-element, is required and must start with 'x'");
 }
Esempio n. 6
0
        private void Validate(string xmlDocumentPath, DocumentTypeConfig documentType)
        {
            Console.WriteLine("{0} Schematron validation started ", DateTime.Now);
            SchematronValidationConfig[] SchematronValidationConfig = documentType.SchematronValidationConfigs;
            XmlDocument document = new XmlDocument();

            Console.WriteLine("{0} Loading Xml Document '{1}'", DateTime.Now, xmlDocumentPath);
            document.Load(xmlDocumentPath);
            Console.WriteLine("{0} Instanciating the validator ", DateTime.Now);
            foreach (SchematronValidationConfig schematronValidationConfig in SchematronValidationConfig)
            {
                try
                {
                    SchematronValidator validator = new SchematronValidator(schematronValidationConfig);
                    Console.WriteLine("{0} Schematron validation", DateTime.Now);
                    validator.SchematronValidateXmlDocument(document);
                }
                catch (Exception ex)
                {
                    Debug.Fail("Something is wrong:" + ex.Message);
                    throw;
                }
            }

            Console.WriteLine("{0} Schematron validation completed", DateTime.Now);
        }
Esempio n. 7
0
        private void InitFromConfiguration(IPreloadedConverterConfiguration configuration)
        {
            if (configuration.TransformStylesheetPath == null)
            {
                throw new ArgumentNullException("configuration.TransformStylesheetPath");
            }
            try {
                XsltSettings   xsltSettings = new XsltSettings(true, true);
                XmlUrlResolver resolver     = new XmlUrlResolver();

                _closeSourceStream = configuration.CloseSourceStream;
                _transform         = new XslCompiledTransform();
                //Tries to load the transformation path, if the path is not absolute and the file
                //does not exists then try with the appdomain base directory as root folder
                string transformationPath = configuration.TransformStylesheetPath;
                if (!Path.IsPathRooted(transformationPath) && !File.Exists(transformationPath))
                {
                    transformationPath = AppDomain.CurrentDomain.BaseDirectory + Path.DirectorySeparatorChar + transformationPath;
                    transformationPath = Path.GetFullPath(transformationPath);
                }

                _transform.Load(transformationPath, xsltSettings, resolver);

                IValidator resultSchemaValidator = null;
                if (TryInitSchemaValidator(configuration.ResultSchemaConfiguration, out resultSchemaValidator))
                {
                    _resultValidators.Add(resultSchemaValidator);
                }

                IValidator sourceSchemaValidator = null;
                if (TryInitSchemaValidator(configuration.SourceSchemaConfiguration, out sourceSchemaValidator))
                {
                    _sourceValidators.Add(sourceSchemaValidator);
                }

                IEnumerable <ISchematronValidatorConfiguration> resultSchematrons = configuration.GetResultSchematronConfigurations();
                if (resultSchematrons != null)
                {
                    foreach (ISchematronValidatorConfiguration schematronConfiguration in resultSchematrons)
                    {
                        SchematronValidator validator = new SchematronValidator(schematronConfiguration);
                        _resultValidators.Add(validator);
                    }
                }

                IEnumerable <ISchematronValidatorConfiguration> sourceSchematrons = configuration.GetSourceSchematronConfigurations();
                if (sourceSchematrons != null)
                {
                    foreach (ISchematronValidatorConfiguration schematronConfiguration in sourceSchematrons)
                    {
                        SchematronValidator validator = new SchematronValidator(schematronConfiguration);
                        _sourceValidators.Add(validator);
                    }
                }
            }
            catch (Exception ex) {
                throw new ConverterException("Initiation of the Converter failed, used stylesheetpath=" + configuration.TransformStylesheetPath, ex);
            }
        }
Esempio n. 8
0
 public void ElementMissing()
 {
     SchematronValidator validator = new SchematronValidator("Schematron/Samples/Person.Xml.Com.sch");
      XmlDocument doc = new XmlDocument();
      doc.LoadXml(
     @"<Person Title='Mr'>
     <Name>Eddie</Name>
     </Person>");
      ExceptionAssert.Throws<SchematronValidationException>(() => validator.Validate(doc), "The element Person should have the child elements Name and Gender.");
 }
Esempio n. 9
0
        // this is likely to be moved to a "cda transformer" when the other renaming issue (MBG-184) is resolved
        public virtual void PerformAdditionalCdaValidation(VersionNumber version, XmlDocument xmlDocument, Hl7Errors errorContainer
                                                           )
        {
            SchematronValidator schematronValidator = new SchematronValidator(this.service.GetAllSchematronContexts(version));

            schematronValidator.Validate(xmlDocument, errorContainer);
            ContainedTemplateValidator containedTemplateValidator = new ContainedTemplateValidator(this.service.GetAllPackageLocations
                                                                                                       (version));

            containedTemplateValidator.Validate(xmlDocument, errorContainer);
        }
Esempio n. 10
0
 public void ElementOrder()
 {
     SchematronValidator validator = new SchematronValidator("Schematron/Samples/Person.Xml.Com.sch");
      XmlDocument doc = new XmlDocument();
      doc.LoadXml(
     @"<Person Title='Mr'>
     <Gender>Male</Gender>
     <Name>Eddie</Name>
     </Person>");
      ExceptionAssert.Throws<SchematronValidationException>(() => validator.Validate(doc), "The element Name must appear before element Gender.");
 }
Esempio n. 11
0
 public void Annotation()
 {
     SchematronValidator validator = new SchematronValidator(SchematronReader.ReadSchematron("Schematron/Samples/All.sch"));
      XmlDocument doc = new XmlDocument();
      doc.LoadXml("<document><a><foobar>x-1</foobar><foobar>x-2</foobar></a></document>");
      errors.Clear();
      validator.Validate(doc, new SchematronValidationEventHandler(handler));
      Assert.AreEqual(2, errors.Count);
      Assert.AreEqual("'x-1' is not an allowed value.", errors[0].Diagnostics[0]);
      Assert.AreEqual("'x-2' is not an allowed value.", errors[1].Diagnostics[0]);
 }
Esempio n. 12
0
 public void TitleMissing()
 {
     SchematronValidator validator = new SchematronValidator("Schematron/Samples/Person.Xml.Com.sch");
      XmlDocument doc = new XmlDocument();
      doc.LoadXml(
     @"<Person>
     <Gender>Male</Gender>
     <Name>Eddie</Name>
     </Person>");
      ExceptionAssert.Throws<SchematronValidationException>(() => validator.Validate(doc), "The element Person must have a Title attribute");
 }
Esempio n. 13
0
 public void GenderTitle()
 {
     SchematronValidator validator = new SchematronValidator("Schematron/Samples/Person.Xml.Com.sch");
      XmlDocument doc = new XmlDocument();
      doc.LoadXml(
     @"<Person Title='Mr'>
     <Name>Eddie</Name>
     <Gender>Female</Gender>
     </Person>");
      ExceptionAssert.Throws<SchematronValidationException>(() => validator.Validate(doc), "If the Title is \"Mr\" then the gender of the person must be \"Male\".");
 }
Esempio n. 14
0
 public bool TryValidating(SchematronValidator validator, XmlDocument instance)
 {
     try
      {
     validator.Validate(instance);
     return true;
      }
      catch (SchematronValidationException)
      {
     return false;
      }
 }
Esempio n. 15
0
 public void OverrideDocumentLet()
 {
     SchematronDocument schema = Load("Schematron/Samples/Let.sch");
      SchematronValidator validator = new SchematronValidator(schema);
      validator.Parameters.Add("maxSec", "10");
      XmlDocument doc = new XmlDocument();
      doc.LoadXml("<times><time>23:10:00</time><time>23:10:50</time></times>");
      errors.Clear();
      validator.Validate(doc, new SchematronValidationEventHandler(handler));
      Assert.AreEqual(1, errors.Count);
      Assert.AreEqual("The second (50) must be a value between 0 and 10.", errors[0].Message);
 }
Esempio n. 16
0
 public void PhaseAssertions()
 {
     SchematronDocument schema = Load("Schematron/Samples/Let.sch");
      SchematronValidator validator = new SchematronValidator(schema);
      XmlDocument doc = new XmlDocument();
      doc.LoadXml("<times><time>23:10:00</time><time>23:10:50</time></times>");
      errors.Clear();
      validator.ValidationPhase = "no-seconds";
      validator.Validate(doc, new SchematronValidationEventHandler(handler));
      Assert.AreEqual(1, errors.Count);
      Assert.AreEqual("The second (50) must be a value between 0 and 0.", errors[0].Message);
 }
 public void DoggieReportNoError()
 {
     XmlDocument dogs = new XmlDocument();
      dogs.LoadXml(@"
     <dogs>
       <dog petname='spot'><nose/><ear/><bone/><ear/></dog>
     </dogs>");
      StringBuilder svrl = new StringBuilder();
      SchematronValidator validator = new SchematronValidator("Schematron/Samples/Dog.sch");
      ValidationReport report = new ValidationReport(validator, svrl);
      validator.Validate(dogs);
      Assert.IsFalse(report.HasValidationErrors);
 }
Esempio n. 18
0
 public void Valid()
 {
     SchematronValidator validator = new SchematronValidator("Schematron/Samples/Person.Xml.Com.sch");
      XmlDocument doc = new XmlDocument();
      doc.LoadXml(
     @"<Person Title='Mr'>
     <Name>Eddie</Name>
     <Gender>Male</Gender>
     </Person>");
      errors.Clear();
      validator.Validate(doc, new SchematronValidationEventHandler(handler));
      Assert.AreEqual(0, errors.Count);
 }
 public void DoggieConsoleReport()
 {
     XmlDocument dogs = new XmlDocument();
      dogs.LoadXml(@"
     <dogs>
       <dog petname='spot'><nose/><ear/><bone/><ear/></dog>
       <dog petname='hungry'><nose/><ear/><ear/></dog>
       <dog petname='emanon'><nose/><ear/><bone/></dog>
       <dog petname='smelly'><ear/><bone/><ear/></dog>
     </dogs>");
      SchematronValidator validator = new SchematronValidator("Schematron/Samples/Dog.sch");
      ValidationReport report = new ValidationReport(validator, Console.Out);
      validator.Validate(dogs);
 }
Esempio n. 20
0
 public void Abstract()
 {
     SchematronDocument schema = Load("Schematron/Samples/AbstractPattern.sch");
      SchematronWriter writer = new SchematronWriter();
      writer.WriteDocument(schema.CompiledDocument, Console.Out);
      SchematronValidator validator = new SchematronValidator(schema);
      XmlDocument doc = new XmlDocument();
      doc.LoadXml("<doc><foo id='a' bar='x'/><foo id='b'/><foo bar='x'/><foo/></doc>");
      errors.Clear();
      validator.Validate(doc, new SchematronValidationEventHandler(handler));
      Assert.AreEqual(4, errors.Count);
      Assert.AreEqual("The /doc/foo[3] element is missing a required attribute.", errors[0].Message);
      Assert.AreEqual("The /doc/foo[4] element is missing a required attribute.", errors[1].Message);
      Assert.AreEqual("The /doc/foo[2] element is missing a required attribute.", errors[2].Message);
      Assert.AreEqual("The /doc/foo[4] element is missing a required attribute.", errors[3].Message);
 }
Esempio n. 21
0
        public void MinimalIsValid()
        {
            SchematronDocument full = SchematronReader.ReadSchematron("Schematron/Samples/All.sch");
             SchematronDocument minimal = new Compiler().Compile(full);
             StringBuilder schematron = new StringBuilder();
             minimal.Save(schematron);

             XmlDocument minimalDocument = new XmlDocument();
             minimalDocument.LoadXml(schematron.ToString());

             SchematronValidator validator = new SchematronValidator(Schematron.Default.IsoSchematronSchema);
             validator.ValidationPhase = "minimal";
             validator.Validate(minimalDocument);

             SchematronDocument minimal2 = new SchematronDocument();
             minimal2.Load(schematron);
        }
Esempio n. 22
0
        public void Math()
        {
            SchematronDocument schema = Load("Schematron/Samples/Exslt.sch");
             SchematronValidator validator = new SchematronValidator(schema);
             XmlDocument doc = new XmlDocument();

             doc.LoadXml("<prices><price>10</price><price>0</price></prices>");
             errors.Clear();
             validator.Validate(doc, new SchematronValidationEventHandler(handler));
             Assert.AreEqual(1, errors.Count);
             Assert.AreEqual("All prices must be greater than zero.", errors[0].Message);

             doc.LoadXml("<prices><price>10</price><price>2</price></prices>");
             errors.Clear();
             validator.Validate(doc, new SchematronValidationEventHandler(handler));
             Assert.AreEqual(0, errors.Count);
        }
        public void DoggieReport()
        {
            XmlDocument dogs = new XmlDocument();
             dogs.LoadXml(@"
            <dogs>
              <dog petname='spot'><nose/><ear/><bone/><ear/></dog>
              <dog petname='hungry'><nose/><ear/><ear/></dog>
              <dog petname='emanon'><nose/><ear/><bone/></dog>
              <dog petname='smelly'><ear/><bone/><ear/></dog>
            </dogs>");
             StringBuilder svrl = new StringBuilder();
             SchematronValidator validator = new SchematronValidator("Schematron/Samples/Dog.sch");
             ValidationReport report = new ValidationReport(validator, svrl);
             validator.Validate(dogs);
             Console.WriteLine(svrl.ToString());

             XmlDocument doggieReport = new XmlDocument();
             doggieReport.LoadXml(svrl.ToString());
             validator = new SchematronValidator(Schematron.Default.ValidationReportLanguage);
             validator.Validate(doggieReport);
        }
Esempio n. 24
0
 public void Assertions()
 {
     SchematronDocument schema = Load("Schematron/Samples/Let.sch");
      SchematronValidator validator = new SchematronValidator(schema);
      XmlDocument doc = new XmlDocument();
      doc.LoadXml(
     @"<times>
       <time>23:10:50</time>
       <time>11:10:50 PM</time>
       <time>24:10:50</time>
       <time>23:60:50</time>
       <time>23:10:60</time>
     </times>");
      errors.Clear();
      validator.Validate(doc, new SchematronValidationEventHandler(handler));
      Assert.AreEqual(4, errors.Count);
      Assert.AreEqual("The time element should contain a time in the format HH:MM:SS.", errors[0].Message);
      Assert.AreEqual("The hour (24) be a value between 0 and 23.", errors[1].Message);
      Assert.AreEqual("The minutes (60) must be a value between 0 and 59.", errors[2].Message);
      Assert.AreEqual("The second (60) must be a value between 0 and 59.", errors[3].Message);
 }
Esempio n. 25
0
        public void Validate_IsoDocument_OnText(string filename, bool result)
        {
            var res = SchematronValidator.Create(SchematronDocument.GenericCda).Validate(_fileResolver.GetResourceStream(filename).GetText());

            Assert.Equal(result, res.Status);
        }