Condividi tramite


Convertire le ontologie standard del settore in DTDL per Gemelli digitali di Azure

La maggior parte delle ontologie si basa su standard Web semantici, ad esempio OWL, RDF e RDFS.

Per usare un modello con Gemelli digitali di Azure, deve essere in formato DTDL. Questo articolo descrive le linee guida di progettazione generali sotto forma di modello di conversione per la conversione di modelli basati su RDF in DTDL in modo che possano essere usati con Gemelli digitali di Azure.

L'articolo contiene anche codice del convertitore di esempio per i convertitori RDF e OWL, che possono essere estesi per altri schemi nel settore dell'edificio.

Anche se gli esempi in questo articolo sono incentrati sulla compilazione, è possibile applicare processi simili a ontologie standard in diversi settori per convertirli anche in DTDL.

Modello di conversione

Sono disponibili diverse librerie di terze parti che possono essere usate durante la conversione di modelli basati su RDF in DTDL. Alcune di queste librerie consentono di caricare il file del modello in un grafo. È possibile scorrere il grafico cercando costrutti RDFS e OWL specifici e convertirli in DTDL.

La tabella seguente è un esempio di come è possibile eseguire il mapping dei costrutti RDFS e OWL a DTDL.

Concetto di RDFS/OWL Costrutto RDFS/OWL Concetto DTDL Costrutto DTDL
Classi owl:Class
Suffisso IRI
rdfs:label
rdfs:comment
Interfaccia @type:Interface
@id
displayName
comment
Sottoclassi owl:Class
Suffisso IRI
rdfs:label
rdfs:comment
rdfs:subClassOf
Interfaccia @type:Interface
@id
displayName
comment
extends
Proprietà tipo di dati owl:DatatypeProperty
rdfs:label oppure INode
rdfs:label
rdfs:range
Proprietà dell'interfaccia @type:Property
name
displayName
schema
Proprietà oggetto owl:ObjectProperty
rdfs:label oppure INode
rdfs:range
rdfs:comment
rdfs:label
Relationship type:Relationship
name
target (o omesso se non rdfs:range)
comment
displayName

Il frammento di codice C# seguente mostra come viene caricato un file di modello RDF in un grafo e convertito in DTDL, usando la libreria 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);

        }
    }
}

Esempi di convertitori

Questa sezione contiene il codice del convertitore di esempio per i convertitori RDF e OWL, che possono essere estesi per altri schemi nel settore degli edifici.

Applicazione del convertitore RDF

È disponibile un'applicazione di esempio che converte un file di modello basato su RDF in DTDL versione 2 (v2). DTDL v2 è supportato da Gemelli digitali di Azure, ma è anche possibile seguire queste istruzioni per convertire i modelli DTDL v2 nella versione DTDL v3 più recente.

L'applicazione di esempio è stata convalidata per lo schema Brick e può essere estesa per altri schemi nel settore dell'edificio (ad esempio Building Topology Ontology (BOT), Semantic Sensor Network o buildingSmart Industry Foundation Classes (IFC)).

L'esempio è un'applicazione da riga di comando .NET Core denominata RdfToDtdlConverter.

Per scaricare il codice nel computer, selezionare il pulsante sfoglia codice sotto il titolo nella pagina di esempio, che consente di passare al repository GitHub per l'esempio. Selezionare il pulsante Codice e Scarica ZIP per scaricare l'esempio come file .zip denominato RdfToDtdlConverter-main.zip. È quindi possibile decomprimere il file ed esplorare il codice.

Screenshot del repository RdfToDtdlConverter in GitHub. Il pulsante Codice è selezionato, generando una finestra di dialogo in cui è evidenziato il pulsante Scarica ZIP.

È possibile usare questo esempio per visualizzare i modelli di conversione nel contesto e avere come blocco predefinito per le proprie applicazioni che eseguono conversioni di modelli in base alle proprie esigenze specifiche.

Convertitore OWL2DTDL

Il Convertitore OWL2DTDL è una codebase di esempio che converte un'ontologia OWL in un set di dichiarazioni di interfaccia DTDL, che può essere usato con il servizio Gemelli digitali di Azure. Funziona anche per le reti di ontologia, fatte di un'ontologia radice che riutilizza altre ontologie tramite dichiarazioni owl:imports. Questo convertitore è stato usato per convertire l’ontologia core immobiliare in DTDL e può essere usato per qualsiasi ontologia basata su OWL.

Questo codice di esempio non è una soluzione completa che supporta l'intera specifica OWL, ma può offrire idee e codice iniziale che è possibile usare per sviluppare pipeline di inserimento di ontologia personalizzate.

Passaggi successivi

Continuare con il percorso per lo sviluppo di modelli in base alle ontologie: percorso di sviluppo completo del modello.