你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
重要
MedTech 服务的弃用于 2025 年 5 月 3 日启动。 如果使用 MedTech 服务不再是优先级,请取消预配实例,可在 此处找到该实例。 以下区域中的活动实例的支持将于 2028 年 5 月 3 日结束:美国西部 2、英国南部、西欧、美国东部、澳大利亚东部、美国东部 2、印度中部、北欧。 可在 此处找到 MedTech 服务的开放源代码版本。
本文概述了如何在 MedTech 服务设备映射中使用 IotJsonPathContent 模板。
IotJsonPathContent 模板基础知识
当 MedTech 服务引入从 Azure IoT 中心路由的设备消息时,可以使用 IotJsonPathContent 模板。 在 设备映射中使用 IotJsonPathContent 模板时,MedTech 服务将从 IoT 中心提供的元数据中提取设备 ID 和度量时间戳。 不应在 IotJsonPathContent 模板中包含 DeviceIdExpression 和 TimestampExpression。
MedTech 服务 IotJsonPathContent 模板支持 JSON 表达式语言 JSONPath。 表达式用于标识用于给定 JSON 设备消息(例如:TypeMatchExpression)和提取创建规范化消息所需的特定值(例如:PatientIdExpression、ValueExpression 等)。 IotJsonPathContent 模板类似于 CalculatedContent 模板 ,但不支持 DeviceIdExpression 和 TimestampExpression。
注释
IotJsonPathContent 模板不支持 JMESPath。
表达式定义为:
<name of expression> : <the expression>
在以下示例中, typeMatchExpression 定义为:
"templateType": "IotJsonPathContent",
"template": {
   "typeName": "heartrate",
   "typeMatchExpression": "$..[?(@heartRate)]",
...
}
如果 MedTech 服务设置为从 IoT 中心引入设备消息,则无需使用 IotJsonPathContent 模板。 如果正确定义了 DeviceIdExpression 和 TimestampExpression,则可以使用 CalculatedContent 模板。
IotJsonPathContent 模板允许通过以下表达式从从 Azure 事件中心事件中心读取的设备消息中匹配和提取值:
| 元素 | Description | JSONPath 表达式示例 | 
|---|---|---|
| typeMatchExpression | MedTech 服务针对设备消息有效负载计算的表达式。 如果服务找到匹配的令牌值,则它将模板视为匹配项。 | $..[?(@heartRate)] | 
| patientIdExpression | 用于提取患者标识符的表达式。 当 MedTech 服务的“分辨率”类型设置为“创建”时是必需的,当 MedTech 服务的“分辨率”类型设置为“查找”时,则为可选。 | $.SystemProperties.iothub-connection-device-id | 
| encounterIdExpression | 可选:用于提取遇到标识符的表达式。 | $.Body.encounterId | 
| correlationIdExpression | 可选:用于提取相关标识符的表达式。 可以使用此输出将值分组到 FHIR® 目标映射中的单个观察值中。 | $.Body.correlationId | 
| values[].valueExpression | 要提取所需值的表达式。 | $.Body.heartRate | 
重要
MedTech 服务将使用 IoT 中心中定义的设备 ID 作为 FHIR 资源设备标识符。 如果 MedTech 服务设置为使用标识解析类型的 查找,则 FHIR 服务中 必须 存在具有匹配设备标识符的设备资源,或者处理设备消息时将发生错误。 如果 MedTech 服务的标识解析类型设置为 “创建”,则必须在设备映射中包括一个 patientIdExpression ,这样一来,如果患者资源不存在,则可以创建新的患者资源和设备资源。
注释
Resolution 类型指定 MedTech 服务如何将设备数据与设备资源和患者资源相关联。 MedTech 服务使用 设备标识符 和 患者标识符从 FHIR 服务读取设备和患者资源。 如果指定 了遇到标识符 并从设备数据有效负载中提取,则会链接到具有该标识符的 FHIR 服务上是否存在相遇的观察结果。 如果 成功规范化了遇到标识符 ,但没有 FHIR Encounter 存在该遇到标识符,则会引发 FhirResourceNotFound 异常。 有关配置 MedTech 服务 解析类型的详细信息,请参阅 “配置目标”选项卡。
表达式语言
JSONPath 是默认表达式语言,不支持在 IotJsonPathContent 模板中包含表达式语言。 如果尝试在表达式对象中指定表达式语言,则包含表达式对象的 IotJsonPathContent 模板将失败。
"templateType": "IotJsonPathContent",
   "template": {
      "typeName": "heartrate",
      "typeMatchExpression": "$..[?(@heartRate)]",
...
}
小窍门
有关 JSONPath 的详细信息,请参阅 JSONPath - XPath for JSON。 IotJsonPathContent 模板使用 JSON .NET 实现 解析 JSONPath 表达式。
Example
当 MedTech 服务处理设备消息时,CollectionContent 中的模板用于评估消息。 
              typeMatchExpression用于确定模板是否应用于从设备消息创建规范化消息。 
              typeMatchExpression如果计算结果为 true,则valueExpression该值用于查找和提取设备消息中的 JSON 值,并创建规范化消息。
小窍门
使用 Azure IoT 中心扩展的 Visual Studio Code 是一种建议的方法,用于将 IoT 设备消息发送到 IoT 中心进行测试和故障排除。
可以使用 MedTech 服务 映射调试器 帮助创建、更新和排查 MedTech 服务设备和 FHIR 目标映射问题。 利用映射调试器,可以轻松实时查看和进行内联调整,而无需离开 Azure 门户。 映射调试器还可用于上传测试设备消息,以查看在处理成规范化消息并转换为 FHIR 观察后的外观。
在此示例中,我们使用捕获数据的设备消息 heartRate :
{
    "PatientId": "patient1",
    "HeartRate" : "78"
}
注释
为了避免设备到云(D2C)消息中的设备欺骗,Azure IoT 中心使用其他属性丰富所有设备消息,然后再将它们路由到事件中心。 例如: 属性: iothub-creation-time-utc 和 SystemProperties: iothub-connection-device-id。 有关详细信息,请参阅 反欺骗属性。
              patientIdExpression 仅在 创建 模式下的 MedTech 服务需要;但是,如果使用 查找 ,则目标 FHIR 服务中必须存在具有匹配设备标识符的设备资源。 这些示例假定 MedTech 服务处于 “创建 ”模式。 有关 “创建 和 查找目标”属性的详细信息,请参阅 “配置目标”选项卡。
IoT 中心在 MedTech 服务从事件中心读取设备消息之前,扩充设备消息并将其路由到事件中心:
{
    "Body": {
        "PatientId": "patient1",
        "HeartRate": "78"
    },
    "SystemProperties": {
        "iothub-enqueuedtime": "2023-07-25T20:41:26.046Z",
        "iothub-connection-device-id": "sampleDeviceId"
    },
    "Properties": {
        "iothub-creation-time-utc": "2023-07-25T20:41:26.046Z"
    }
}   
我们将此设备映射用于规范化阶段:
{
    "templateType": "CollectionContent",
    "template": [
        {
            "templateType": "IotJsonPathContent",
            "template": {
                "typeName": "HeartRate",
                "typeMatchExpression": "$..[?(@Body.HeartRate)]",
                "patientIdExpression": "$.Body.PatientId",
                "values": [
                    {
                        "required": true,
                        "valueExpression": "$.Body.HeartRate",
                        "valueName": "HeartRate"
                    }
                ]
            }
        }
    ]    
}
生成的规范化消息在规范化阶段后将如下所示:
{
    "type": "HeartRate",
    "occurrenceTimeUtc": "2023-07-25T20:41:26.046Z",
    "deviceId": "sampleDeviceId",
    "patientId": "patient1",
    "properties": [
        {
            "name": "HeartRate",
            "value": "78"
        }
    ]
}
后续步骤
注释
FHIR® 是 HL7 的注册商标,用于 HL7 的权限。