【问题标题】:Ho to validate Fhir R4 Resource based on profiles and custom structure definition?如何根据配置文件和自定义结构定义验证 Fhir R4 资源?
【发布时间】:2019-09-23 05:35:07
【问题描述】:

我正在使用 Hl7.Fhir.Serialization 和 Hl7.Fhir.Validation 进行资源特定验证,如下所示。但这是一个基本验证,我想在 Fhir R4 中进行配置文件特定验证和基于扩展的验证,有人可以建议我一个更好的解决方案吗?

private Hl7.Fhir.Validation.Validator GetValidator()
{
   return new Hl7.Fhir.Validation.Validator(PrepareValidationSettings());
}

private ValidationSettings PrepareValidationSettings()
{
     var settings = ValidationSettings.CreateDefault();
     settings.EnableXsdValidation = false;
     settings.Trace = false;
     settings.ResourceResolver = this.ProfileSource;
     settings.SkipConstraintValidation = false;
     settings.ResolveExteralReferences = true;
     settings.GenerateSnapshot = false;
     settings.TerminologyService = this.TerminologySource;

     return settings;
}


public FhirResponse ValidateResource(Resource resource)
{
      var serializedResourceXml = FhirSerializer.SerializeResourceToXml(resource);
      var reader = SerializationUtil.XmlReaderFromXmlText(serializedResourceXml);

      var valdationResult = GetValidator().Validate(reader);  // Validate the resource 

      if (valdationResult.Errors == 0)
      {
          return new FhirResponse(HttpStatusCode.OK);
      }

     return new FhirResponse(valdationResult, HttpStatusCode.InternalServerError);
}

【问题讨论】:

    标签: validation resources hl7-fhir


    【解决方案1】:

    您之前问过另一个关于验证的问题,Ewout 向您指出了可用的演示项目:https://github.com/FirelyTeam/Furore.Fhir.ValidationDemo

    如果您检查代码,您会发现您可以将其他解析器添加到 settings.ResourceResolver,在您的情况下,它大概只指向基本规范。

    例如,查找这一行:

    var directorySource = new CachedResolver(new DirectorySource(profilePath, new DirectorySourceSettings { IncludeSubDirectories = true }));
    

    它将解析器设置为包含您的自定义配置文件和扩展的文件夹,并在下一行将其与要在验证器设置中使用的基本规范相结合。

    【讨论】:

    • 在我的项目中,我将 specification.zip 存储在一个项目中,自定义结构定义存储在不同的项目中,这是我的代码示例,它不起作用 var directorySource = new CachedResolver(new DirectorySource (profilePath, new DirectorySourceSettings { IncludeSubDirectories = true })); var result = new MultiResolver(directorySource, validator.ZipResolver); StructureDefinition pat = validator.ZipResolver.ResolveByCanonicalUri("hl7.org/fhir/StructureDefinition/procedure-causedBy") as StructureDefinition
    • StructureDefinitions 是否存储在不同的文件夹中并不重要,只要您的应用程序可以访问它即可。你能解释一下什么不起作用,你有什么错误吗?因为从那部分代码中我无法确定任何事情。您能否运行 ValidationDemo 来查看它是否/如何工作?逐步完成并检查值应该可以让您更好地理解,然后您可以使用它来调试自己的应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多