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, vous devez le convertir en format DTDL. Cet article décrit des conseils généraux de conception sous la forme d’un modèle de conversion pour convertir des modèles basés sur RDF en DTDL afin que vous puissiez les utiliser avec Azure Digital Twins.

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 élément DTDL
Cours owl:Class
Suffixe d’IRI
rdfs:label
rdfs:comment
Interface @type:Interface
@id
displayName
comment
Sous-classes owl:Class
Suffixe d’IRI
rdfs:label
rdfs:comment
rdfs:subClassOf
Interface @type:Interface
@id
displayName
comment
extends
Propriétés du type de données owl:DatatypeProperty
rdfs:label ou INode
rdfs:label
rdfs:range
Propriétés de l’interface @type:Property
name
displayName
schema
Object Properties (Propriétés de l’objet) owl:ObjectProperty
rdfs:label ou INode
rdfs:range
rdfs:comment
rdfs:label
Relation type:Relationship
name
target (ou omis s’il n’y a pas de 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);

        }
    }
}

Étapes suivantes

Passez au développement de modèles basés sur des ontologies : Chemin de développement de modèle complet.