#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, поэтому мы надеялись пойти по этому пути