Partage via


Convertir des ontologies conformes aux standards du secteur en langage DTDL pour Azure Digital Twins

La plupart des ontologies sont basées sur des standards du web sémantique tels que OWL, RDF et RDFS.

Pour utiliser un modèle avec Azure Digital Twins, il doit être au format DTDL. Cet article fournit des conseils d’aide généraux relatifs à la conception sous la forme d’un modèle de conversion. Celui-ci permet de convertir des modèles RDF au format DTDL pour qu’ils puissent être utilisés avec Azure Digital Twins.

L’article contient également un exemple de code de convertisseur pour les convertisseurs RDF et OWL, qui peut être étendu à d’autres schémas du secteur du bâtiment.

Bien que les exemples de cet article soient axés sur la construction, vous pouvez également appliquer des processus similaires aux ontologies standard dans différentes industries pour les convertir en DTDL.

Modèle de conversion

Il existe plusieurs bibliothèques tierces qui peuvent être utilisées lors de la conversion de modèles RDF en DTDL. Certaines de ces bibliothèques vous permettent de charger votre fichier de modèle dans un graphique. Vous pouvez parcourir le graphique en recherchant des constructions RDFS et OWL spécifiques, et les convertir en DTDL.

Le tableau suivant est un exemple de la façon dont les constructions RDFS et OWL peuvent être mappées à DTDL.

Concept RDFS/OWL Construction RDFS/OWL Concept DTDL Construction DTDL
Classes owl:Class
Suffixe IRI
rdfs:label
rdfs:comment
Interface @type:Interface
@id
displayName
comment
Sous-classes owl:Class
Suffixe IRI
rdfs:label
rdfs:comment
rdfs:subClassOf
Interface @type:Interface
@id
displayName
comment
extends
Propriétés DataType owl:DatatypeProperty
rdfs:label ou INode
rdfs:label
rdfs:range
Propriétés de l’interface @type:Property
name
displayName
schema
Propriétés des objets owl:ObjectProperty
rdfs:label ou INode
rdfs:range
rdfs:comment
rdfs:label
Relation type:Relationship
name
target (ou omis si aucune rdfs:range)
comment
displayName

L’extrait de code C# suivant montre comment un fichier de modèle RDF est chargé dans un graphique et converti en DTDL à l’aide de la bibliothèque 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);

        }
    }
}

Exemples de convertisseurs

Cette section contient des exemples de code de convertisseur pour les convertisseurs RDF et OWL, qui peuvent être étendus pour d’autres schémas dans l’industrie du bâtiment.

Application de conversion RDF

Il existe un exemple d’application disponible qui convertit un fichier de modèle basé sur RDF en DTDL Version 2 (v2). DTDL v2 est pris en charge par Azure Digital Twins, mais vous pouvez également suivre ces instructions pour convertir des modèles DTDL v2 en DTDL v3 plus récent.

L’exemple d’application a été validé pour le schéma Brick et peut être étendu pour d’autres schémas dans l’industrie du bâtiment (tels que Building Topology Ontology (BOT), Semantic Sensor Network ou buildingSmart Industry Foundation Classes (IFC)).

L’exemple est une application en ligne de commande .NET Core appelée RdfToDtdlConverter.

Pour télécharger le code sur votre ordinateur, sélectionnez le bouton Parcourir le code sous le titre sur la page de l’exemple, qui vous permet d’accéder au référentiel GitHub de l’exemple. Sélectionnez le bouton Code et Télécharger le fichier ZIP pour télécharger l’exemple sous la forme d’un fichier .zip appelé RdfToDtdlConverter-main.zip. Vous pouvez ensuite décompresser le fichier et explorer le code.

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

Vous pouvez utiliser cet exemple pour voir les modèles de conversion en contexte et comme bloc de construction pour vos propres applications effectuant des conversions de modèle en fonction de vos besoins spécifiques.

Convertisseur OWL2DTDL

Le convertisseur OWL2DTDL est un exemple de base de code qui traduit une ontologie OWL en un ensemble de déclarations d’interface DTDL, qui peuvent être utilisées avec le service Azure Digital Twins. Il fonctionne également pour les réseaux d’ontologies, constitués d’une ontologie racine réutilisant d’autres ontologies via des déclarations owl:imports. Ce convertisseur a été utilisé pour traduire l’ontologie RealEstateCore en DTDL, et peut être utilisé pour n’importe quelle ontologie basée sur OWL.

Cet exemple de code n’est pas une solution complète qui prend en charge l’intégralité de la spécification OWL, mais elle peut vous donner des idées et démarrer du code que vous pouvez utiliser pour développer vos propres pipelines d’ingestion d’ontologie.

Étapes suivantes

Continuez sur le chemin de développement de modèles basés sur des ontologies : chemin de développement de modèle complet.