Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La mayoría de las ontologías se basan en estándares web semánticos como OWL, RDF y RDFS.
Para usar un modelo con Azure Digital Twins, debes convertirlo a formato DTDL. Este artículo describe una guía general de diseño en forma de un patrón de conversión para convertir modelos basados en RDF a DTDL, de modo que puedas usarlos con Azure Digital Twins.
Aunque los ejemplos de este artículo están centrados en la creación, también puede aplicar procesos similares a las ontologías estándar en distintos sectores para convertirlos en DTDL.
Patrón de conversión
Hay varias bibliotecas de terceros que se pueden usar al convertir modelos basados en RDF a DTDL. Algunas de estas bibliotecas le permiten cargar el archivo del modelo en un grafo. Puede recorrer el grafo en bucle en busca de construcciones específicas de RDFS y OWL, y realizar la conversión a DTDL.
La tabla siguiente es un ejemplo de cómo se pueden asignar las construcciones RDFS y OWL a DTDL.
| Concepto RDFS/OWL | Construcción RDFS/OWL | Concepto DTDL | Construcción DTDL |
|---|---|---|---|
| Clases | owl:ClassSufijo IRI rdfs:labelrdfs:comment |
Interfaz | @type:Interface@iddisplayNamecomment |
| Subclases | owl:ClassSufijo IRI rdfs:labelrdfs:commentrdfs:subClassOf |
Interfaz | @type:Interface@iddisplayNamecommentextends |
| Propiedades de tipos de datos | owl:DatatypePropertyrdfs:label o INoderdfs:labelrdfs:range |
Propiedades de la interfaz de roles | @type:PropertynamedisplayNameschema |
| Propiedades de objeto | owl:ObjectPropertyrdfs:label o INoderdfs:rangerdfs:commentrdfs:label |
Relación | type:Relationshipnametarget (o se omite si no hay rdfs:range)commentdisplayName |
En el siguiente fragmento de código en C# se muestra cómo se carga un archivo de modelo de RDF en un grafo y se convierte a DTDL, mediante la biblioteca 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);
}
}
}
Pasos siguientes
Continúe la ruta para desarrollar modelos basados en ontologías: ruta de desarrollo del modelo completo.