Konvertieren von Branchenstandardontologien in DTDL für Azure Digital Twins

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

Damit ein Modell mit Azure Digital Twins verwendet werden kann, muss es im DTDL-Format vorliegen. Dieser Artikel bietet eine allgemeine Anleitung für den Entwurf in Form eines Konvertierungsmusters. Mit diesem Muster können RDF-basierte Modelle in DTDL umgewandelt werden, damit sie mit Azure Digital Twins verwendet werden können.

Er enthält außerdem einen Beispielkonvertercode für RDF- und OWL-Konverter, die für andere Schemas in der Baubranche erweitert werden 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, wenn ohne rdfs:range)
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);

        }
    }
}

Konverterbeispiele

Dieser Abschnitt enthält Beispielkonvertercode für RDF- und OWL-Konverter, die für andere Schemas in der Baubranche erweitert werden können.

RDF-Konverteranwendung

Es steht eine Beispielanwendung zur Verfügung, mit der eine RDF-basierte Modelldatei in DTDL-Version 2 (V2) konvertiert werden kann. DTDL V2 wird von Azure Digital Twins unterstützt, aber Sie können auch diesen Anweisungen folgen, um DTDL V2-Modelle in die neuere DTDL V3 zu konvertieren.

Die Beispielanwendung wurde für das Brick-Schema überprüft und kann für andere Schemas in der Baubranche erweitert werden (z. B. Building Topology Ontology (BOT), Semantic Sensor Network oder buildingSmart Industry Foundation Classes (IFC)).

Das Beispiel ist eine .NET Core-Befehlszeilenanwendung namens RdfToDtdlConverter.

Um den Code auf Ihren Computer herunterzuladen, wählen Sie auf der Beispielseite unterhalb des Titels die Schaltfläche Code durchsuchen aus. Sie gelangen zum GitHub-Repository für das Beispiel. Klicken Sie auf die Schaltfläche Code und dann auf ZIP herunterladen, um das Beispiel als ZIP-Datei namens RdfToDtdlConverter-main.zip herunterzuladen. Anschließend können Sie die Datei entzippen und den Code untersuchen.

Screenshot: GitHub-Repository „RdfToDtdlConverter“. Die Schaltfläche „Code“ wurde ausgewählt, und ein Dialogfeld wird angezeigt, in dem die Schaltfläche „ZIP herunterladen“ hervorgehoben ist.

Sie können sich mit dieser Beispielanwendung die Konvertierungsmuster im Kontext ansehen und als Baustein für Ihre eigenen Anwendungen verwenden. Außerdem können Sie entsprechend Ihren spezifischen Anforderungen Modellkonvertierungen durchführen.

OWL2DTDL-Konverter

Beim OWL2DTDL-Konverter handelt es sich um eine Beispielcodebasis, die eine OWL-Ontologie in mehrere DTDL-Schnittstellendeklarationen übersetzt. Diese können mit Azure Digital Twins verwendet werden. Der Konverter kann auch für Ontologienetzwerke verwendet werden, die aus einer Stammontologie bestehen, für die andere Ontologien über owl:imports-Deklarationen wiederverwendet werden. Dieser Konverter wurde verwendet, um die RealEstateCore-Ontologie in DTDL zu übersetzen. Er kann für jede OWL-basierte Ontologie wiederverwendet werden.

Dieser Beispielcode ist keine umfassende Lösung, die die gesamte OWL-Spezifikation unterstützt, aber sie kann Ihnen Ideen geben und als Ausgangspunkt für Code dienen, den Sie bei der Entwicklung Ihrer eigenen Ontologie-Erfassungspipelines verwenden können.

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.