Dela via


Konvertera ontologier av branschstandard till DTDL för Azure Digital Twins

De flesta ontologier baseras på semantiska webbstandarder som OWL, RDF och RDFS.

Om du vill använda en modell med Azure Digital Twins måste den vara i DTDL-format. Den här artikeln beskriver allmän designvägledning i form av ett konverteringsmönster för konvertering av RDF-baserade modeller till DTDL så att de kan användas med Azure Digital Twins.

Artikeln innehåller också exempelkonverterarens kod för RDF- och OWL-konverterare, som kan utökas för andra scheman i byggbranschen.

Även om exemplen i den här artikeln är byggnadsfokuserade kan du tillämpa liknande processer på standard ontologier i olika branscher för att konvertera dem till DTDL också.

Konverteringsmönster

Det finns flera bibliotek från tredje part som kan användas vid konvertering av RDF-baserade modeller till DTDL. Med vissa av de här biblioteken kan du läsa in modellfilen i ett diagram. Du kan loopa igenom diagrammet och leta efter specifika RDFS- och OWL-konstruktioner och konvertera dem till DTDL.

Följande tabell är ett exempel på hur RDFS- och OWL-konstruktioner kan mappas till DTDL.

RDFS/OWL-koncept RDFS/OWL-konstruktion DTDL-koncept DTDL-konstruktion
Klasser owl:Class
IRI-suffix
rdfs:label
rdfs:comment
Gränssnitt @type:Interface
@id
displayName
comment
Underklasser owl:Class
IRI-suffix
rdfs:label
rdfs:comment
rdfs:subClassOf
Gränssnitt @type:Interface
@id
displayName
comment
extends
Egenskaper för datatyp owl:DatatypeProperty
rdfs:label eller INode
rdfs:label
rdfs:range
Gränssnittsegenskaper @type:Property
name
displayName
schema
Objektegenskaper owl:ObjectProperty
rdfs:label eller INode
rdfs:range
rdfs:comment
rdfs:label
Relation type:Relationship
name
target (eller utelämnas om ingen rdfs:range)
comment
displayName

Följande C#-kodfragment visar hur en RDF-modellfil läses in i en graf och konverteras till DTDL med hjälp av dotNetRDF-biblioteket .

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

        }
    }
}

Konverterarexempel

Det här avsnittet innehåller exempelkonverterarens kod för RDF- och OWL-konverterare, som kan utökas för andra scheman i byggbranschen.

RDF-konverterarprogram

Det finns ett tillgängligt exempelprogram som konverterar en RDF-baserad modellfil till DTDL Version 2 (v2). DTDL v2 stöds av Azure Digital Twins, men du kan också följa dessa instruktioner efteråt för att konvertera DTDL v2-modeller till nyare DTDL v3.

Exempelprogrammet har verifierats för Brick-schemat och kan utökas för andra scheman i byggbranschen (till exempel BOT (Building Topology Ontology), Semantic Sensor Network eller buildingSmart Industry Foundation Classes (IFC)).

Exemplet är ett .NET Core-kommandoradsprogram med namnet RdfToDtdlConverter.

Om du vill ladda ned koden till datorn väljer du knappen Bläddra kod under rubriken på exempelsidan, vilket tar dig till GitHub-lagringsplatsen för exemplet. Välj knappen Kod och Ladda ned ZIP för att ladda ned exemplet som en .zip fil med namnet RdfToDtdlConverter-main.zip. Du kan sedan packa upp filen och utforska koden.

Skärmbild av Lagringsplatsen RdfToDtdlConverter på GitHub. Knappen Kod är markerad och skapar en dialogruta där knappen Ladda ned ZIP är markerad.

Du kan använda det här exemplet för att se konverteringsmönstren i kontexten och ha som byggblock för dina egna program som utför modellkonverteringar enligt dina egna specifika behov.

OWL2DTDL konverterare

OWL2DTDL Converter är en exempelkodbas som översätter en OWL-ontologi till en uppsättning DTDL-gränssnittsdeklarationer som kan användas med Azure Digital Twins-tjänsten. Det fungerar också för ontologinätverk, gjorda av en rotontologi som återanvänder andra ontologier genom owl:imports deklarationer. Denna konverterare användes för att översätta Real Estate Core Ontology till DTDL och kan användas för alla OWL-baserade ontologier.

Den här exempelkoden är inte en heltäckande lösning som stöder hela OWL-specifikationen, men den kan ge dig idéer och startkod som du kan använda för att utveckla dina egna ontologiinmatningspipelines.

Nästa steg

Fortsätt på vägen för att utveckla modeller baserat på ontologier: Fullständig modellutvecklingsväg.