你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何向模型和数字孪生添加不同类型的标记,以及如何使用标记进行查询。
可以使用标记的概念进一步识别和分类数字孪生体。 例如,你可能想要从 Azure 数字孪生实例中的现有系统(如 Haystack 标记)复制标记。
本文档介绍可用于在数字孪生体上实现标记的模式。
标记首先作为描述数字孪生体的属性添加到 模型中 。 然后,在基于模型创建孪生体时,在孪生体上设置该属性。 之后,可以在 查询 中使用标记来标识和筛选孪生体。
记号标记
标记标记是一个简单的字符串,用于标记或分类数字孪生体,例如蓝色或红色。 此字符串是标签的名称,而标记标签本身没有有意义的值,标签的意义仅在于其是否存在。
向模型添加标记标签
标记标签被建模为从 到 string 的 boolean 映射。 忽略布尔值 mapValue ,因为标记的存在非常重要。
下面是将记号标记作为属性实现的一个孪生体模型的摘录:
{
"@type": "Property",
"name": "tags",
"schema": {
"@type": "Map",
"mapKey": {
"name": "tagName",
"schema": "string"
},
"mapValue": {
"name": "tagValue",
"schema": "boolean"
}
}
},
向数字孪生体中添加记号标记
一旦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"。 创建值标记后,还可以通过忽略标记的值将其用作标记标记。
向模型添加值标记
值标记被建模为从 到 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,包含表示大的值标记和一个“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'
后续步骤
- 详细了解如何设计和管理数字孪生模型: 管理 DTDL 模型。
- 详细了解如何查询孪生图: 查询孪生图。