Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Większość ontologii opiera się na standardach sieci semantycznej, takich jak OWL, RDF i RDFS.
Aby użyć modelu z Azure Digital Twins, musisz go przekonwertować do formatu DTDL. Ten artykuł opisuje ogólne wskazówki projektowe w formie wzorca konwersji do konwersji modeli opartych na RDF do DTDL, abyś mógł je używać z Azure Digital Twins.
Chociaż przykłady w tym artykule koncentrują się na budynkach, podobne procesy można również zastosować do standardowych ontologii w różnych branżach, aby przekonwertować je do formatu 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 iterować po grafie w poszukiwaniu określonych konstrukcji RDFS i OWL oraz przekształcić 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:ClassSufiks IRI rdfs:labelrdfs:comment |
Interfejs | @type:Interface@iddisplayNamecomment |
| Podklasy | owl:ClassSufiks IRI rdfs:labelrdfs:commentrdfs:subClassOf |
Interfejs | @type:Interface@iddisplayNamecommentextends |
| Właściwości typu danych | owl:DatatypePropertyrdfs:label lub INoderdfs:labelrdfs:range |
Właściwości interfejsu | @type:PropertynamedisplayNameschema |
| Właściwości obiektu | owl:ObjectPropertyrdfs:label lub INoderdfs:rangerdfs:commentrdfs:label |
Relacja | type:Relationshipnametarget (lub pominięty, jeśli nie rdfs:range)commentdisplayName |
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);
}
}
}
Następne kroki
Kontynuuj ścieżkę tworzenia modeli w oparciu o ontologie: Pełna ścieżka tworzenia modelu.