Преобразование fhir между XML и Json
Есть ли способ преобразовать пакет fhir из json в xml средствами, которые не зависят от используемой версии FHIR?
Я думаю, что.net fhir api от firely может это сделать, но любая конкретная версия api, похоже, специфична для определенной версии FHIR.
2 ответа
Проблема в том, что пакет FHIR (или любой ресурс) неявно всегда имеет версию. Причина в том, что каждая версия 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.
Java-валидатор FHIR может сделать это для любой версии. Это может подойти в зависимости от того, что вам нужно.