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

向数字孪生体添加标记

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

你可以使用标记概念进一步识别你的数字孪生体并对其进行归类。 特别是,用户可能希望在其 Azure 数字孪生实例中复制现有系统中的标记,例如 Haystack 标记

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

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

记号标记

记号标记是一个简单字符串,用来对数字孪生体进行标记或归类,例如“blue”或“red”。 此字符串是标记的名称,记号标记没有有意义的值 — 标记的重要性仅体现在它的存在(或缺失)。

向模型中添加记号标记

记号标记建模为从 stringbooleanDTDL 映射。 布尔值 mapValue 会被忽略,因为此标记只要存在就够了。

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

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

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

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

下面是有关如何为使用 .NET SDK 的孪生体设置标记 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 表示形式。

使用记号标记进行查询

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

下面的查询获取已标记为“red”的所有孪生体:

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

向模型中添加值标记

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

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

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

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

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

下面是两个孪生体的 JSON 正文,其中的值标记表示其大小。 此示例中的孪生体还包含用作记号标记的“red”或“purple”的值标记。

示例 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 用作记号标记。 请记住,下面的查询获取已标记为“red”的所有孪生体:

SELECT * FROM DIGITALTWINS WHERE IS_DEFINED(tags.red)

下面的查询获取所有小型(值标签)且非红色的实体:

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

后续步骤

详细了解如何设计和管理数字孪生体模型:

详细了解如何查询孪生图: