Konwertowanie standardowych nalogów branżowych na język DTDL dla usługi Azure Digital Twins

Większość dzienników jest oparta na semantycznych standardach sieci Web, takich jak OWL, RDF i RDFS.

Aby używać modelu z usługą Azure Digital Twins, musi być w formacie DTDL. W tym artykule opisano ogólne wskazówki dotyczące projektowania w postaci wzorca konwersji na konwertowanie modeli opartych na usłudze RDF na język DTDL, aby można było ich używać z usługą Azure Digital Twins.

Artykuł zawiera również przykładowy kod konwertera dla konwerterów RDF i OWL, które można rozszerzyć dla innych schematów w branży budowlanej.

Mimo że przykłady w tym artykule koncentrują się na tworzeniu, można zastosować podobne procesy do standardowych nalogów w różnych branżach, aby przekonwertować je również na DTDL.

Wzorzec konwersji

Istnieje kilka bibliotek innych firm, których można używać podczas konwertowania modeli opartych na usłudze RDF na język DTDL. Niektóre z tych bibliotek umożliwiają załadowanie pliku modelu do grafu. Możesz wykonać pętlę na grafie, wyszukując konkretne konstrukcje RDFS i OWL, i przekonwertować je na dtDL.

Poniższa tabela zawiera przykład sposobu mapowania konstrukcji RDFS i OWL na język DTDL.

Koncepcja RDFS/OWL Konstrukcja RDFS/OWL Koncepcja języka DTDL Konstrukcja DTDL
Klasy owl:Class
Sufiks IRI
rdfs:label
rdfs:comment
Interfejs @type:Interface
@id
displayName
comment
Podklasy owl:Class
Sufiks IRI
rdfs:label
rdfs:comment
rdfs:subClassOf
Interfejs @type:Interface
@id
displayName
comment
extends
Właściwości typu danych owl:DatatypeProperty
rdfs:label lub INode
rdfs:label
rdfs:range
Właściwości interfejsu @type:Property
name
displayName
schema
Właściwości obiektu owl:ObjectProperty
rdfs:label lub INode
rdfs:range
rdfs:comment
rdfs:label
Relacja type:Relationship
name
target (lub pominięty, jeśli nie rdfs:range)
comment
displayName

Poniższy fragment kodu w języku C# pokazuje, jak plik modelu RDF jest ładowany do grafu i konwertowany na język DTDL przy użyciu biblioteki dotNetRDF .

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

        }
    }
}

Przykłady konwerterów

Ta sekcja zawiera przykładowy kod konwertera dla konwerterów RDF i OWL, które można rozszerzyć dla innych schematów w branży budowlanej.

Aplikacja konwertera RDF

Dostępna jest przykładowa aplikacja, która konwertuje plik modelu oparty na funkcji RDF na wersję 2 (wersja 2). Język DTDL w wersji 2 jest obsługiwany przez usługę Azure Digital Twins, ale możesz również postępować zgodnie z tymi instrukcjami , aby przekonwertować modele DTDL v2 na nowszy kod DTDL w wersji 3.

Przykładowa aplikacja została zweryfikowana dla schematu Brick i może zostać rozszerzona dla innych schematów w branży budowlanej (np . Building Topology Ontology Ontology (BOT), Semantic Sensor Network lub buildingSmart Industry Foundation Classes (IFC)).

Przykład to aplikacja wiersza polecenia platformy .NET Core o nazwie RdfToDtdlConverter.

Aby pobrać kod na maszynę, wybierz przycisk Przeglądaj kod poniżej tytułu na przykładowej stronie, co spowoduje przejście do repozytorium GitHub dla przykładu. Wybierz przycisk Kod i pobierz plik ZIP, aby pobrać przykład jako plik zip o nazwie RdfToDtdlConverter-main.zip. Następnie możesz rozpakuć plik i eksplorować kod.

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

Możesz użyć tego przykładu, aby zobaczyć wzorce konwersji w kontekście i mieć jako blok konstrukcyjny dla własnych aplikacji wykonujących konwersje modeli zgodnie z własnymi potrzebami.

Konwerter OWL2DTDL

Konwerter OWL2DTDL to przykładowa baza kodu, która tłumaczy ontologię OWL na zestaw deklaracji interfejsu DTDL, który może być używany z usługą Azure Digital Twins. Działa również w przypadku sieci ontologii wykonanych z jednej głównej ontologii, która ponownie korzysta z innych nalogów za pomocą owl:imports deklaracji. Ten konwerter został użyty do tłumaczenia ontologii Core Nieruchomości na DTDL i może służyć do dowolnej ontologii opartej na protokole OWL.

Ten przykładowy kod nie jest kompleksowym rozwiązaniem, które obsługuje całą specyfikację OWL, ale może dać ci pomysły i kod początkowy, którego można użyć podczas tworzenia własnych potoków pozyskiwania ontologii.

Następne kroki

Kontynuuj pracę na ścieżce tworzenia modeli na podstawie dzienników: pełna ścieżka programowania modelu.