1.12.6.1 扩展的样例
为了使用扩展,要走三个步骤:
- 定义扩展
- 注册扩展
- 在实例中使用扩展
这部分就是对这三个步骤的演示.
1.12.6.1.1 共享病历的病人授权
基本的patient资源不包含与患者授权相关的信息,和或患者登记时有关授权策略的详细信息.PHR的社交网络供应商可能需要追踪病人与此PHR供应商之间建立起关系的策略,并通过FHIR api与合作伙伴进行共享.如果需要的话,他们可以扩展patient资源来表达患者的使用协议.注意也有其他解决此问题的方法,但这样已经足够用来演示扩展的流程.
鉴于这个例子的目的,我们假设患者在注册时就已经同意了参与其中的策略,当供应商要更改它们的策略时,它们要征询患者是否同意最新的参与细节.每种参与协议都用一个URI来标识,对于每种不同的策略协定,patient资源中都会包含那些患者同意策略对应的uri.
####### 1.12.6.1.1.1 定义扩展
对于每个扩展,所要做的第一件事就是完成扩展的定义属性:
Code | "参与协议" |
Context | 该扩展用在patient资源之中 |
Short Defn | 用户协议/策略 |
Definition | 患者所同意的用户协议的URI |
Comments | URI是对协议文本的字面引用 |
Cardinality | 1..* (患者至少要选择一种协议) |
Type | uri |
XPaths | 无 |
is Modifier | No (用户协议的内容不影响对患者相关数据的解读,尽管可能会影响系统与患者交互的方式) |
Binding | (无绑定 - 非可编码值) |
1.12.6.1.1.2 编写扩展的定义
通过下表,我们可以得到一个规范.
This is all then represented formally in a profile. 一些规范不需要包含对资源的约束声明,取而代之的是,它们会包含扩展声明和相应的绑定.这种情况下,一个规范如下所示:
1 | <StructureDefinition xmlns="http://hl7.org/fhir"> <url value="http://example.org/fhir/StructureDefinition/participation-agreement" /> <name value="Example Extension Definition" /> <!-- snip other metadata --> <type value="extension" /> <contextType value="resource" /> <context value="Patient" /> <differential> <element> <path value="Extension.value"/> <short value="Agreed agreement/policy" /> <definition value="A URI that identifies a participation agreement/policy to which the patient has agreed" /> <comments value="URI is a literal reference to agreement text (html). Systems SHALL conform to the policies as indicated. For further information, see the partnership agreement..." /> <min value="1" /> <max value="*" /> <type> <code value="uri" /> </type> <mustSupport value="true" /> <isModifier value="false" /> </element> </differential> </StructureDefinition> ` |
注意 通常你可能是用一些工具来生成规范的.上面的例子是手工编写的.
1.12.6.1.1.3 注册扩展
把上面定义扩展的规范放在web中去.首选的话,放置在一个FHIR规范的节点上,最好是放在HL7的规范注册库中(还没有实现)
在这个例子中,我们假设它已经上传到PHR供应商自己的网站http://example.org/phr/documents/fhir/extensions.上去了.
1.12.6.1.1.4 在实例中使用扩展
要想在实例中使用扩展,扩展需放在资源的根元素之后.注意扩展的url指向所注册的网址, with the id of the extension as a fragment identifier.1
<Patient xmlns="http://hl7.org/fhir">
<extension url="http://example.org/phr/documents/fhir/extensions#participation-agreement" >
<valueUri value="http://example.org/phr/documents/patient/general/v1" />
</extension>
</Patient>
`
1.12.6.1.1.5 将扩展添加到Patient StructureDefinition
上面的规范定义中只是简单的定义了 "参与协议"这个扩展,告诉我们这个扩展可以在patient中使用,但是上面的规范内并没有说服务器实际上是在使用整个扩展.对于PHR供应商而言,通过patientStructureDefinition来声明所有patient资源都在使用这个扩展.
1 | <StructureDefinition xmlns="http://hl7.org/fhir"> <name value="iso-21090" /> <!-- snip other metadata, narrative --> <differential> <!-- first, the patient root element - can be copy/paste from the base patient profile --> <element> <path value="Patient"/> <!-- snip definition --> </element> <!-- now, the general definition for extensions - can be copy/paste from the base patient profile, with changes for slicing --> <element> <path value="Patient.extension"/> <name value="base extension"/> <!-- we're going to slice the extension element, and one of the extensions is one we have defined --> <slicing> <!-- extension is always sliced on url --> <discriminator value="url"/> <!-- we don't care what the order of any extensions is --> <ordered value="false"/> <!-- Other extensions are allowed in addition to this one --> <rules value="open"/> </slicing> <!-- snip definition --> </element> <!-- now, the slice that contains our extension --> <element> <path value="Patient.extension"/> <!-- clone information from the extension definition. duplicative, but this duplication makes it over all simpler --> <short value="Agreed agreement/policy"/> <definition value="A URI that identifies a participation agreement/policy to which the patient has agreed"/> <!-- min has to be 1, since the extension itself has min = 1 --> <min value="1"/> <max value="*"/> <type> <!-- obviously it has to be an extension --> <code value="Extension"/> <!-- and here is the link to the extension definition: this extension has to conform to the rules laid down in its definition --> <profile value="http://example.org/phr/documents/fhir/extensions#participation-agreement"/> </type> <isModifier value="false"/> </element> <!-- snip the rest of the profile --> </differential> </StructureDefinition> ` |
注意 - 这一步是可选的 .
1.12.6.1.2 患者姓名的组成部分
ISO 21090 (Healthcare Data Types)定义一个概念"姓名组成部分修饰符" ,其中包含描述某个姓名组成部分如何使用的信息.在实际应用中,除了极少的场景,很少使用这个字段.按照FHIR设计原则,在核心的name数据类型中并没有包含这个字段,可以将其作为扩展.
实际应用中,像ISO 21090中类似的这种情况,HL7提供了常用扩展,是在这里定义的.
1.12.6.1.2.1 定义扩展
对于每个扩展,所要做的第一件事就是完成扩展的定义属性:
Code | "姓名修饰符" |
Context | 该扩展可以用在任何出现HumanName.part的地方 |
Short Defn | (可选编码) LS | AC | NB | PR | HON | BR | AD | SP | MID | CL | IN |
Definition | 除了主要的姓名组成部分之外,每个编码代表姓名组成部分的某个子类. |
Comments | 用来表达姓名组成部分的额外信息,以及如何使用它们 |
Cardinality | 0..* (该字段总是可选的,如果需要的话可以使用一到多个) |
Type | code |
XPaths | N/A |
Is Modifier | 否 (修饰符不会更改姓或者名的内容) |
RIM Mapping | ENXP.qualifier |
v2 Mapping | N/A |
Binding | 与 EntityNamePartQualifierR2 in ISO 21090 的子集绑定 |
在这种场景下,并非需要所有的EntityNamePartQualifierR2编码,因为前缀,后缀很明显是姓名的组成部分.与其引用EntityNamePartQualifierR2的OID (2.16.840.1.113883.5.1122), 我们枚举出需要用的编码,只有在规范中定义好了可以使用的编码才允许使用"code" 数据类型.编码如下表 (完整定义请参考EntityNamePartQualifierR2):
LS | Legal status | For organizations a suffix… |
AC | Academic | Indicates that a prefix like "D… |
NB | Nobility | In Europe and Asia, there are s… |
PR | Professional | Primarily in the British Im… |
HON | Honorific | An honorific such as ‘The Rig… |
BR | Birth | A name that a person was given at … |
AD | Acquired | A name part a person acquired. … |
SP | Spouse | The name assumed from the partner… |
MID | Middle Name | Indicates that the name par… |
CL | Call me | Callme is used to indicate which… |
IN | Initial | Indicates that a name part is ju… |
This is all then represented formally in a profile. 一些规范不需要包含对资源的约束声明,取而代之的是,它们会包含扩展声明和相应的绑定.这种情况下,一个规范如下所示:1
<StructureDefinition xmlns="http://hl7.org/fhir">
<url value="http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier" />
<name value="iso-21090" />
<!-- snip other metadata, including definition of RIM Mapping -->
<type value="extension" />
<contextType value="datatype" />
<context value="HumanName.given" />
<context value="HumanName.prefix" />
<context value="HumanName.family" />
<context value="HumanName.suffix" />
<differential>
<element>
<path value="Extension.value"/>
<short value="LS | AC | NB | PR | HON | BR | AD | SP | MID | CL | IN" />
<definition value="A set of codes each of which specifies a certain subcategory
of the name part in addition to the main name part type" />
<comments value="Used to indicate additional information about the
name part and how it should be used" />
<min value="0" />
<max value="*" />
<type>
<code value="code" />
</type>
<mustSupport value="false" />
<isModifier value="false" />
<binding>
<name value="EntityNamePartQualifier" />
<strength value="required" />
<description value="A set of codes each of which specifies a certain subcategory
of the name part in addition to the main name part type" />
<referenceReference>
<reference value="ValueSet/name-part-qualifier" />
</referenceReference>
</binding>
<mapping>
<identity value="RIM" />
<map value="ENXP.qualifier" />
</mapping>
</element>
</differential>
</StructureDefinition>
`
注意 通常你可能是用一些工具来生成规范的.上面的例子是手工编写的.
1.12.6.1.2.2 注册扩展
在这个例子中,在http://hl7.org/fhir/Profile/iso-21090中注册.用到扩展时,url的值就是这个网址.
1.12.6.1.2.3 在实例中使用扩展
想要使用这个扩展,就要将扩展嵌套在它所想要扩展的属性中.
注意扩展的URL对应的注册地址,with the id of the extension as a fragment identifier.
1 | <name> <use value="official" /> <given value="Östlund"> <extension url="http://hl7.org/fhir/StructureDefinition/iso-21090#name-qualifier" > <valueCode value="MID" /> </extension> </given> </name> ` |
This particular example is a Scandinavian mellannamn.
更多实例请参考.
© HL7.org 2011 - 2014. FHIR DSTU (v0.2.1-2606)构建于2014 7月2号 16:29+0800 星期三 .
链接:试行版是什么 |版本更新情况 | 许可协议 |提交变更建议