Share via


Industriestandaard ontologieën converteren naar DTDL voor Azure Digital Twins

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

Als u een model wilt gebruiken met Azure Digital Twins, moet dit de DTDL-indeling hebben. In dit artikel worden algemene ontwerprichtlijnen beschreven in de vorm van een conversiepatroon voor het converteren van RDF-modellen naar DTDL, zodat ze kunnen worden gebruikt met Azure Digital Twins.

Het artikel bevat ook voorbeeldconversiecode voor RDF- en OWL-conversieprogramma's, die kunnen worden uitgebreid voor andere schema's in de bouwindustrie.

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.

Conversiepatroon

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/UIL concept RDFS/OWL-constructie DTDL-concept DTDL-constructie
Klassen owl:Class
Achtervoegsel IRI
rdfs:label
rdfs:comment
Interface @type:Interface
@id
displayName
comment
Subklassen owl:Class
Achtervoegsel IRI
rdfs:label
rdfs:comment
rdfs:subClassOf
Interface @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);

        }
    }
}

Voorbeelden van conversieprogramma's

Deze sectie bevat voorbeeldconversiecode voor RDF- en OWL-conversieprogramma's, die kunnen worden uitgebreid voor andere schema's in de bouwindustrie.

RDF-conversietoepassing

Er is een voorbeeldtoepassing beschikbaar waarmee een RDF-modelbestand wordt geconverteerd naar DTDL versie 2 (v2). DTDL v2 wordt ondersteund door Azure Digital Twins, maar u kunt deze instructies ook volgen om DTDL v2-modellen te converteren naar de nieuwere DTDL v3.

De voorbeeldtoepassing is gevalideerd voor het Brick-schema en kan worden uitgebreid voor andere schema's in de bouwindustrie (zoals Building Topology Ontology (BOT), Semantic Sensor Network of buildingSmart Industry Foundation Classes (IFC)).

Het voorbeeld is een .NET Core-opdrachtregeltoepassing met de naam RdfToDtdlConverter.

Als u de code naar uw computer wilt downloaden, selecteert u de knop Code bladeren onder de titel op de voorbeeldpagina. Hiermee gaat u naar de GitHub-opslagplaats voor het voorbeeld. Selecteer de knop Code en download ZIP om het voorbeeld te downloaden als een ZIP-bestand met de naam RdfToDtdlConverter-main.zip. Vervolgens kunt u het bestand uitpakken en de code verkennen.

Screenshot of the RdfToDtdlConverter repo on GitHub. The Code button is selected, producing a dialog box where the Download ZIP button is highlighted.

U kunt dit voorbeeld gebruiken om de conversiepatronen in context te bekijken en als bouwsteen te hebben voor uw eigen toepassingen die modelconversies uitvoeren op basis van uw eigen specifieke behoeften.

conversieprogramma voor OWL2DTDL

Het OWL2DTDL Converter is een voorbeeldcodebasis die een OWL-ontologie vertaalt in een set DTDL-interfacedeclaraties, die kunnen worden gebruikt met de Azure Digital Twins-service. Het werkt ook voor ontologienetwerken, gemaakt van één hoofd ontologie die andere ontologieën hergebruikt via owl:imports declaraties. Dit conversieprogramma werd gebruikt om de Real Estate Core Ontology te vertalen naar DTDL en kan worden gebruikt voor elke OP UIL gebaseerde ontologie.

Deze voorbeeldcode is geen uitgebreide oplossing die ondersteuning biedt voor de gehele UIL-specificatie, maar het kan u ideeën en begincode geven die u kunt gebruiken bij het ontwikkelen van uw eigen ontologieopnamepijplijnen.

Volgende stappen

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