Поделиться через


Преобразование стандартных отраслевых онтологий в DTDL для Azure Digital Twins

Большинство онтологий основано на семантических веб-стандартах, таких как 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# показано, как файл модели RDF загружается в граф и преобразуется в DTDL с помощью библиотеки dotNetRDF.

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 версии 2 поддерживается Azure Digital Twins, но вы также можете следовать этим инструкциям , чтобы преобразовать модели DTDL версии 2 в более новую версию DTDL версии 3.

Пример приложения был проверен для схемы "Кирпич" и может быть расширен для других схем в отрасли строительства (например, сборки топологии ontology (BOT),семантической сети датчика или сборки классов отраслевых фундаментов (IFC)).

Пример — это приложение командной строки .NET Core с именем RdfToDtdlConverter.

Чтобы скачать код на свой компьютер, нажмите кнопку Browse code (Просмотреть код) под заголовком на странице примера для перехода в репозиторий GitHub. Нажмите кнопку Code (Код), а затем Download ZIP (Скачать ZIP-файл), чтобы скачать пример как ZIP-файл с именем RdfToDtdlConverter-main.zip. Затем можно распаковать файл и изучить код.

Screenshot of the RdfToDtdlConverter repo on GitHub. The Code button is selected, producing a dialog box where the Download ZIP button is highlighted.

Этот пример можно использовать для просмотра шаблонов преобразования в контексте и как стандартный блок для построения собственных приложений по преобразованиям моделей в соответствии с вашими конкретными потребностями.

Преобразователь OWL2DTDL

Конвертер OWL2DTDL — это пример базы кода, которая преобразует ontology OWL в набор объявлений интерфейса DTDL, которые можно использовать со службой Azure Digital Twins. Он также работает для сетей онтологии, на основе одной корневой онтологии с повторным использованием других онтологий по объявлениям owl:imports. Этот преобразователь использовался для преобразования Онтологии ядра недвижимости в DTDL и может использоваться для любых онтологий на основе OWL.

Этот пример кода не является комплексным решением, которое поддерживает все спецификации OWL, но оно может дать вам идеи и начальный код, который можно использовать в разработке собственных конвейеров приема ontology.

Следующие шаги

Продолжайте путь разработки моделей на основе онтологий: полный путь разработки модели.