業界標準オントロジを Azure Digital Twins 用の DTDL に変換する
ほとんどのオントロジは、OWL、RDF、RDFS などのセマンティック Web 標準に基づいています。
Azure Digital Twins でモデルを使用するには、それが DTDL 形式である必要があります。 この記事では、RDF ベースのモデルを DTDL に変換して Azure Digital Twins で使用できるようにするための変換パターンの形式で、一般的な設計ガイダンスについて説明します。
この記事には、RDF および OWL コンバーターのサンプル コンバーター コードも含まれます。これは、ビルド業界の他のスキーマ向けに拡張できます。
この記事の例はビルドに焦点を当てていますが、同様のプロセスをさまざまな業界の標準オントロジに適用して DTDL に変換することもできます。
変換パターン
RDF ベースのモデルを DTDL に変換するときに使用できるサードパーティ製のライブラリがいくつかあります。 これらのライブラリの一部では、モデル ファイルをグラフに読み込むことができます。 グラフ内をループ処理して特定の RDFS および OWL コンストラクトを探し、これらを DTDL に変換することができます。
次の表は、RDFS および OWL コンストラクトをどのように DTDL にマップできるかの例を示しています。
RDFS/OWL の概念 | RDFS/OWL コンストラクト | DTDL の概念 | DTDL コンストラクト |
---|---|---|---|
クラス | owl:Class IRI サフィックス rdfs:label rdfs:comment |
Interface | @type:Interface @id displayName comment |
サブクラス | owl:Class IRI サフィックス rdfs:label rdfs:comment rdfs:subClassOf |
Interface | @type:Interface @id displayName comment extends |
データ型のプロパティ | owl:DatatypeProperty rdfs:label または INode rdfs:label rdfs:range |
インターフェイスのプロパティ | @type:Property name displayName schema |
[オブジェクトのプロパティ] | owl:ObjectProperty rdfs:label または INode rdfs:range rdfs:comment rdfs:label |
関係 | type:Relationship name target (rdfs:range がない場合は省略)comment displayName |
次の 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);
}
}
}
コンバーターのサンプル
このセクションには、RDF と OWL コンバーターのサンプル コンバーター コードが含まれます。これは、建築業界の他のスキーマ向けに拡張できます。
RDF コンバーター アプリケーション
RDF ベースのモデル ファイルを DTDL バージョン 2 (v2) に変換するサンプル アプリケーションを利用できます。 DTDL v2 は Azure Digital Twins でサポートされていますが、こちらの手順のようにして DTDL v2 モデルをより新しい DTDL v3 に変換することもできます。
このサンプル アプリケーションは、Brick スキーマで検証されており、建築業界の他のスキーマ用に拡張できます (Building Topology Ontology (BOT)、Semantic Sensor Network、buildingSmart Industry Foundation Classes (IFC) など)。
このサンプルは、RdfToDtdlConverter という名前の .NET Core コマンド ライン アプリケーションです。
コードを自分のマシンにダウンロードするには、サンプル ページのタイトルの下にある [Browse code]\(コードの参照\) ボタンを選択します。これにより、サンプルの GitHub リポジトリに移動します。 [コード] ボタンと [ZIP のダウンロード] を選択して、RdfToDtdlConverter-main.zip という名前の .ZIP ファイルとしてサンプルをダウンロードします。 その後、そのファイルを解凍してコードを調べることができます。
このサンプルを使用して、コンテキストでの変換パターンを確認し、独自の具体的なニーズに応じてモデルの変換を実行する独自のアプリケーションのために、構成要素として用意することができます。
OWL2DTDL コンバーター
OWL2DTDL コンバーターは、Azure Digital Twins サービスで使用できる一連の DTDL インターフェイス宣言に OWL オントロジを変換するサンプル コード ベースです。 また、これは、owl:imports
宣言を通じて他のオントロジを再利用する 1 つのルート オントロジで構成されたオントロジ ネットワークに対して機能します。 このコンバーターを使用して、Real Estate Core Ontology を DTDL に変換しましたが、このコンバーターは OWL ベースの任意のオントロジに対して使用できます。
このサンプル コードは、OWL 仕様全体をサポートする包括的なソリューションではありませんが、独自のオントロジ インジェスト パイプラインの開発に使用できるアイデアと開始コードを得られます。
次のステップ
オントロジに基づいてモデルを開発するためのパスに進みます: モデル開発の完全なパス。