Partilhar via


Converter ontologias padrão do setor em DTDL para Gêmeos Digitais do Azure

A maioria das ontologias são baseadas em padrões semânticos da web, como OWL, RDF e RDFS.

Para usar um modelo com o Azure Digital Twins, ele deve estar no 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 em DTDL para que possam ser usados com os Gêmeos Digitais do Azure.

O artigo também contém código de conversor de exemplo para conversores RDF e OWL, que pode ser estendido para outros esquemas na indústria da construção.

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 Construção RDFS/OWL Conceito DTDL Construção 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 de tipo de dados owl:DatatypeProperty
rdfs:label ou INode
rdfs:label
rdfs:range
Propriedades da 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 rdfs:range)
comment
displayName

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);

        }
    }
}

Amostras do conversor

Esta seção contém código de conversor de exemplo para conversores RDF e OWL, que pode ser estendido para outros esquemas na indústria da construção.

Aplicação conversora RDF

Há um aplicativo de exemplo disponível que converte um arquivo de modelo baseado em RDF para DTDL Versão 2 (v2). A DTDL v2 é suportada pelos Gêmeos Digitais do Azure, mas você também pode seguir estas instruções para converter modelos DTDL v2 para a 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 Building Topology Ontology (BOT), Semantic Sensor Network ou buildingSmart Industry Foundation Classes (IFC)).

O exemplo é um aplicativo de linha de comando .NET Core chamado RdfToDtdlConverter.

Para baixar o código para sua máquina, selecione o botão Procurar código abaixo do título na página de exemplo, que o levará ao repositório GitHub para o exemplo. Selecione o botão Código e Baixar ZIP para baixar o exemplo como um arquivo .zip chamado RdfToDtdlConverter-main.zip. Você pode então descompactar o arquivo e explorar o código.

Captura de tela do repositório RdfToDtdlConverter no GitHub. O botão Código é selecionado, produzindo uma caixa de diálogo onde o botão Download ZIP é realçado.

Você pode usar este exemplo para ver os padrões de conversão no contexto e ter como um bloco de construção para seus próprios aplicativos fazendo conversões de modelo de acordo com suas próprias necessidades específicas.

OWL2DTDL conversor

O conversor de OWL2DTDL é uma base de código de exemplo que traduz uma ontologia OWL em um conjunto de declarações de interface DTDL, que podem ser usadas com o serviço Gêmeos Digitais do Azure. Também funciona para redes de ontologia, feitas de uma ontologia raiz reutilizando outras ontologias através owl:imports de declarações. Este conversor foi usado para traduzir o Real Estate Core Ontology para DTDL e pode ser usado para qualquer ontologia baseada em OWL.

Este código de exemplo não é uma solução abrangente que suporta a 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óximos passos

Continue no caminho para o desenvolvimento de modelos baseados em ontologias: Caminho completo de desenvolvimento de modelos.