Conversión de ontologías estándar del sector a DTDL para Azure Digital Twins

La mayoría de las ontologías se basan en estándares web semánticos como OWL, RDF y RDFS.

Para usar un modelo con Azure Digital Twins, debe tener el formato DTDL. En este artículo se describen las instrucciones de diseño generales en forma de patrón de conversión para convertir modelos basados en RDF al lenguaje DTDL, con el fin de que se puedan usar con Azure Digital Twins.

Este artículo también contiene un código de ejemplo de convertidor para los convertidores RDF y OWL, que se puede extender para otros esquemas del sector de la construcción.

Aunque los ejemplos de este artículo están centrados en la creación, también puede aplicar procesos similares a las ontologías estándar en distintos sectores para convertirlos en DTDL.

Patrón de conversión

Hay varias bibliotecas de terceros que se pueden usar al convertir modelos basados en RDF a DTDL. Algunas de estas bibliotecas le permiten cargar el archivo del modelo en un grafo. Puede recorrer el grafo en bucle en busca de construcciones específicas de RDFS y OWL, y realizar la conversión a DTDL.

La tabla siguiente es un ejemplo de cómo se pueden asignar las construcciones RDFS y OWL a DTDL.

Concepto RDFS/OWL Construcción RDFS/OWL Concepto DTDL Construcción DTDL
Clases owl:Class
Sufijo IRI
rdfs:label
rdfs:comment
Interfaz @type:Interface
@id
displayName
comment
Subclases owl:Class
Sufijo IRI
rdfs:label
rdfs:comment
rdfs:subClassOf
Interfaz @type:Interface
@id
displayName
comment
extends
Propiedades de tipos de datos owl:DatatypeProperty
rdfs:label o INode
rdfs:label
rdfs:range
Propiedades de interfaz @type:Property
name
displayName
schema
Propiedades del objeto owl:ObjectProperty
rdfs:label o INode
rdfs:range
rdfs:comment
rdfs:label
Relación type:Relationship
name
target (o se omite si no hay rdfs:range)
comment
displayName

En el siguiente fragmento de código en C# se muestra cómo se carga un archivo de modelo de RDF en un grafo y se convierte a DTDL, mediante la 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);

        }
    }
}

Ejemplos de convertidor

Esta sección contiene código de convertidor de ejemplo para convertidores RDF y OWL, que se pueden ampliar para otros esquemas del sector de la construcción.

Aplicación del convertidor RDF

Hay una aplicación de ejemplo disponible que convierte un archivo de modelo basado en RDF en DTDL versión 2 (v2). DTDL v2 es compatible con Azure Digital Twins, pero también puede seguir estas instrucciones para convertir modelos DTDL v2 a la versión 3 más reciente de DTDL.

La aplicación de ejemplo se ha validado para el esquema Brick y se puede ampliar para otros esquemas del sector de la creación (como la ontología de topología de compilación (BOT), la red de sensores semánticos o buildingSmart Industry Foundation Classes (IFC)).

El ejemplo es una aplicación de línea de comandos de .NET Core denominada RdfToDtdlConverter.

Para descargar el código en la máquina, seleccione el botón Examinar código debajo del título de la página de ejemplo, que le llevará al repositorio de GitHub para el ejemplo. Seleccione el botón Code (Código) y Download ZIP (Descargar ZIP) para descargar el ejemplo como un archivo ZIP denominado RdfToDtdlConverter-main.zip. A continuación, puede descomprimir el archivo y explorar el código.

Screenshot of the RdfToDtdlConverter repo on GitHub. The Code button is selected, producing a dialog box where the Download ZIP button is highlighted.

Puede usar este ejemplo para ver los patrones de conversión en contexto y tener como bloque de creación de sus propias aplicaciones la realización de conversiones de modelos de acuerdo con sus propias necesidades específicas.

Convertidor OWL2DTDL

El convertidor de OWL2DTDL es una base de código de ejemplo que traduce una ontología de OWL en un conjunto de declaraciones de interfaz DTDL, que se pueden usar con el servicio Azure Digital Twins. Esto también funciona para redes de ontologías que están constituidas por una ontología raíz que reutiliza otras ontologías a través de declaraciones owl:imports. Este convertidor se usó para trasladar la ontología RealStateCore a DTDL y se puede utilizar con cualquier ontología basada en OWL.

Este código de ejemplo no es una solución completa que admite la totalidad de la especificación de OWL, pero puede proporcionarle ideas e iniciar código que puede usar para desarrollar sus propias canalizaciones de ingesta de ontología.

Pasos siguientes

Continúe en la ruta de acceso para desarrollar modelos basados en ontologías: ruta de desarrollo de modelos completa.