CalculatedContentTemplate eşlemelerini kullanma

Önemli

Azure Healthcare API'leri şu anda ÖNizlemektedir. Beta veya önizleme aşamasında olan ya da başka bir şekilde henüz genel kullanıma sunulmamış olan Azure özelliklerinde geçerli olan ek yasal koşullar için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.

İpucu

IoT bağlayıcısı Cihaz ve FHIR hedef eşlemelerini düzenlemek, test etmek ve sorunlarını gidermek için IoMT Bağlayıcısı Veri Eşleci aracına göz atabilirsiniz. IoT bağlayıcısını karşıya yüklemek için eşlemeleri Azure portal IoT bağlayıcısı açık kaynak sürümüyle kullanın.

Bu makalede IoT bağlayıcısı Cihaz eşleme şablonlarıyla CalculatedContentTemplate eşlemelerini kullanma açıklanmıştır.

CalculatedContentTemplate

IoT bağlayıcısı, hem istediğiniz şablonla eşleşmesi hem de değerleri ayıklaması için ifade tabanlı bir içerik şablonu sağlar. İfadeler JSONPath veya JmesPath tarafından kullanılabilir. Şablon içindeki her ifade kendi ifade dilini seçebilir.

Not

Bir ifade dili tanımlanmamışsa, şablon için yapılandırılan varsayılan ifade dili kullanılır. Varsayılan değer JSONPath'tir ancak gerekirse üzerine yazılabilir.

İfade şu şekilde tanımlanır:

<name of expression> : {
        "value" : <the expression>,
        "language": <the expression language>
    }

Aşağıdaki örnekte typeMatchExpression şu şekilde tanımlanmıştır:

"templateType": "CalculatedContent",
    "template": {
        "typeName": "heartrate",
        "typeMatchExpression": {
            "value" : "$..[?(@heartRate)]",
            "language": "JsonPath"
        },
        ...
    }

İpucu

Cihaz eşleme şablonu için kullanılan varsayılan ifade dili JsonPath'tir. JsonPath kullanmak için yalnızca ifade sağlanmalıdır.

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

Şablon için kullanmak üzere varsayılan ifade dili, parametresi kullanılarak açıkça defaultExpressionLanguage belirtebilirsiniz:

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

CalculatedContentTemplate, aşağıda tanımlanan İfadeleri kullanarak bir Azure Olay Hub'ı iletisinde değerlerin eşleşmesine ve ayıklanmasına olanak sağlar:

Özellik Açıklama Örnek
TypeName Şablonla eşan ölçümlerle ilişkilendirilecek tür heartrate
TypeMatchExpression EventData yüküne göre değerlendirilen ifade. Eşleşen bir JToken bulunursa, şablon eşleşme olarak kabul edilir. Sonraki tüm ifadeler burada eşlene ayıklanan JToken'a göre değerlendirilir. $..[?(@heartRate)]
TimestampExpression Ölçümün OccurrenceTimeUtc değerini ayıklamak için ifade. $.matchedToken.endDate
DeviceIdExpression Cihaz tanımlayıcısını ayıklamak için ifade. $.matchedToken.deviceId
PatientIdExpression IdentityResolution Oluşturma modundayken gereklidir ve IdentityResolution Arama modundayken İsteğe bağlıdır. Hasta tanımlayıcısını ayıklamak için ifade. $.matchedToken.patientId
EncounterIdExpression İsteğe bağlı: Karşılaşma tanımlayıcısını ayıklamak için ifade. $.matchedToken.encounterId
CorrelationIdExpression İsteğe bağlı: Bağıntı tanımlayıcısını ayıklamak için ifade. Bu çıkış, FHIR hedef eşlemeleri içinde değerleri tek bir gözlemde gruplama için kullanılabilir. $.matchedToken.correlationId
Değerler[]. Valuename Sonraki ifade tarafından ayıklanan değerle ilişkilendirilen ad. FHIR hedef eşleme şablonunda istediğiniz değeri/bileşeni bağlamak için kullanılır. hr
Değerler[]. ValueExpression Istediği değeri ayıklamak için ifade. $.matchedToken.heartRate
Değerler[]. Gerekli Değerin yükte mevcut olması gerekir. Bulunamayan ölçümler oluşturulmaz ve InvalidOperationException oluşturulur. true

İfade Dilleri

İfade için kullanmak üzere dil belirtirken aşağıdaki değerler geçerlidir:

İfade Dili Değer
JSONPath JsonPath
JmesPath JmesPath

İpucu

JSONPath hakkında daha fazla bilgi için bkz. JSONPath. CalculatedContentTemplate, JSONPath ifadelerini çözümlemek için JSON .NET uygulamasını kullanır.

JmesPath hakkında daha fazla bilgi için bkz. JmesPath. CalculatedContentTemplate, JmesPath ifadelerini çözümlemek için JmesPath .NET uygulamasını kullanır.

Özel İşlevler

Bir dizi IoT bağlayıcısı Özel İşlevleri de mevcuttur. Bu Özel İşlevler, JmesPath belirtimlerinin bir parçası olarak sağlanan işlevlerin dışındadır. Özel İşlevler hakkında daha fazla bilgi için bkz. IoT bağlayıcısı Özel İşlevler.

Eşanmış Belirteç

TypeMatchExpression, gelen EventData yüküne göre değerlendirilir. Eşleşen bir JToken bulunursa, şablon eşleşme olarak kabul edilir.

Sonraki tüm ifadeler yeni bir JToken ile değerlendirilir. Bu yeni JToken hem özgün EventData yükünü hem de burada eşlene ayıklanan JToken'ı içerir.

Bu şekilde, özgün yük ve eşilen nesne sonraki ifadelerin her biri için kullanılabilir. Ayıklanan JToken, matchedToken özelliği olarak kullanılabilir.

Bu örnek ileti verildi:

İleti

{
  "Body": {
    "deviceId": "device123",
    "data": [
      {
        "systolic": "120", // Match
        "diastolic": "80", // Match 
        "date": "2021-07-13T17:29:01.061144Z"
      },
      {
        "systolic": "122", // Match
        "diastolic": "82", // Match
        "date": "2021-07-13T17:28:01.061122Z"
      }
    ]
  },
  "Properties": {},
  "SystemProperties": {}
}

Şablon

{
  "templateType": "CollectionContent",
  "template": [
    {
      "templateType": "CalculatedContent",
      "template": {
        "typeName": "heartrate",
        "typeMatchExpression": "$..[?(@systolic && @diastolic)]", // Expression
        "deviceIdExpression": "$.Body.deviceId", // This accesses the attribute 'deviceId' which belongs to the original event data
        "timestampExpression": "$.matchedToken.date", 
        "values": [
          {
            "required": "true",
            "valueExpression": "$.matchedToken.systolic",
            "valueName": "systolic"
          },
          {
            "required": "true",
            "valueExpression": "$.matchedToken.diastolic",
            "valueName": "diastolic"
          }
        ]
      }
    }
  ]
}

Yukarıdaki ifade kullanılarak iki eşleşme ayıklanır ve JTokens oluşturmak için kullanılır. Sonraki ifadeler aşağıdaki JTokens kullanılarak değerlendirilir:

{
  "Body": {
    "deviceId": "device123",
    "data": [
      {
        "systolic": "120", 
        "diastolic": "80",
        "date": "2021-07-13T17:29:01.061144Z"
      },
      {
        "systolic": "122",
        "diastolic": "82",
        "date": "2021-07-13T17:28:01.061122Z"
      }
    ]
  },
  "Properties": {},
  "SystemProperties": {},
  "matchedToken" : {
      "systolic": "120",
      "diastolic": "80",
      "date": "2021-07-13T17:29:01.061144Z"
  }
}

And

{
  "Body": {
    "deviceId": "device123",
    "data": [
      {
        "systolic": "120",
        "diastolic": "80",
        "date": "2021-07-13T17:29:01.061144Z"
      },
      {
        "systolic": "122", 
        "diastolic": "82", 
        "date": "2021-07-13T17:28:01.061122Z"
      }
    ]
  },
  "Properties": {},
  "SystemProperties": {},
  "matchedToken" : {
      "systolic": "122",
      "diastolic": "82",
      "date": "2021-07-13T17:28:01.061122Z"
    }
  }
}

Örnekler

Kalp Atış Hızı

İleti

{
  "Body": {
    "heartRate": "78",
    "endDate": "2019-02-01T22:46:01.8750000Z",
    "deviceId": "device123"
  },
  "Properties": {},
  "SystemProperties": {}
}

Şablon

    {
      "templateType": "CalculatedContent",
      "template": {
        "typeName": "heartrate",
        "typeMatchExpression": "$..[?(@heartRate)]",
        "deviceIdExpression": "$.matchedToken.deviceId",
        "timestampExpression": "$.matchedToken.endDate",
        "values": [
          {
            "required": "true",
            "valueExpression": "$.matchedToken.heartRate",
            "valueName": "hr"
          }
        ]
      }
    }

Tansiyon

İleti

{
    "Body": {
        "systolic": "123", // Match
        "diastolic" : "87", // Match
        "endDate": "2019-02-01T22:46:01.8750000Z",
        "deviceId": "device123"
    },
    "Properties": {},
    "SystemProperties": {}
}

Şablon

    {
      "templateType": "CalculatedContent",
      "template": {
        "typeName": "bloodpressure",
        "typeMatchExpression": "$..[?(@systolic && @diastolic)]", // Expression
        "deviceIdExpression": "$.matchedToken.deviceId",
        "timestampExpression": "$.matchedToken.endDate",
        "values": [
          {
            "required": "true",
            "valueExpression": "$.matchedToken.systolic",
            "valueName": "systolic"
          },
          {
            "required": "true",
            "valueExpression": "$.matchedToken.diastolic",
            "valueName": "diastolic"
          }
        ]
      }
    }

Project İletiden Birden Çok Ölçüm

İleti

{
    "Body": {
        "heartRate": "78", // Match (Template 1)
        "steps": "2", // Match (Template 2)
        "endDate": "2019-02-01T22:46:01.8750000Z",
        "deviceId": "device123"
    },
    "Properties": {},
    "SystemProperties": {}
}

Şablon 1

    {
      "templateType": "CalculatedContent",
      "template": {
        "typeName": "heartrate",
        "typeMatchExpression": "$..[?(@heartRate)]", // Expression
        "deviceIdExpression": "$.matchedToken.deviceId",
        "timestampExpression": "$.matchedToken.endDate",
        "values": [
          {
            "required": "true",
            "valueExpression": "$.matchedToken.heartRate",
            "valueName": "hr"
          }
        ]
      }
    },

Şablon 2

    {
      "templateType": "CalculatedContent",
      "template": {
        "typeName": "stepcount",
        "typeMatchExpression": "$..[?(@steps)]", // Expression
        "deviceIdExpression": "$.matchedToken.deviceId",
        "timestampExpression": "$.matchedToken.endDate",
        "values": [
          {
            "required": "true",
            "valueExpression": "$.matchedToken.steps",
            "valueName": "steps"
          }
        ]
      }
    }

Project Diziden İletide Birden Çok Ölçüm Gönderme

İleti

{
  "Body": [
    {
      "heartRate": "78", // Match
      "endDate": "2019-02-01T20:46:01.8750000Z",
      "deviceId": "device123"
    },
    {
      "heartRate": "81", // Match
      "endDate": "2019-02-01T21:46:01.8750000Z",
      "deviceId": "device123"
    },
    {
      "heartRate": "72", // Match
      "endDate": "2019-02-01T22:46:01.8750000Z",
      "deviceId": "device123"
    }
  ],
  "Properties": {},
  "SystemProperties": {}
}

Şablon

    {
      "templateType": "CalculatedContent",
      "template": {
        "typeName": "heartrate",
        "typeMatchExpression": "$..[?(@heartRate)]", // Expression
        "deviceIdExpression": "$.matchedToken.deviceId",
        "timestampExpression": "$.matchedToken.endDate",
        "values": [
          {
            "required": "true",
            "valueExpression": "$.matchedToken.heartRate",
            "valueName": "hr"
          }
        ]
      }
    }

Project belirteçten ve özgün olaydan veri toplama

İleti

{
  "Body": {
    "deviceId": "device123",
    "data": [
      {
        "systolic": "120", // Match
        "diastolic": "80", // Match 
        "date": "2021-07-13T17:29:01.061144Z"
      },
      {
        "systolic": "122", // Match
        "diastolic": "82", // Match
        "date": "2021-07-13T17:28:01.061122Z"
      }
    ]
  },
  "Properties": {},
  "SystemProperties": {}
}

Şablon

    {
      "templateType": "CalculatedContent",
      "template": {
        "typeName": "heartrate",
        "typeMatchExpression": "$..[?(@systolic && @diastolic)]", // Expression
        "deviceIdExpression": "$.Body.deviceId", // This accesses the attribute 'deviceId' which belongs to the original event data
        "timestampExpression": "$.matchedToken.date", 
        "values": [
          {
            "required": "true",
            "valueExpression": "$.matchedToken.systolic",
            "valueName": "systolic"
          },
          {
            "required": "true",
            "valueExpression": "$.matchedToken.diastolic",
            "valueName": "diastolic"
          }
        ]
      }
    }

Gelen verileri seçme ve dönüştürme

Aşağıdaki örnekte yükseklik verileri inç veya metre olarak gelir. Tüm normalleştirilmiş yükseklik verilerini metre olarak görmek istiyorum. Bu sonuca ulaşmak için yalnızca inç olarak yükseklik verilerini hedef alan ve bunları metrelere dönüştüren bir şablon oluştururuz. Başka bir şablon, yükseklik verilerini metre olarak hedefler ve yalnızca olduğu gibi depolar.

İleti

{
  "Body": [
    {
      "height": "78",
      "unit": "inches", // Match (Template 1)
      "endDate": "2019-02-01T22:46:01.8750000Z",
      "deviceId": "device123"
    },
    {
      "height": "1.9304",
      "unit": "meters", // Match (Template 2)
      "endDate": "2019-02-01T23:46:01.8750000Z",
      "deviceId": "device123"
    }
  ],
  "Properties": {},
  "SystemProperties": {}
}

Şablon 1

    {
      "templateType": "CalculatedContent",
      "template": {
        "typeName": "heightInMeters",
        "typeMatchExpression": "$..[?(@unit == 'inches')]",
        "deviceIdExpression": "$.matchedToken.deviceId",
        "timestampExpression": "$.matchedToken.endDate",
        "values": [
          {
            "required": "true",
            "valueExpression": {
              "value": "multiply(to_number(matchedToken.height), `0.0254`)", // Convert inches to meters. Notice we utilize JmesPath as that gives us access to transformation functions
              "language": "JmesPath"
            },
            "valueName": "height"
          }
        ]
      }
    }

Şablon 2

    {
      "templateType": "CalculatedContent",
      "template": {
        "typeName": "heightInMeters",
        "typeMatchExpression": "$..[?(@unit == 'meters')]",
        "deviceIdExpression": "$.matchedToken.deviceId",
        "timestampExpression": "$.matchedToken.endDate",
        "values": [
          {
            "required": "true",
            "valueExpression": "$.matchedToken.height", // Simply extract the height as it is already in meters
            "valueName": "height"
          }
        ]
      }
    }

İpucu

Sık karşılaşılan hataları ve sorunları düzeltme konusunda yardım için bkz. IoT bağlayıcısı sorun giderme kılavuzu.

Sonraki adımlar

Bu makalede Cihaz eşlemelerini kullanmayı öğrendinsiniz. FHIR hedef eşlemelerini kullanmayı öğrenmek için bkz.

(FHIR®), HL7'nin kayıtlı bir ticari markasıdır ve HL7'nin izniyle kullanılır.