Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A maioria das ontologias são baseadas em padrões semânticos da web, como OWL, RDF e RDFS.
Para usar um modelo com Azure Digital Twins, deve convertê-lo para formato DTDL. Este artigo descreve orientações gerais de design sob a forma de um padrão de conversão para converter modelos baseados em RDF para DTDL, para que possa usá-los com Azure Digital Twins.
Embora os exemplos neste artigo sejam focados na construção, você pode aplicar processos semelhantes a ontologias padrão em diferentes setores para convertê-las em DTDL também.
Padrão de conversão
Existem várias bibliotecas de terceiros que podem ser usadas ao converter modelos baseados em RDF para DTDL. Algumas dessas bibliotecas permitem que você carregue seu arquivo de modelo em um gráfico. Você pode percorrer o gráfico procurando construções RDFS e OWL específicas e convertê-las em DTDL.
A tabela a seguir é um exemplo de como as construções RDFS e OWL podem ser mapeadas para DTDL.
| Conceito RDFS/OWL | Estrutura RDFS/OWL | Conceito DTDL | Estrutura DTDL |
|---|---|---|---|
| Aulas | owl:ClassSufixo IRI rdfs:labelrdfs:comment |
Interfaz | @type:Interface@iddisplayNamecomment |
| Subclasses | owl:ClassSufixo IRI rdfs:labelrdfs:commentrdfs:subClassOf |
Interfaz | @type:Interface@iddisplayNamecommentextends |
| Propriedades de tipo de dados | owl:DatatypePropertyrdfs:label ou INoderdfs:labelrdfs:range |
Propriedades da interface | @type:PropertynamedisplayNameschema |
| Propriedades do objeto | owl:ObjectPropertyrdfs:label ou INoderdfs:rangerdfs:commentrdfs:label |
Relacionamento | type:Relationshipnametarget (ou omitido, se não houver rdfs:range)commentdisplayName |
O trecho de código C# a seguir mostra como um arquivo de modelo RDF é carregado em um gráfico e convertido em DTDL, usando a biblioteca dotNetRDF .
using VDS.RDF.Ontology;
using VDS.RDF.Parsing;
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace DigitalTwins_Samples
{
public class DigitalTwinsConvertRDFSample
{
public void Run()
{
Console.WriteLine("Reading file...");
FileLoader.Load(_ontologyGraph, rdfFile.FullName);
// Start looping through for each owl:Class
foreach (OntologyClass owlClass in _ontologyGraph.OwlClasses)
{
// Generate a DTMI for the owl:Class
string Id = GenerateDTMI(owlClass);
if (!String.IsNullOrEmpty(Id))
{
Console.WriteLine($"{owlClass.ToString()} -> {Id}");
// Create Interface
var dtdlInterface = new DtdlInterface
{
Id = Id,
Type = "Interface",
DisplayName = GetInterfaceDisplayName(owlClass),
Comment = GetInterfaceComment(owlClass),
Contents = new List<DtdlContents>(),
};
// An OWL graph can have parent/child classes.
// So to understand if an OWL class is a base class or a child class,
// look for a superclass on any given OWL class.
// If found, convert these to parent + child Interfaces using DTDL extends.
IEnumerable<OntologyClass> foundSuperClasses = owlClass.DirectSuperClasses;
//...
}
// Add interface to the list of interfaces
_interfaceList.Add(dtdlInterface);
}
// Serialize to JSON
var json = JsonConvert.SerializeObject(_interfaceList);
}
}
}
Próximos passos
Continue no caminho para o desenvolvimento de modelos baseados em ontologias: Caminho completo de desenvolvimento de modelos.