你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将行业标准本体转换为适用于 Azure 数字孪生的 DTDL

大多数本体基于语义 Web 标准,例如 OWLRDFRDFS

若要将模型用于 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: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 数字孪生支持 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 数字孪生服务的示例代码库。 它还适用于由一个根本体构成且通过 owl:imports 声明重用其他本体的本体网络。 此转换器用于将房地产核心本体转换为 DTDL,并且它可用于任何基于 OWL 的本体。

此示例代码并不是一种支持整个 OWL 规范的综合解决方案,但它可为你提供思路和起始代码来开发自己的本体引入管道。

后续步骤

继续了解基于本体的模型的开发路径:完整模型开发路径