Industriestandaard ontologieën converteren naar DTDL voor Azure Digital Twins

De meeste ontologieën zijn gebaseerd op semantische webstandaarden zoals OWL, RDF en RDFS.

Om een model met Azure Digital Twins te gebruiken, moet je het converteren naar DTDL-formaat. Dit artikel beschrijft algemene ontwerprichtlijnen in de vorm van een conversiepatroon voor het omzetten van RDF-gebaseerde modellen naar DTDL, zodat je ze kunt gebruiken met Azure Digital Twins.

Hoewel de voorbeelden in dit artikel gericht zijn op het bouwen, kunt u vergelijkbare processen toepassen op standaard ontologieën in verschillende branches om ze ook te converteren naar DTDL.

Omzettingspatroon

Er zijn verschillende bibliotheken van derden die kunnen worden gebruikt bij het converteren van RDF-modellen naar DTDL. Met sommige van deze bibliotheken kunt u uw modelbestand in een grafiek laden. U kunt de grafiek doorlopen die zoekt naar specifieke RDFS- en OWL-constructies en deze converteren naar DTDL.

De volgende tabel is een voorbeeld van hoe RDFS- en OWL-constructies kunnen worden toegewezen aan DTDL.

RDFS/OWL-concept RDFS/OWL-constructie DTDL-concept DTDL-constructie
Klassen owl:Class
IRI-achtervoegsel
rdfs:label
rdfs:comment
gebruikersinterface @type:Interface
@id
displayName
comment
Subklassen owl:Class
IRI-achtervoegsel
rdfs:label
rdfs:comment
rdfs:subClassOf
gebruikersinterface @type:Interface
@id
displayName
comment
extends
Eigenschappen van gegevenstype owl:DatatypeProperty
rdfs:label of INode
rdfs:label
rdfs:range
Interface-eigenschappen @type:Property
name
displayName
schema
Objecteigenschappen owl:ObjectProperty
rdfs:label of INode
rdfs:range
rdfs:comment
rdfs:label
Relatie type:Relationship
name
target (of weggelaten indien nee rdfs:range)
comment
displayName

In het volgende C#-codefragment ziet u hoe een RDF-modelbestand wordt geladen in een grafiek en wordt geconverteerd naar DTDL met behulp van de dotNetRDF-bibliotheek .

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

        }
    }
}

Volgende stappen

Ga door met het pad voor het ontwikkelen van modellen op basis van ontologieën: Volledig pad voor modelontwikkeling.