Azure Digital Twins에 대해 업계 표준 온톨로지를 DTDL로 변환

대부분의 온톨로지OWL, RDFRDFS와 같은 의미 체계 웹 표준을 기반으로 합니다.

Azure Digital Twins에서 모델을 사용하려면 DTDL 형식이어야 합니다. 이 문서에서는 Azure Digital Twins에서 사용할 수 있도록 RDF 기반 모델을 DTDL로 변환하기 위한 변환 패턴 형식의 일반 디자인 지침에 대해 설명합니다.

이 문서에는 빌딩 업계의 다른 스키마에 대해 확장될 수 있는 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)로 변환하는 샘플 애플리케이션이 있습니다. DTDL v2는 Azure Digital Twins에서 지원되지만 다음 지침에 따라 DTDL v2 모델을 최신 DTDL v3으로 변환할 수도 있습니다.

샘플 애플리케이션은 Brick 스키마에 대해 유효성이 검사되었으며, 빌딩 업계의 다른 스키마(예: 빌딩 토폴로지 온톨로지(BOT), 의미 체계 센서 네트워크 또는 buildingSmart IFC(Industry Foundation Classes))에 대해 확장할 수 있습니다.

이 샘플은 RdfToDtdlConverter라는 .NET Core 명령줄 애플리케이션입니다.

머신에 코드를 다운로드하려면 샘플 페이지의 제목 아래에 있는 코드 찾아보기 단추를 선택하여 샘플에 대한 GitHub 리포지토리로 이동합니다. 코드 단추와 ZIP 다운로드를 선택하여 샘플을 RdfToDtdlConverter-main.zip이라는 .zip 파일로 다운로드합니다. 그러면 파일의 압축을 풀고 코드를 탐색할 수 있습니다.

GitHub의 RdfToDtdlConverter 리포지토리 스크린샷. 코드 단추가 선택되어 ZIP 다운로드 단추가 강조 표시된 대화 상자를 생성합니다.

이 샘플을 사용하여 컨텍스트에서 변환 패턴을 확인하고, 고유한 특정 요구 사항에 따라 모델 변환을 수행하는 사용자 고유의 애플리케이션에 대한 빌딩 블록으로 사용할 수 있습니다.

OWL2DTDL 변환기

OWL2DTDL 변환기는 OWL 온톨로지를 Azure Digital Twins 서비스와 함께 사용할 수 있는 DTDL 인터페이스 선언 집합으로 변환하는 샘플 코드 베이스입니다. 또한 owl:imports 선언을 통해 다른 온톨로지를 재사용하는 하나의 루트 온톨로지로 구성된 온톨로지 네트워크에서도 작동합니다. 이 변환기는 부동산 코어 온톨로지를 DTDL로 변환하는 데 사용되었으며, 모든 OWL 기반 온톨로지에 사용할 수 있습니다.

이 샘플 코드는 전체 OWL 사양을 지원하는 포괄적인 솔루션은 아니지만 자체 온톨로지 수집 파이프라인을 개발하는 데 사용할 수 있는 아이디어와 시작 코드를 제공할 수 있습니다.

다음 단계

온톨로지(전체 모델 개발 경로)를 기반으로 모델을 개발하는 경로를 계속 진행합니다.