FHIR StructureDefinition - дифференциальные определения

Версия бюллетеня DSTU2 May имеет ресурс StructureDefintion (заменяет Профиль), который позволяет «дифференциальное» определение структур.

Это довольно просто использовать для добавления элементов в существующую структуру - все элементы в дифференциале являются «добавками» к основанию.

Однако как изменить или уменьшить существующий профиль? Более конкретно:

Как можно надежно сопоставить элемент базовой конструкции с элементом дифференциальной конструкции, чтобы дифференциал мог изменять основание?

Я вижу две возможности:

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

Есть другой способ?

Рабочий пример здесь: http://hl7.org/fhir/2015May/extensibility-examples.html#1.16.2.1.2

В этом примере сопоставление по пути заменит любое другое расширение, а сопоставление имен не будет работать, потому что ни один элемент не имеет имени. Единственный вариант - рассматривать это как дополнение (что, к счастью, и есть намерение здесь). Но если бы я захотел дополнительно изменить эту структуру, используя ее в качестве основы (возможно, чтобы установить max = "1"), я бы не смог.


person Chris Grenz    schedule 08.05.2015    source источник


Ответы (1)


На самом деле адды - не адды. Любые дополнения должны быть частями расширения - вы не можете добавлять новые элементы в профиль. Итак (если вы не определяете ресурсы - что может делать только HL7), каждый элемент, который вы указываете в ограничении StructureDefinition, должен указывать «путь», который соответствует существующему пути в базовом ресурсе. Чтобы ограничить существующий элемент, просто определите этот путь и подтвердите свои ограничения. Если то, что вы хотите ограничить, не может быть идентифицировано только путем (т. Е. Вы хотите ограничить срез, определенный в родительском профиле), вам необходимо повторно объявить срез и установить дополнительные ограничения для соответствующего среза. . Имя используется для однозначной идентификации фрагментов в профиле, но (в настоящее время) не используется в профилях.

person Lloyd McKenzie    schedule 09.05.2015
comment
Итак, как мне узнать, какой фрагмент я заменяю, когда повторно объявляю фрагмент? Он появляется после внимательного чтения hl7.org/fhir/2015May/profiling.html # 2.14.0.8, что можно идентифицировать срез а) с помощью фиксированного [x] или б) с помощью неперекрывающейся привязки. Это исчерпывающий список? И достаточно ли просто сравнить uri ValueSet, или нужно проверить содержимое ValueSet, чтобы определить, повторно объявляется ли элемент? Наконец, если я хочу повторно объявить сам ValueSet, как? Изменение URI будет означать, что я не буду повторно декларировать. - person Chris Grenz; 12.05.2015
comment
Каждый срез идентифицируется фиксированным значением, связанным с каждым из элементов, идентифицированных как дискриминаторы в объявлении среза для этого элемента. Если дискриминаторы одинаковы в производном профиле и фиксированные значения одинаковы, это один и тот же срез. Если введены дополнительные дискриминаторы, вы разрезаете срез. Если дискриминаторы выражены в виде чистого текста (невычислимого), то у вас нет другого способа сказать, кроме человеческого осмотра, основанного на правилах нарезки. - person Lloyd McKenzie; 14.05.2015
comment
Из hl7-fhir.github.io/profiling.html#2.14.0.8 - параграф 4: если элемент имеет терминологическую привязку, он ДОЛЖЕН быть связан с полной привязкой с закрытой ссылкой на набор значений, которая перечисляет возможные коды в наборе значений. Значит, можно использовать либо fixed [x], либо binding.valueSet [x], верно? fixed [x] довольно прост - без вопросов. Если привязка, соответствует ли соответствие на valueSet [x], или мне нужно $ развернуть ValueSet и проверить значения? - person Chris Grenz; 14.05.2015
comment
Вам нужно будет расширить набор значений и сопоставить с разрешенными кодами. (Хотя в некоторых случаях определение набора значений является отдельным расширением - где набор значений либо определяет все коды, либо перечисляет их все). - person Lloyd McKenzie; 26.05.2015