Compartilhar via


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.

Captura de tela do repositório RdfToDtdlConverter no GitHub. O botão Código está selecionado, com uma caixa de diálogo em que o botão Baixar ZIP está realçado.

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.