業界標準オントロジを Azure Digital Twins 用の DTDL に変換する

ほとんどのオントロジは、OWLRDFRDFS などのセマンティック 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
インターフェイス @type:Interface
@id
displayName
comment
をサブクラス化する owl:Class
IRI サフィックス
rdfs:label
rdfs:comment
rdfs:subClassOf
インターフェイス @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
Relationship 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 NetworkbuildingSmart Industry Foundation Classes (IFC) など) に拡張できます。

このサンプルは、RdfToDtdlConverter という名前の .NET Core コマンド ライン アプリケーションです。

コードを自分のマシンにダウンロードするには、サンプル ページのタイトルの下にある [Browse code](コードの参照) ボタンを選択します。これにより、サンプルの GitHub リポジトリに移動します。 [コード] ボタンと [ZIP のダウンロード] を選択して、RdfToDtdlConverter-main.zip という名前の .ZIP ファイルとしてサンプルをダウンロードします。 その後、そのファイルを解凍してコードを調べることができます。

GitHub 上の RdfToDtdlConverter リポジトリのスクリーンショット。[コード] ボタンが選択されて、ダイアログ ボックスが生成され、[ZIP のダウンロード] ボタンが強調表示されています。

このサンプルを使用して、コンテキストでの変換パターンを確認し、独自の具体的なニーズに応じてモデルの変換を実行する独自のアプリケーションのために、構成要素として用意することができます。

OWL2DTDL コンバーター

OWL2DTDL コンバーターは、OWL オントロジを一連の DTDL インターフェイス宣言に変換するサンプル コード ベースです。これは、Azure Digital Twins サービスで使用できます。 また、これは、owl:imports 宣言を通じて他のオントロジを再利用する 1 つのルート オントロジで構成されたオントロジ ネットワークに対して機能します。 このコンバーターを使用して、Real Estate Core Ontology を DTDL に変換しましたが、このコンバーターは OWL ベースの任意のオントロジに対して使用できます。

このサンプル コードは、OWL 仕様全体をサポートする包括的なソリューションではありませんが、独自のオントロジ インジェスト パイプラインの開発に使用できるアイデアと開始コードを提供できます。

次の手順

オントロジに基づいてモデルを開発するためのパスに進みます: 完全なモデル開発パス