共用方式為


將業界標準待辦專案轉換為 Azure Digital Twins 的 DTDL

大部分的本體都是以語意 Web 標準為基礎,例如 OWLRDFRDFS

若要搭配 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
DataType 屬性 owl:DatatypeProperty
rdfs:labelINode
rdfs:label
rdfs:range
介面屬性 @type:Property
name
displayName
schema
物件屬性 owl:ObjectProperty
rdfs:labelINode
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)。 Azure Digital Twins 支援 DTDL v2,但您也可以遵循這些指示將 DTDL v2 模型轉換成較新的 DTDL v3。

應用程式範例已針對 Brick 結構描述進行驗證,並可針對建築業中的其他結構描述進行擴充 (例如 建築拓撲本體 (BOT)語意感應器網路BuildingSmart 工業基礎分類 (IFC))。

範例是稱為 RdfToDtdlConverter 的 .NET Core 命令列應用程式

若要將程式碼下載到您的電腦,請選取範例頁面上標題下方的 [瀏覽程式碼] 按鈕,這會帶您前往範例的 GitHub 存放庫。 選取 [程式碼] 按鈕和 [下載 ZIP],以將範例下載為名為 RdfToDtdlConverter-main.zip 的 .zip 檔案。 然後,您可以解壓縮該檔案並探索程式碼。

GitHub 上 RdfToDtdlConverter 存放庫的螢幕擷取畫面。已選取 [程式碼] 按鈕,產生醒目提示 [下載 ZIP] 按鈕的對話方塊。

您可以使用此範例來查看內容中的轉換模式,並讓其作為您自己應用程式的建置組塊,根據您自己的特定需求執行模型轉換。

OWL2DTDL 轉換器

OWL2DTDL 轉換器是一個範例程式碼,可將 OWL 本體轉換成一組 DTDL 介面宣告,其可與 Azure Digital Twins 服務搭配使用。 也適用於本體網路,其由一個根本體所組成,透過 owl:imports 宣告重複使用其他本體。 此轉換器是用來將 Real Estate Core 本體轉換為 DTDL,並可用於任何 OWL 型本體。

此範例程式代碼不是支援整個 OWL 規格的完整解決方案,但它可以提供您想法和啟動程式碼,讓您用來開發自己的本體擷取管線。

下一步

繼續在以本體為基礎的開發模型路徑上前進:完整模型開發路徑