Converter ontologias padrão do setor em DTDL para os Gêmeos Digitais do Azure
A maioria das ontologias baseia-se em padrões da Web semânticos, como OWL, RDF e RDFS.
Para usar um modelo com os Gêmeos Digitais do Azure, ele precisa estar no formato DTDL. Este artigo descreve as diretrizes de design gerais na forma de um padrão de conversão para converter modelos baseados em RDF em DTDL, assim eles podem ser usados com os Gêmeos Digitais do Azure.
O artigo também contém o código de exemplo de conversor para conversores RDF e OWL, que podem ser estendidos para outros esquemas no setor de construção.
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 |
---|---|---|---|
Classes | owl:Class Sufixo IRI rdfs:label rdfs:comment |
Interface | @type:Interface @id displayName comment |
Subclasses | owl:Class Sufixo IRI rdfs:label rdfs:comment rdfs:subClassOf |
Interface | @type:Interface @id displayName comment extends |
Propriedades datatype | owl:DatatypeProperty rdfs:label ou INode rdfs:label rdfs:range |
Propriedades de interface | @type:Property name displayName schema |
Propriedades do objeto | owl:ObjectProperty rdfs:label ou INode rdfs:range rdfs:comment rdfs:label |
Relação | type:Relationship name target (ou omitido se não tiver rdfs:range )comment displayName |
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);
}
}
}
Exemplos de conversor
Esta seção contém o código conversor de exemplo para conversores RDF e OWL, que podem ser estendidos para outros esquemas no setor de construção.
Aplicativo de conversor RDF
Há um aplicativo de exemplo disponível que converte um arquivo de modelo baseado em RDF em DTDL Versão 2 (v2). O DTDL v2 tem suporte dos Gêmeos Digitais do Azure, mas você também pode seguir estas instruções para converter modelos DTDL v2 para o DTDL v3, mais recente.
O aplicativo de exemplo foi validado para o esquema Brick e pode ser estendido para outros esquemas no setor de construção [como Criação de Ontologia de Topologia (BOT), Rede de Sensores Semânticos ou Industry Foundation Classes (IFC) da buildingSmart].
O exemplo é um aplicativo de linha de comando do .NET Core chamado RdfToDtdlConverter.
Para baixar o código em seu computador, selecione o botão Procurar código abaixo do título na página de exemplo, que levará você para o repositório GitHub para a amostra. Escolha o botão Código e Baixar ZIP para baixar o exemplo como um arquivo .zip chamado RdfToDtdlConverter-main.zip. Em seguida, você pode descompactar o arquivo e explorar o código.
Você pode usar esse exemplo para ver os padrões de conversão no contexto e ter como bloco de construção para seus próprios aplicativos fazendo conversões de modelo de acordo com as necessidades específicas.
Conversor OWL2DTDL
O Conversor OWL2DTDL é uma base de código de exemplo que converte uma ontologia OWL em um conjunto de declarações de interface DTDL, que podem ser usadas com o serviço dos Gêmeos Digitais do Azure. Ele também funciona para redes de ontologia feitas de uma ontologia raiz reutilizando outras ontologias por meio de declarações owl:imports
. Esse conversor foi usado para converter a ontologia Real Estate Core em DTDL e pode ser usado para qualquer ontologia baseada em OWL.
Este código de exemplo não é uma solução abrangente que dá suporte à totalidade da especificação OWL, mas pode fornecer ideias e código inicial que você pode usar no desenvolvimento de seus próprios pipelines de ingestão de ontologia.
Próximas etapas
Continue no caminho para o desenvolvimento de modelos com base em ontologias: Caminho de desenvolvimento de modelo completo.