public static void Init(TestContext context) { SpecificationProvider provider = SpecificationProvider.CreateOffline(new FileArtifactSource("TestData")); SpecificationBuilder builder = new SpecificationBuilder(provider); builder.Add(StructureFactory.PrimitiveTypes()); builder.Add(StructureFactory.NonFhirNamespaces()); builder.Add("http://disk/Profile/lipid.profile.xml#lipidPanel"); builder.Expand(); spec = builder.ToSpecification(); }
public static Specification GetProfileSpec(bool expand, bool online) { SpecificationProvider resolver = GetProvider(online); SpecificationBuilder builder = new SpecificationBuilder(resolver); builder.Add(StructureFactory.PrimitiveTypes()); builder.Add(StructureFactory.NonFhirNamespaces()); if (expand) { builder.Expand(); } return(builder.ToSpecification()); }
public static SpecificationWorkspace GetExtendedPatientSpec(bool expand, bool online) { SpecificationProvider resolver = GetProvider(online); SpecificationBuilder builder = new SpecificationBuilder(resolver); builder.Add(StructureFactory.PrimitiveTypes()); builder.Add(StructureFactory.NonFhirNamespaces()); builder.Add("http://here.there/patient.extended.profile.xml"); builder.Add("http://here.there/type-Extension.profile.xml"); if (expand) { builder.Expand(); } return(builder.ToSpecification()); }
public static Specification GetExtendedPatientSpec(bool expand, bool online) { SpecificationProvider resolver = GetProvider(online); SpecificationBuilder builder = new SpecificationBuilder(resolver); builder.Add(StructureFactory.PrimitiveTypes()); builder.Add(StructureFactory.NonFhirNamespaces()); builder.LoadXmlFile("TestData\\patient.extended.profile.xml"); builder.LoadXmlFile("TestData\\type-Extension.profile.xml"); if (expand) { builder.Expand(); } return(builder.ToSpecification()); }
public SpecificationWorkspace Spec(string fileuri, string structure) { FhirFile.ExpandProfileFile("TestData\\" + fileuri + ".xml", "TestData\\testprofile.xml"); Uri uri = new Uri("http://disk/testdata/testprofile.xml#" + structure); SpecificationProvider provider = SpecificationProvider.CreateOffline(new FileArtifactSource("TestData")); SpecificationBuilder builder = new SpecificationBuilder(provider); builder.Add(StructureFactory.PrimitiveTypes()); builder.Add(StructureFactory.NonFhirNamespaces()); builder.Add(uri); builder.Expand(); return(builder.ToSpecification()); }
public static SpecificationWorkspace GetLipidSpec(bool expand, bool online) { SpecificationProvider resolver = GetProvider(online); SpecificationBuilder builder = new SpecificationBuilder(resolver); builder.Add(StructureFactory.PrimitiveTypes()); builder.Add(StructureFactory.NonFhirNamespaces()); builder.Add("http://here.there/TestData/valueset.profile.xml"); builder.Add("http://here.there/TestData/lipid.profile.xml"); if (expand) { builder.Expand(); } return(builder.ToSpecification()); }
public static SpecificationWorkspace GetPatientSpec(bool expand, bool online) { SpecificationProvider resolver = GetProvider(online); SpecificationBuilder builder = new SpecificationBuilder(resolver); builder.Add(StructureFactory.PrimitiveTypes()); builder.Add(StructureFactory.MetaTypes()); builder.Add(StructureFactory.NonFhirNamespaces()); builder.Add("http://hl7.org/fhir/Profile/Patient"); if (expand) { builder.Expand(); } return(builder.ToSpecification()); }
public static OperationOutcome ValidateEntry(ResourceEntry entry) { OperationOutcome result = new OperationOutcome(); result.Issue = new List <OperationOutcome.OperationOutcomeIssueComponent>(); ICollection <ValidationResult> vresults = new List <ValidationResult>(); // Phase 1, validate against low-level rules built into the FHIR datatypes // todo: The API no longer seems to have the FhirValidator class. /* * (!FhirValidator.TryValidate(entry.Resource, vresults, recurse: true)) * { * foreach (var vresult in vresults) * result.Issue.Add(createValidationResult("[.NET validation] " + vresult.ErrorMessage, vresult.MemberNames)); * } */ // Phase 2, validate against the XML schema var xml = FhirSerializer.SerializeResourceToXml(entry.Resource); var doc = XDocument.Parse(xml); doc.Validate(SchemaCollection.ValidationSchemaSet, (source, args) => result.Issue.Add(createValidationResult("[XSD validation] " + args.Message, null))); // Phase 3, validate against a profile, if present var profileTags = entry.GetAssertedProfiles(); if (profileTags.Count() == 0) { // If there's no profile specified, at least compare it to the "base" profile string baseProfile = CoreZipArtifactSource.CORE_SPEC_PROFILE_URI_PREFIX + entry.Resource.GetCollectionName(); profileTags = new Uri[] { new Uri(baseProfile, UriKind.Absolute) }; } var artifactSource = ArtifactResolver.CreateOffline(); var specProvider = new SpecificationProvider(artifactSource); foreach (var profileTag in profileTags) { var specBuilder = new SpecificationBuilder(specProvider); specBuilder.Add(StructureFactory.PrimitiveTypes()); specBuilder.Add(StructureFactory.MetaTypes()); specBuilder.Add(StructureFactory.NonFhirNamespaces()); specBuilder.Add(profileTag.ToString()); specBuilder.Expand(); string path = Directory.GetCurrentDirectory(); var spec = specBuilder.ToSpecification(); var nav = doc.CreateNavigator(); nav.MoveToFirstChild(); Report report = spec.Validate(nav); var errors = report.Errors; foreach (var error in errors) { result.Issue.Add(createValidationResult("[Profile validator] " + error.Message, null)); } } if (result.Issue.Count == 0) { return(null); } else { return(result); } }
public static OperationOutcome ValidateEntry(ResourceEntry entry) { OperationOutcome result = new OperationOutcome(); result.Issue = new List<OperationOutcome.OperationOutcomeIssueComponent>(); ICollection<ValidationResult> vresults = new List<ValidationResult>(); // Phase 1, validate against low-level rules built into the FHIR datatypes // todo: The API no longer seems to have the FhirValidator class. /* (!FhirValidator.TryValidate(entry.Resource, vresults, recurse: true)) { foreach (var vresult in vresults) result.Issue.Add(createValidationResult("[.NET validation] " + vresult.ErrorMessage, vresult.MemberNames)); } */ // Phase 2, validate against the XML schema var xml = FhirSerializer.SerializeResourceToXml(entry.Resource); var doc = XDocument.Parse(xml); doc.Validate(SchemaCollection.ValidationSchemaSet, (source, args) => result.Issue.Add( createValidationResult("[XSD validation] " + args.Message,null) )); // Phase 3, validate against a profile, if present var profileTags = entry.GetAssertedProfiles(); if (profileTags.Count() == 0) { // If there's no profile specified, at least compare it to the "base" profile string baseProfile = CoreZipArtifactSource.CORE_SPEC_PROFILE_URI_PREFIX + entry.Resource.GetCollectionName(); profileTags = new Uri[] { new Uri(baseProfile, UriKind.Absolute) }; } var artifactSource = ArtifactResolver.CreateOffline(); var specProvider = new SpecificationProvider(artifactSource); foreach (var profileTag in profileTags) { var specBuilder = new SpecificationBuilder(specProvider); specBuilder.Add(StructureFactory.PrimitiveTypes()); specBuilder.Add(StructureFactory.MetaTypes()); specBuilder.Add(StructureFactory.NonFhirNamespaces()); specBuilder.Add(profileTag.ToString()); specBuilder.Expand(); string path = Directory.GetCurrentDirectory(); var spec = specBuilder.ToSpecification(); var nav = doc.CreateNavigator(); nav.MoveToFirstChild(); Report report = spec.Validate(nav); var errors = report.Errors; foreach (var error in errors) { result.Issue.Add(createValidationResult("[Profile validator] " + error.Message, null)); } } if(result.Issue.Count == 0) return null; else return result; }