你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

如何将 IotJsonPathContent 模板与 MedTech 服务设备映射配合使用

注意

快速医疗保健互操作性资源 (FHIR®) 是一个开放的医疗保健规范。

本文概述了如何在 MedTech 服务设备映射中使用 IotJsonPathContent 模板。

IotJsonPathContent 模板基础知识

当 MedTech 服务引入从Azure IoT 中心路由的设备消息时,可以使用 IotJsonPathContent 模板。 在 设备映射中使用 IotJsonPathContent 模板时,MedTech 服务将从 IoT 中心提供的元数据中提取设备 ID 和度量时间戳。 DeviceIdExpression 和 TimestampExpression 不应包含在 IotJsonPathContent 模板中。

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 事件中心事件中心读取的设备消息进行匹配和提取值:

元素 说明 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 以便创建新的患者资源和设备资源(如果尚不存在)。

注意

解析类型指定 MedTech 服务如何将设备数据与设备资源和患者资源相关联。 MedTech 服务使用设备标识符和患者标识符从 FHIR 服务读取设备和患者资源。 如果指定 了一个遇到标识符 并从设备数据有效负载中提取,则如果具有该标识符的 FHIR 服务上存在遇到,则将其链接到观察值。 如果成功规范化 了遇到标识符 ,但不存在具有该遭遇标识符的 FHIR 遭遇,则会引发 FhirResourceNotFound 异常。 有关配置 MedTech 服务 解析类型的详细信息,请参阅 配置目标选项卡

表达式语言

JSONPath 是默认的表达式语言,不支持在 IotJsonPathContent 模板中包含表达式语言。 如果尝试在表达式对象中指定表达式语言,则包含表达式对象的 IotJsonPathContent 模板将失败。

"templateType": "IotJsonPathContent",
   "template": {
      "typeName": "heartrate",
      "typeMatchExpression": "$..[?(@heartRate)]",
...
}

提示

有关 JSONPath 的详细信息,请参阅 JSONPath - XPath for JSON。 IotJsonPathContent 模板使用 JSON .NET 实现 来解析 JSONPath 表达式。

示例

当 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-utcSystemPropertiesiothub-connection-device-id。 有关详细信息,请参阅 反欺骗属性

patientIdExpression 仅在 “创建” 模式下的 MedTech 服务需要;但是,如果使用 Lookup ,则目标 FHIR 服务中必须存在具有匹配设备标识符的设备资源。 这些示例假定 MedTech 服务处于 “创建” 模式。 有关 “创建 ”和 “查找目标”属性的详细信息,请参阅 配置“目标”选项卡

在 MedTech 服务从事件中心读取设备消息之前,IoT 中心会扩充设备消息并将其路由到事件中心:

{
    "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"
        }
    ]
}

提示

有关修复常见 MedTech 服务部署错误的帮助,请参阅 排查 MedTech 服务部署错误

有关修复 MedTech 服务错误的帮助,请参阅 使用 MedTech 服务日志排查错误

后续步骤

本文介绍了如何将 IotJsonPathContent 模板与 MedTech 服务设备映射配合使用。

若要通过Azure IoT 中心部署启用了设备消息路由的 MedTech 服务,请参阅

有关 MedTech 服务 FHIR 目标映射的概述,请参阅

有关基于 MedTech 服务方案的映射示例的概述,请参阅

FHIR® 是 Health Level Seven International 的注册商标,在美国商标局注册,经其许可使用。