你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将行业标准本体转换为适用于 Azure 数字孪生的 DTDL
大多数本体基于语义 Web 标准,例如 OWL、RDF 和 RDFS。
若要将模型用于 Azure 数字孪生,则其必须采用 DTDL 格式。 本文以“转换模式”的形式介绍了通用设计指南,该模式将基于 RDF 的模型转换为 DTDL 以使其用于 Azure 数字孪生。
本文还包含用于 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 |
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 数字孪生支持 DTDL v2,但你也可以按照这些说明将 DTDL v2 模型转换为较新的 DTDL v3。
示例应用程序已针对 Brick 架构进行了验证,且可以将其扩展以用于建筑行业中的其他架构(如构建拓扑本体 (BOT)、语义传感器网络或 buildingSmart 行业基础类 (IFC))。
该示例是一个名为 RdfToDtdlConverter 的 .NET Core 命令行应用程序。
若要将代码下载到计算机,请在示例页上的标题下选择“浏览代码”按钮,转到该示例的 GitHub 存储库。 选择“代码”按钮,然后选择“下载 ZIP”,以将示例下载为名为 RdfToDtdlConverter-main.zip 的 .zip 文件。 然后可以对该文件进行解压并浏览代码。
可使用此示例在上下文中查看转换模式,并将其用作自己的应用程序构建块,根据自己的特定需要执行模型转换。
OWL2DTDL 转换器
OWL2DTDL 转换器是一个可将 OWL 本体转换为一组 DTDL 接口声明以用于 Azure 数字孪生服务的示例代码库。 它还适用于由一个根本体构成且通过 owl:imports
声明重用其他本体的本体网络。 此转换器用于将房地产核心本体转换为 DTDL,并且它可用于任何基于 OWL 的本体。
此示例代码并不是一种支持整个 OWL 规范的综合解决方案,但它可为你提供思路和起始代码来开发自己的本体引入管道。
后续步骤
继续了解基于本体的模型的开发路径:完整模型开发路径。