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.
È 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.