Aggiungere tag ai gemelli digitali
Questo articolo descrive come aggiungere diversi tipi di tag ai modelli e ai gemelli digitali e come eseguire query usando i tag.
È possibile usare il concetto di tag per identificare e classificare ulteriormente i gemelli digitali. In particolare, gli utenti possono voler replicare tag da sistemi esistenti, ad esempio Tag Haystack, all'interno delle istanze di Gemelli digitali di Azure.
Questo documento descrive i modelli che possono essere usati per implementare tag nei gemelli digitali.
I tag vengono prima aggiunti come proprietà all'interno del modello che descrive un gemello digitale. Tale proprietà viene quindi impostata sul gemello quando viene creata in base al modello. Successivamente, i tag possono essere usati nelle query per identificare e filtrare i gemelli.
Tag marcatore
Un tag marcatore è una stringa semplice usata per contrassegnare o classificare un gemello digitale, ad esempio "blu" o "rosso". Questa stringa è il nome del tag e i tag marcatore non hanno alcun valore significativo. Il tag è significativo solo per la sua presenza (o assenza).
Aggiungere tag di marcatore al modello
I tag marcatori vengono modellati come mappa DTDL da string
a boolean
. Il valore booleano mapValue
viene ignorato, perché la presenza del tag è tutto ciò che è importante.
Ecco un estratto di un modello gemello che implementa un tag marcatore come proprietà:
{
"@type": "Property",
"name": "tags",
"schema": {
"@type": "Map",
"mapKey": {
"name": "tagName",
"schema": "string"
},
"mapValue": {
"name": "tagValue",
"schema": "boolean"
}
}
},
Aggiungere tag di marcatore a gemelli digitali
Quando la tags
proprietà fa parte del modello di un gemello digitale, è possibile impostare il tag marcatore nel gemello digitale impostando il valore di questa proprietà.
Ecco un esempio di codice su come impostare l'indicatore tags
per un gemello usando .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);
Dopo aver creato un gemello con proprietà tag in base all'esempio precedente, il gemello avrà un aspetto simile al seguente:
{
"$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
}
}
Suggerimento
È possibile visualizzare la rappresentazione JSON di un gemello eseguendo una query con l'interfaccia della riga di comando o le API.
Eseguire una query con tag marcatore
Dopo aver aggiunto tag ai gemelli digitali, i tag possono essere usati per filtrare i gemelli nelle query.
Ecco una query per ottenere tutti i gemelli contrassegnati come "rosso":
SELECT * FROM DIGITALTWINS WHERE IS_DEFINED(tags.red)
È anche possibile combinare tag per query più complesse. Ecco una query per ottenere tutti i gemelli arrotondati e non rossi:
SELECT * FROM DIGITALTWINS WHERE NOT IS_DEFINED(tags.red) AND IS_DEFINED(tags.round)
Tag valore
Un tag valore è una coppia chiave-valore usata per assegnare a ogni tag un valore, ad esempio "color": "blue"
o "color": "red"
. Dopo aver creato un tag di valore, può essere usato anche come tag marcatore ignorando il valore del tag.
Aggiungere tag di valore al modello
I tag valore vengono modellati come mappa DTDL da string
a string
. Sia l'oggetto mapKey
che il mapValue
sono significativi.
Di seguito è riportato un estratto di un modello gemello che implementa un tag di valore come proprietà:
{
"@type": "Property",
"name": "tags",
"schema": {
"@type": "Map",
"mapKey": {
"name": "tagName",
"schema": "string"
},
"mapValue": {
"name": "tagValue",
"schema": "string"
}
}
}
Aggiungere tag di valore ai gemelli digitali
Come per i tag marcatore, è possibile impostare il tag valore in un gemello digitale impostando il valore di questa tags
proprietà dal modello. Per usare un tag valore come tag marcatore, è possibile impostare il tagValue
campo sul valore stringa vuoto (""
).
Di seguito sono riportati i corpi JSON di due gemelli con tag di valore per rappresentare le dimensioni. I gemelli nell'esempio hanno anche tag di valore per "rosso" o "viola" usati come tag marcatore.
Esempio di Twin1, con un tag di valore per dimensioni grandi e un tag marcatore "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"
}
}
Esempio di Twin2, con un tag di valore per le dimensioni ridotte e un tag marcatore "viola":
{
"$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"
}
}
Eseguire query con tag valore
Come per i tag marcatore, è possibile usare tag valore per filtrare i gemelli nelle query. È anche possibile usare tag di valore e tag marcatore insieme.
Nell'esempio precedente viene red
usato come tag marcatore. Tenere presente che si tratta di una query per ottenere tutti i gemelli contrassegnati come "rosso":
SELECT * FROM DIGITALTWINS WHERE IS_DEFINED(tags.red)
Ecco una query per ottenere tutte le entità piccole (tag valore) e non rosse:
SELECT * FROM DIGITALTWINS WHERE NOT IS_DEFINED(tags.red) AND tags.size = 'small'
Passaggi successivi
Altre informazioni sulla progettazione e la gestione dei modelli di gemelli digitali:
Altre informazioni sull'esecuzione di query sul grafo del gemello: