將業界標準待辦專案轉換為 Azure Digital Twins 的 DTDL
大部分的本體都是以語意 Web 標準為基礎,例如 OWL、RDF 和 RDFS。
若要搭配 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: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)。 Azure Digital Twins 支援 DTDL v2,但您也可以遵循這些指示將 DTDL v2 模型轉換成較新的 DTDL v3。
應用程式範例已針對 Brick 結構描述進行驗證,並可針對建築業中的其他結構描述進行擴充 (例如 建築拓撲本體 (BOT)、語意感應器網路或 BuildingSmart 工業基礎分類 (IFC))。
範例是稱為 RdfToDtdlConverter 的 .NET Core 命令列應用程式。
若要將程式碼下載到您的電腦,請選取範例頁面上標題下方的 [瀏覽程式碼] 按鈕,這會帶您前往範例的 GitHub 存放庫。 選取 [程式碼] 按鈕和 [下載 ZIP],以將範例下載為名為 RdfToDtdlConverter-main.zip 的 .zip 檔案。 然後,您可以解壓縮該檔案並探索程式碼。
您可以使用此範例來查看內容中的轉換模式,並讓其作為您自己應用程式的建置組塊,根據您自己的特定需求執行模型轉換。
OWL2DTDL 轉換器
OWL2DTDL 轉換器是一個範例程式碼,可將 OWL 本體轉換成一組 DTDL 介面宣告,其可與 Azure Digital Twins 服務搭配使用。 也適用於本體網路,其由一個根本體所組成,透過 owl:imports
宣告重複使用其他本體。 此轉換器是用來將 Real Estate Core 本體轉換為 DTDL,並可用於任何 OWL 型本體。
此範例程式代碼不是支援整個 OWL 規格的完整解決方案,但它可以提供您想法和啟動程式碼,讓您用來開發自己的本體擷取管線。
下一步
繼續在以本體為基礎的開發模型路徑上前進:完整模型開發路徑。