Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This article describes how to add different types of tags to models and digital twins, and how to query using the tags.
You can use the concept of tags to further identify and categorize your digital twins. For example, you might want to replicate tags from existing systems, such as Haystack Tags, in your Azure Digital Twins instance.
This document describes patterns that can be used to implement tags on digital twins.
Tags are first added as properties within the model that describes a digital twin. That property is then set on the twin when it's created based on the model. After that, the tags can be used in queries to identify and filter your twins.
Marker tags
A marker tag is a simple string that is used to mark or categorize a digital twin, such as blue or red. This string is the tag's name, and marker tags have no meaningful value—the tag is significant just by its presence (or absence).
Add marker tags to model
Marker tags are modeled as a Digital Twin Definition Language (DTDL) Map from string
to boolean
. The boolean mapValue
is ignored, as the presence of the tag is all that's important.
Here's an excerpt from a twin model implementing a marker tag as a property:
{
"@type": "Property",
"name": "tags",
"schema": {
"@type": "Map",
"mapKey": {
"name": "tagName",
"schema": "string"
},
"mapValue": {
"name": "tagValue",
"schema": "boolean"
}
}
},
Add marker tags to digital twins
Once the tags
property is part of a digital twin's model, you can set the marker tag in the digital twin by setting the value of this property.
Here's a code example on how to set marker tags
for a twin using the .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);
After you create a twin with tag properties according to the previous example, the twin will look like this:
{
"$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
}
}
Tip
You can see a twin's JSON representation by querying it with the CLI or APIs.
Query with marker tags
Once tags are added to digital twins, the tags can be used to filter the twins in queries.
Here's a query to get all twins that are tagged as red:
SELECT * FROM DIGITALTWINS WHERE IS_DEFINED(tags.red)
You can also combine tags for more complex queries. Here's a query to get all twins that are round, and not red:
SELECT * FROM DIGITALTWINS WHERE NOT IS_DEFINED(tags.red) AND IS_DEFINED(tags.round)
Value tags
A value tag is a key-value pair that is used to give each tag a value, such as "color": "blue"
or "color": "red"
. Once a value tag is created, it can also be used as a marker tag by ignoring the tag's value.
Add value tags to model
Value tags are modeled as a DTDL Map from string
to string
. Both the mapKey
and the mapValue
are significant.
Here's an excerpt from a twin model implementing a value tag as a property:
{
"@type": "Property",
"name": "tags",
"schema": {
"@type": "Map",
"mapKey": {
"name": "tagName",
"schema": "string"
},
"mapValue": {
"name": "tagValue",
"schema": "string"
}
}
}
Add value tags to digital twins
As with marker tags, you can set the value tag in a digital twin by setting the value of this tags
property from the model. To use a value tag as a marker tag, you can set the tagValue
field to the empty string value (""
).
The following example shows the JSON bodies of two twins that have value tags to represent their sizes. The twins in the example also have value tags for red or purple that are being used as marker tags.
Example Twin1, with a value tag for size large and a marker tag of 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"
}
}
Example Twin2, with a value tag for size small and a marker tag of 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"
}
}
Query with value tags
As with marker tags, you can use value tags to filter the twins in queries. You can also use value tags and marker tags together.
From the previous example, red
is being used as a marker tag. Remember that this query gets all twins that are tagged as red:
SELECT * FROM DIGITALTWINS WHERE IS_DEFINED(tags.red)
Here's a query to get all entities that are small (value tag), and not red:
SELECT * FROM DIGITALTWINS WHERE NOT IS_DEFINED(tags.red) AND tags.size = 'small'
Next steps
- Learn more about designing and managing digital twin models: Manage DTDL models.
- Learn more about querying the twin graph: Query the twin graph.