Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A maioria das ontologias baseia-se em padrões da Web semânticos, como OWL, RDF e RDFS.
Para usar um modelo com Gêmeos Digitais do Azure, você deve convertê-lo para o formato DTDL. Este artigo descreve orientações gerais de design na forma de um padrão de conversão para converter modelos baseados em RDF para DTDL, para que você possa usá-los com Gêmeos Digitais do Azure.
Embora os exemplos neste artigo sejam focados na compilação, você pode aplicar processos semelhantes a ontologias padrão em diferentes setores para também convertê-los em DTDL.
Padrão de conversão
Há várias bibliotecas de terceiros que podem ser usadas ao converter modelos baseados em RDF em DTDL. Algumas dessas bibliotecas permitem que você carregue seu arquivo de modelo em um grafo. Você pode executar um loop no grafo procurando constructos RDFS e OWL específicos e convertê-los em DTDL.
A tabela a seguir é um exemplo de como os constructos RDFS e OWL podem ser mapeados para DTDL.
| Conceito de RDFS/OWL | Constructo RDFS/OWL | Conceito de DTDL | Constructo DTDL |
|---|---|---|---|
| Aulas | owl:ClassSufixo IRI rdfs:labelrdfs:comment |
Interface | @type:Interface@iddisplayNamecomment |
| Subclasses | owl:ClassSufixo IRI rdfs:labelrdfs:commentrdfs:subClassOf |
Interface | @type:Interface@iddisplayNamecommentextends |
| Propriedades do tipo de dados | owl:DatatypePropertyrdfs:label ou INoderdfs:labelrdfs:range |
Propriedades de interface | @type:PropertynamedisplayNameschema |
| Propriedades do objeto | owl:ObjectPropertyrdfs:label ou INoderdfs:rangerdfs:commentrdfs:label |
Relação | type:Relationshipnametarget (ou omitido se não tiver rdfs:range)commentdisplayName |
O snippet de código C# a seguir mostra como um arquivo de modelo RDF é carregado em um grafo 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óximas etapas
Continue no caminho para o desenvolvimento de modelos com base em ontologias: Caminho de desenvolvimento de modelo completo.