【发布时间】:2020-08-11 20:45:04
【问题描述】:
有没有办法通过独立于所使用的 FHIR 版本的方式将 fhir 包从 json 转换为 xml?
我认为 firely 的 .net fhir api 可以做到这一点,但任何给定版本的 api 似乎都特定于 FHIR 的某个版本。
【问题讨论】:
标签: hl7-fhir fhir-net-api
有没有办法通过独立于所使用的 FHIR 版本的方式将 fhir 包从 json 转换为 xml?
我认为 firely 的 .net fhir api 可以做到这一点,但任何给定版本的 api 似乎都特定于 FHIR 的某个版本。
【问题讨论】:
标签: hl7-fhir fhir-net-api
问题在于 FHIR Bundle(或任何资源)隐含地总是有一个版本。理由是每个 FHIR 版本都有(或可以有)不同的底层数据模型。
但是,可以使用 .NET FHIR API(特别是包 https://www.nuget.org/packages/Hl7.Fhir.Serialization)以最小的版本差异进行转换。
以下代码使用与版本无关的ISourceNode (http://docs.simplifier.net/fhirnetapi/parsing/isourcenode.html) 进行转换
using Hl7.Fhir.ElementModel;
using Hl7.Fhir.Serialization;
var xml = "<Patient xmlns=\"http://hl7.org/fhir\"><identifier><use value=\"official\" /></identifier></Patient>";
var patientNode = FhirXmlNode.Parse(xml);
var typedElement = patientNode.ToTypedElement();
var json = typedElement.ToJson();
上面的代码有一个问题,VS 会告诉你。使用不带参数的ToTypedElement() 是危险的,因为忽略版本是危险的。但它在许多情况下都可以使用,如果它对你来说足够好,那可能就是要走的路。
更安全的解决方案是使用相同的代码,但另外使用所谓的IStructureDefinitionSummaryProvider(抱歉命名;)来为 API 提供特定的版本信息。此接口的实现可以在特定于版本的 API 库中找到,例如https://www.nuget.org/packages/Hl7.Fhir.R4.
using Hl7.Fhir.ElementModel;
using Hl7.Fhir.Serialization;
using Hl7.Fhir.Specification;
var xml = "<Patient xmlns=\"http://hl7.org/fhir\"><identifier><use value=\"official\" /></identifier></Patient>";
var patientNode = FhirXmlNode.Parse(xml);
var summaryProvider = new PocoStructureDefinitionSummaryProvider();
var typedElement = patientNode.ToTypedElement(summaryProvider);
var json = typedElement.ToJson();
您可以根据您正在读取的输入的某些属性注入这些PocoStructureDefinitionSummaryProviders。这就是我们在Vonk FHIR server 中的做法。
【讨论】:
FHIR java 验证器可以为任何版本执行此操作。这可能是合适的,这取决于你需要使用它
【讨论】: