Поделиться через


Добавление тегов в цифровые двойники

В этой статье описывается, как добавлять различные типы тегов в модели и цифровые двойники, а также как запрашивать их с помощью тегов.

Чтобы дополнительно найти и классифицировать своих цифровых двойников, используйте концепцию тегов. В частности, пользователям может потребоваться реплицировать теги из существующих систем, таких как теги иголка, в свои экземпляры цифровых двойников Azure.

В этом документе описываются шаблоны, которые можно использовать для реализации тегов в цифровых двойниках.

Сначала теги добавляются в качестве свойств в модель, описывающую цифрового двойника. Затем это свойство устанавливается на двойник при создании на основе модели. После этого теги можно использовать в запросах для обнаружения и фильтрации своих двойников.

Теги маркера

Тег маркера — это простая строка, используемая для отметки или классификации цифрового двойника, например "синий" или "красный". Эта строка является именем тега, а теги маркера не имеют осмысленного значения — тег является значимым только при его наличии (или отсутствии).

Добавление тегов маркера в модель

Теги маркера моделируются в виде карты DTDL от string до boolean. Логическое значение mapValue игнорируется, так как важно присутствие тега.

Ниже приведен фрагмент модели двойников, реализующий тег маркера в качестве свойства:

{
      "@type": "Property",
      "name": "tags",
      "schema": {
        "@type": "Map",
        "mapKey": {
          "name": "tagName",
          "schema": "string"
        },
        "mapValue": {
          "name": "tagValue",
          "schema": "boolean"
        }
      }
    },

Добавление тегов маркера в цифровые двойники

Когда свойство tags становится частью модели цифрового двойника, можно установить тег маркера в цифровом двойнике, задав значение этого свойства.

Ниже приведен пример кода по настройке маркера tags для двойника с помощью пакета SDK для .NET:

IDictionary<string, bool> tags = new Dictionary<string, bool>
{
    { "oceanview", true },
    { "VIP", true }
};
var twin = new BasicDigitalTwin
{
    Metadata = { ModelId = "dtmi:example:Room;1" },
    Contents =
    {
        { "Temperature", 75 },
        { "tags", tags },
    },
};
await client.CreateOrReplaceDigitalTwinAsync<BasicDigitalTwin>("myTwinID", twin);

После создания двойника со свойствами тегов в соответствии с приведенным выше примером двойник будет выглядеть следующим образом:

{
  "$dtId": "myTwinID",
  "$etag": "W/\"e7429259-6833-46b4-b443-200a77a468c2\"",
  "$metadata": {
    "$model": "dtmi:example:Room;1",
    "Temperature": {
      "lastUpdateTime": "2021-08-03T14:24:42.0850614Z"
    },
    "tags": {
      "lastUpdateTime": "2021-08-03T14:24:42.0850614Z"
    }
  },
  "Temperature": 75,
  "tags": {
    "VIP": true,
    "oceanview": true
  }
}

Совет

Чтобы просмотреть представление JSON двойника, выполните запрос к нему из интерфейса командной строки или API.

Запрос с тегами маркера

После добавления тегов в цифровые двойники теги можно использовать для фильтрации двойников в запросах.

Ниже приведен запрос, чтобы получить все двойники, помеченные как красные:

SELECT * FROM DIGITALTWINS WHERE IS_DEFINED(tags.red)

Кроме того, можно комбинировать теги для более сложных запросов. Ниже приведен запрос для получения всех двойников, которые являются круглыми, а не красными:

SELECT * FROM DIGITALTWINS WHERE NOT IS_DEFINED(tags.red) AND IS_DEFINED(tags.round)

Теги значения

Тег значения — это пара "ключ/значение", которая используется для присвоения каждому тегу значения, например "color": "blue" или "color": "red". После создания тега значения тег можно использовать в качестве тега маркера, игнорируя значение тега.

Добавление тегов значения в модель

Теги значения моделируются в виде карты DTDL от string до string. Как mapKey, так и mapValue являются значимыми.

Ниже приведен фрагмент модели двойников, реализующий тег значения в качестве свойства:

{
  "@type": "Property",
  "name": "tags",
  "schema": {
    "@type": "Map",
    "mapKey": {
      "name": "tagName",
      "schema": "string"
    },
    "mapValue": {
      "name": "tagValue",
      "schema": "string"
    }
  }
}

Добавление тегов значения в цифровые двойники

Как и в случае с тегами маркера, можно задать тег значения в цифровом двойнике и установить значение этого свойства tags из модели. Чтобы использовать тег значения в качестве тега маркера, можно присвоить полю tagValue пустое строковое значение ("").

Ниже приведены примеры тела JSON двух двойников, имеющих теги значений, представляющие их размеры. В этом примере двойники также имеют теги значений red или purple, которые используются в качестве тегов маркера.

Пример двойника Twin1 с тегом значения для размера large и тегом маркера red:

{
  "$dtId": "Twin1",
  "$etag": "W/\"d3997593-cc5f-4d8a-8683-957becc2bcdd\"",
  "$metadata": {
    "$model": "dtmi:example:ValueTags;1",
    "tags": {
      "lastUpdateTime": "2021-08-03T14:43:02.3150852Z"
    }
  },
  "tags": {
    "red": "",
    "size": "large"
  }
}

Пример двойника Twin2 с тегом значения для размера small и тегом маркера purple:

{
  "$dtId": "Twin2",
  "$etag": "W/\"e215e586-b14a-4234-8ddb-be69ebfef878\"",
  "$metadata": {
    "$model": "dtmi:example:ValueTags;1",
    "tags": {
      "lastUpdateTime": "2021-08-03T14:43:53.1517123Z"
    }
  },
  "tags": {
    "purple": "",
    "size": "small"
  }
}

Запрос с тегами значения

Как и в случае с тегами маркера, можно использовать теги значения для фильтрации двойников в запросах. Кроме того, можно использовать теги значения и теги маркера вместе.

В приведенном выше примере red используется как тег маркера. Не забудьте, что это запрос для получения всех двойников, отмеченных тегом "красный":

SELECT * FROM DIGITALTWINS WHERE IS_DEFINED(tags.red)

Ниже приведен запрос, чтобы получить все сущности, которые являются небольшими (тегом значения), а не красным:

SELECT * FROM DIGITALTWINS WHERE NOT IS_DEFINED(tags.red) AND tags.size = 'small'

Следующие шаги

Дополнительные сведения о проектировании моделей цифровых двойников и управлении ими:

Дополнительные сведения о запросах к графу двойника: