Exemplo n.º 1
0
        protected override ValidationResults ValidateImplementationGuide(ImplementationGuide implementationGuide, SimpleSchema igSchema)
        {
            ValidationResults results = base.ValidateImplementationGuide(implementationGuide, igSchema);

            // Check that the implementation guide has a base identifier/url
            if (string.IsNullOrEmpty(implementationGuide.Identifier))
            {
                results.Messages.Add("Implementation guide does not have a base identifier/url.");
            }

            // Check that each FHIR resource instance is valid and has the required fields
            foreach (var file in implementationGuide.Files)
            {
                var fileData = file.GetLatestData();
                fhir_latest.Hl7.Fhir.Model.Resource resource = null;
                string fileContent = System.Text.Encoding.UTF8.GetString(fileData.Data);

                try
                {
                    resource = this.fhirXmlParser.Parse <fhir_latest.Hl7.Fhir.Model.Resource>(fileContent);
                }
                catch (Exception ex)
                {
                    if (file.MimeType == "application/xml" || file.MimeType == "text/xml")
                    {
                        results.Messages.Add("FHIR Resource instance \"" + file.FileName + "\" cannot be parsed as valid XML: " + ex.Message);
                    }
                }

                try
                {
                    if (resource == null)
                    {
                        resource = this.fhirJsonParser.Parse <fhir_latest.Hl7.Fhir.Model.Resource>(fileContent);
                    }
                }
                catch (Exception ex)
                {
                    if (file.MimeType == "binary/octet-stream" || file.MimeType == "application/json")
                    {
                        results.Messages.Add("FHIR Resource instance \"" + file.FileName + "\" cannot be parsed as valid JSON: " + ex.Message);
                    }
                }

                if (resource != null && string.IsNullOrEmpty(resource.Id))
                {
                    string msg = string.Format("FHIR resource instance \"" + file.FileName + "\" does not have an \"id\" property.");
                    results.Messages.Add(msg);
                }
            }

            return(results);
        }
Exemplo n.º 2
0
        public override List <ValidationResult> ValidateTemplate(Template template, SimpleSchema igSchema, IEnumerable <Template> allContainedTemplates = null)
        {
            List <ValidationResult> results = base.ValidateTemplate(template, igSchema, allContainedTemplates);

            var noHttpValueSets = (from tc in template.ChildConstraints
                                   join vs in this.tdb.ValueSets on tc.ValueSetId equals vs.Id
                                   where vs.Identifiers.Count(y => y.Type == ValueSetIdentifierTypes.HTTP) == 0
                                   select new { ConstraintNumber = tc.Number, ValueSet = vs });

            foreach (var noHttpValueSet in noHttpValueSets)
            {
                string vsIdentifier = noHttpValueSet.ValueSet.GetIdentifier(ValueSetIdentifierTypes.HTTP);

                results.Add(new ValidationResult()
                {
                    ConstraintNumber = noHttpValueSet.ConstraintNumber,
                    Level            = ValidationLevels.Error,
                    Message          = string.Format("The constraint references a value set ({0}) that does not have an HTTP identifier", vsIdentifier),
                    TemplateId       = template.Id,
                    TemplateName     = template.Name
                });
            }

            foreach (var templateExample in template.TemplateSamples)
            {
                fhir_latest.Hl7.Fhir.Model.Resource resource = null;

                try
                {
                    resource = fhirXmlParser.Parse <fhir_latest.Hl7.Fhir.Model.Resource>(templateExample.XmlSample);
                }
                catch
                {
                }

                try
                {
                    if (resource == null)
                    {
                        resource = fhirJsonParser.Parse <fhir_latest.Hl7.Fhir.Model.Resource>(templateExample.XmlSample);
                    }
                }
                catch
                {
                }

                if (resource == null)
                {
                    results.Add(new ValidationResult()
                    {
                        TemplateId   = template.Id,
                        TemplateName = template.Name,
                        Level        = ValidationLevels.Error,
                        Message      = string.Format("Profile sample \"{0}\" cannot be parsed as a valid XML or JSON resource.", templateExample.Name)
                    });
                }
                else if (string.IsNullOrEmpty(resource.Id))
                {
                    results.Add(new ValidationResult()
                    {
                        TemplateId   = template.Id,
                        TemplateName = template.Name,
                        Level        = ValidationLevels.Error,
                        Message      = string.Format("Profile sample \"{0}\" does not have an \"id\" property.", templateExample.Name)
                    });
                }
            }

            return(results);
        }