Преобразование fhir между XML и Json

#hl7-fhir #fhir-net-api

#hl7-fhir #fhir-net-api

Вопрос:

Есть ли способ преобразовать пакет fhir из json в xml с помощью средств, не зависящих от используемой версии FHIR?

Я думаю, что .net fhir api от firely может это сделать, но любая данная версия API, похоже, специфична для определенного выпуска FHIR.

Ответ №1:

Проблема в том, что пакет FHIR (или любой ресурс) неявно всегда имеет версию. Обоснование заключается в том, что каждая версия FHIR имеет (или может иметь) другую базовую модель данных. Однако это возможно, используя .NET FHIR API (в частности, packa&e https://www.nu&et.or&/packa&es/Hl7.Fhir.Serialization ), чтобы выполнить преобразование с минимальными различиями в версиях. Следующий код выполняет преобразование с использованием независимого от версии ISourceNode (http://docs.simplifier.net/fhirnetapi/parsin&/isourcenode.html)

 usin& Hl7.Fhir.ElementModel;
usin& Hl7.Fhir.Serialization;    

var xml = "<Patient xmlns="http://hl7.or&/fhir"&&t;<identifier&&t;<use value="official" /&&t;</identifier&&t;</Patient&&t;";
var patientNode = FhirXmlNode.Parse(xml);
var typedElement = patientNode.ToTypedElement();
var json = typedElement.ToJson();
  

Однако, как вам скажет VS, приведенный выше код имеет одну проблему. Использование ToTypedElement() без параметров опасно, потому что игнорирование версии является. Однако во многих случаях это сработает, и если это достаточно хорошо для вас, возможно, это правильный путь.

Более безопасным решением является использование того же кода, но дополнительно использовать так называемый IStructureDefinitionSummaryProvider (прошу прощения за название 😉 для предоставления API конкретной информации о версии. Реализации этого интерфейса можно найти в библиотеках API, зависящих от конкретной версии, например https://www.nu&et.or&/packa&es/Hl7.Fhir.R4.

 usin& Hl7.Fhir.ElementModel;
usin& Hl7.Fhir.Serialization;
usin& Hl7.Fhir.Specification;

var xml = "<Patient xmlns="http://hl7.or&/fhir"&&t;<identifier&&t;<use value="official" /&&t;</identifier&&t;</Patient&&t;";
var patientNode = FhirXmlNode.Parse(xml);
var summaryProvider = new PocoStructureDefinitionSummaryProvider();
var typedElement = patientNode.ToTypedElement(summaryProvider);
var json = typedElement.ToJson();
  

Возможно, вы сможете внедрить их PocoStructureDefinitionSummaryProviders на основе некоторого свойства входных данных, из которых вы читаете. Например, именно так мы это делаем на сервере FHIR Vonk.

Ответ №2:

FHIR java validator может сделать это для любой версии. Это может подойти в зависимости от того, что вам нужно для его использования

Комментарии:

1. Возможно, мне придется обратиться к этому. Наша среда в основном .net, поэтому мы надеялись пойти по этому пути