[英]Constraining the use of Resources in FHIR
對於給定的實現方案,以資源配置文件未描述的方式限制如何在系統內使用資源是可以接受的。
多種情況:
- explicitly prohibit the use of <contained> resources
- explicitly prohibit the use of <modifierExtensions>
- explicitly prohibit the use of the narrative <text>
在系統上進行驗證可以清楚地實現上述功能,但是是否沒有針對“實現一致性配置文件”發布這種限制呢?
概要文件並沒有說明一般使用哪些資源,例如“ FHIR端點或客戶端支持哪些資源”,因為這將由該服務器或客戶端決定。 他們在其一致性聲明中報告了此類功能。
配置文件可能會限制伙伴之間進行數據通信時涉及的資源:例如,觀察值通常可以在其“主題”屬性中引用患者,組,設備或位置。 您可以將它們限制為一個子集,並且通過在資源之間一致地執行此操作,可以有效地限制資源交換的交易伙伴需要“知道”他們何時使用該配置文件(並且僅使用該配置文件)的集合。
我認為您的第二個項目符號缺少一些文字,因此我無法對此發表評論。
規范說到敘事:
資源應始終包含敘述以支持人類消費作為后備。 但是,在嚴格管理的交易系統中,所有系統共享一個共同的數據模型,不需要額外的文本,甚至沒有臨床安全風險,這種敘述可以省略。”
例如,如果您查看給定資源的基本配置文件定義(請參閱http://www.hl7.org/implement/standards/fhir/observation.profile.xml.html ),則會看到Observation.text定義的基數為0..1,則可以將其配置為0..0,以便在配置文件中明確顯示。
這是一個示例Profile,顯示了其中的工具,包括Lloyd建議使用XPath:
<Profile xmlns="http://hl7.org/fhir" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hl7.org/fhir ../../schema/profile.xsd">
<!-- stuff removed -->
<structure>
<type value="Observation"/>
<name value="MyConstrainedObservation"/>
<publish value="true"/>
<!-- again, elements left out -->
<element>
<path value="Observation" />
<constraint>
<key value="shorttext" />
<severity value="error" />
<human value="Must be short text" />
<xpath value="string-length(f:text) < 100" />
</constraint>
</element>
<element>
<path value="Observation.modifierExtension"/>
<definition>
<min value="0" />
<max value="0" />
</definition>
</element>
<element>
<path value="Observation.text"/>
<definition>
<short></short>
<formal></formal>
<min value="0" />
<max value="1" />
<condition value="shorttext" />
</definition>
</element>
<!-- elements left out -->
<element>
<path value="Observation.subject"/>
<definition>
<type>
<code value="Resource(Patient)"/>
<aggregation value="bundled" />
<aggregation value="referenced"/>
</type>
</definition>
</element>
<!-- more stuff -->
</structure>
</Profile>
此配置文件首先定義一個XPath約束,以限制文本的長度(僅作為示例),然后繼續將Observation.modifierExtension的基數限制為0..0,從而有效地禁止使用它。 此外,它只將observation.subject僅限於參考患者(因此您可以避免在交易所中使用Device等),並指定只能(在消息,文檔或交易中)參考或捆綁這些患者,但不能使用包含在內。
顯然,我在這里所做的操作也可以通過Observation.text和observation.contained完成。 您具有結構性(基數)和可執行性(xpath)兩種方式來限制您使用的內容。
我相信您會將其添加到您的一致性文檔中
在概要文件中,也可以通過使用概要文件/結構/元素/定義/約束來約束任何這些元素。 例如,要禁止對“ Patient”進行敘述,您可以使用“ Patient”類型的結構定義一個Profile,並在根“ Patient”元素上定義一個xpath為“ not(f:text)”的約束。
但是,仍然需要在每個資源的基礎上完成此操作。
另一個選擇是在Conformance資源上定義一個isModifier擴展,聲明您不支持isModifier或text或任何資源上的任何內容。 盡管在實踐中,這僅意味着大多數系統都不知道如何讀取您的Conformance資源,因此根本不知道如何與您交談。
一些建議:請記住,任何此類限制都將極大地限制您與廣大社區進行互操作的能力,盡管它們可能在非常有限的環境中適用。
使用isModifier,通常的認識是,大多數系統會拒絕包含無法識別的isModifier的實例,因此,如果您不識別任何修飾符擴展名,則拒絕包含它們的實例不需要任何特殊聲明-這是正常行為。
至於文本,最好放置一個約束條件,說必須產生敘事,而不是完全禁止敘事。 可以安全地忽略生成的敘述,並且與拒絕任何具有任何敘述的實例相比,您更加符合FHIR精神。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.