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

向数字孪生添加标记

本文介绍如何向模型和数字孪生添加不同类型的标记,以及如何使用标记进行查询。

可以使用标记的概念进一步识别和分类数字孪生体。 例如,你可能想要从 Azure 数字孪生实例中的现有系统(如 Haystack 标记)复制标记。

本文档介绍可用于在数字孪生体上实现标记的模式。

标记首先作为描述数字孪生体的属性添加到 模型中 。 然后,在基于模型创建孪生体时,在孪生体上设置该属性。 之后,可以在 查询 中使用标记来标识和筛选孪生体。

记号标记

标记标记是一个简单的字符串,用于标记或分类数字孪生体,例如蓝色红色。 此字符串是标签的名称,而标记标签本身没有有意义的值,标签的意义仅在于其是否存在。

向模型添加标记标签

标记标签被建模为从 stringboolean 映射。 忽略布尔值 mapValue ,因为标记的存在非常重要。

下面是将记号标记作为属性实现的一个孪生体模型的摘录:

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

向数字孪生体中添加记号标记

一旦tags属性成为数字孪生模型的一部分,通过设置该属性的值可以在数字孪生中设置标记。

下面是有关如何使用 tags 为孪生设置标记的代码示例:

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
  }
}

小窍门

使用 CLI 或 API 查询孪生体时,你会看到此孪生体的 JSON 表示形式。

使用记号标记进行查询

将标记添加到数字孪生体后,标记可用于在查询中筛选孪生体。

下面是一个查询,用于获取标记为 红色的所有孪生体:

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"。 创建值标记后,还可以通过忽略标记的值将其用作标记标记。

向模型添加值标记

值标记被建模为从 stringstring 映射。 mapKeymapValue都很重要。

下面是将值标记实现为属性的孪生模型摘录:

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

向数字孪生添加价值标签

与标记标签一样,您可以通过从模型设置此属性 tags 的值来设置数字孪生体中的值标签。 若要将值标记用作标记标记,可以将字段设置为 tagValue 空字符串值("")。

下面两个示例显示了两个孪生体的 JSON 正文,其中的值标记表示其大小。 示例中的孪生体还具有充当标记的 红色紫色 的值标记。

示例 Twin1,包含表示大的值标记和一个“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,包含表示小的值标记和一个“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'

后续步骤