次の方法で共有


業界標準オントロジを 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
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 NetworkbuildingSmart Industry Foundation Classes (IFC) など)。

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

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

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

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

OWL2DTDL コンバーター

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

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

次のステップ

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