Konvertieren von Branchenstandardontologien in DTDL für Azure Digital Twins

Die meisten Ontologien basieren auf semantischen Webstandards wie OWL, RDF und RDFS.

Um ein Modell mit Azure Digital Twins zu verwenden, muss man es in das DTDL-Format konvertieren. Dieser Artikel beschreibt allgemeine Designanleitungen in Form eines Umwandlungsmusters zur Umwandlung von RDF-basierten Modellen in DTDL, sodass Sie sie mit Azure Digital Twins verwenden können.

Obwohl sich die Beispiele in diesem Artikel auf Gebäude konzentrieren, können Sie ähnliche Prozesse auf Standardontologien in verschiedenen Branchen anwenden, um sie ebenfalls in DTDL zu konvertieren.

Konvertierungsmuster

Zur Konvertierung von RDF-basierten Modellen in DTDL können mehrere Bibliotheken von Drittanbietern verwendet werden. Mit einigen dieser Bibliotheken können Sie die Modelldatei in ein Diagramm laden. Sie können das Diagramm durchlaufen, um nach spezifischen RDFS- und OWL-Konstrukten zu suchen und diese in DTDL umzuwandeln.

In der folgenden Tabelle sind Beispiele dafür aufgeführt, wie RDFS- und OWL-Konstrukte in DTDL zugeordnet werden können.

RDFS/OWL-Konzept RDFS/OWL-Konstrukt DTDL-Konzept DTDL-Konstrukt
Klassen owl:Class
IRI-Suffix
rdfs:label
rdfs:comment
Schnittstelle @type:Interface
@id
displayName
comment
Unterklassen owl:Class
IRI-Suffix
rdfs:label
rdfs:comment
rdfs:subClassOf
Schnittstelle @type:Interface
@id
displayName
comment
extends
Datentypeigenschaften owl:DatatypeProperty
rdfs:label oder INode
rdfs:label
rdfs:range
Schnittstelleneigenschaften @type:Property
name
displayName
schema
Objekteigenschaften owl:ObjectProperty
rdfs:label oder INode
rdfs:range
rdfs:comment
rdfs:label
Beziehung type:Relationship
name
target (oder weggelassen, falls kein rdfs:range vorhanden ist)
comment
displayName

Im folgenden C#-Codeausschnitt wird eine RDF-Modelldatei unter Verwendung der dotNetRDF-Bibliothek in ein Diagramm geladen und in DTDL konvertiert.

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

        }
    }
}

Nächste Schritte

Fahren Sie mit dem Pfad für das Entwickeln von Modellen basierend auf Ontologien fort: Entwicklungspfad für ein vollständiges Modell.