ほとんどのオントロジは、OWL、RDF、RDFS などのセマンティック Web 標準に基づいています。
Azure Digital Twinsでモデルを使用するには、DTDL形式に変換する必要があります。 この記事では、RDFベースのモデルをDTDLに変換し、Azure Digital Twinsで使えるようにするための一般的な設計ガイダンスを紹介します。
この記事の例はビルドに焦点を当てていますが、同様のプロセスをさまざまな業界の標準オントロジに適用して DTDL に変換することもできます。
変換パターン
RDF ベースのモデルを DTDL に変換するときに使用できるサードパーティ製のライブラリがいくつかあります。 これらのライブラリの一部では、モデル ファイルをグラフに読み込むことができます。 グラフ内をループ処理して特定の RDFS および OWL コンストラクトを探し、これらを DTDL に変換することができます。
次の表は、RDFS および OWL コンストラクトをどのように DTDL にマップできるかの例を示しています。
| RDFS/OWL の概念 | RDFS/OWL 構文 | DTDL の概念 | DTDL の構成要素 |
|---|---|---|---|
| クラス | owl:ClassIRI サフィックス rdfs:labelrdfs:comment |
インターフェイス | @type:Interface@iddisplayNamecomment |
| サブクラス | owl:ClassIRI サフィックス rdfs:labelrdfs:commentrdfs:subClassOf |
インターフェイス | @type:Interface@iddisplayNamecommentextends |
| データ型のプロパティ | owl:DatatypePropertyrdfs:label または INoderdfs:labelrdfs:range |
インターフェイスのプロパティ | @type:PropertynamedisplayNameschema |
| [オブジェクトのプロパティ] | owl:ObjectPropertyrdfs:label または INoderdfs:rangerdfs:commentrdfs:label |
関係 | type:Relationshipnametarget (rdfs:range がない場合は省略)commentdisplayName |
次の C# コード スニペットは、dotNetRDF ライブラリを使用して、RDF モデル ファイルがどのようにグラフに読み込まれ、DTDL に変換されるかを示しています。
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);
}
}
}
次のステップ
オントロジに基づいてモデルを開発するためのパスに進みます: モデル開発の完全なパス。