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


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

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

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

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

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

Теги маркеров

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

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

Теги маркеров моделируются как карта языка определения цифровых двойников (DTDL) от string до boolean. Логическое значение mapValue игнорируется, так как важно лишь наличие тега.

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

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

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

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

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

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 двух двойников, которые имеют теги значений для представления их размеров. Близнецы в примере также имеют теги значений для красного или фиолетового, используемые как маркерные теги.

Пример Twin1 с тегом значения для большого размера и тегом маркера красного цвета:

{
  "$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 с тегом значения для маленького размера и тегом маркера фиолетового цвета:

{
  "$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'

Дальнейшие шаги