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.
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.