Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La maggior parte delle ontologie si basa su standard Web semantici, ad esempio OWL, RDF e RDFS.
Per utilizzare un modello con Gemelli digitali di Azure, devi convertirlo in formato DTDL. Questo articolo descrive una guida generale di progettazione sotto forma di un modello di conversione per convertire modelli basati su RDF in DTDL, così da poterli utilizzare con Gemelli digitali di Azure.
Anche se gli esempi in questo articolo sono incentrati sulla compilazione, è possibile applicare processi simili a ontologie standard in diversi settori per convertirli anche in DTDL.
Modello di conversione
Sono disponibili diverse librerie di terze parti che possono essere usate durante la conversione di modelli basati su RDF in DTDL. Alcune di queste librerie consentono di caricare il file del modello in un grafo. È possibile scorrere il grafico cercando costrutti RDFS e OWL specifici e convertirli in DTDL.
La tabella seguente è un esempio di come è possibile eseguire il mapping dei costrutti RDFS e OWL a DTDL.
| Concetto di RDFS/OWL | Costrutto RDFS/OWL | Concetto DTDL | Costrutto DTDL |
|---|---|---|---|
| Classi | owl:ClassSuffisso IRI rdfs:labelrdfs:comment |
Interfaccia | @type:Interface@iddisplayNamecomment |
| Sottoclassi | owl:ClassSuffisso IRI rdfs:labelrdfs:commentrdfs:subClassOf |
Interfaccia | @type:Interface@iddisplayNamecommentextends |
| Proprietà del tipo di dati | owl:DatatypePropertyrdfs:label oppure INoderdfs:labelrdfs:range |
Proprietà dell'interfaccia | @type:PropertynamedisplayNameschema |
| Proprietà dell'oggetto | owl:ObjectPropertyrdfs:label oppure INoderdfs:rangerdfs:commentrdfs:label |
Relazione | type:Relationshipnametarget (oppure omesso se non è presente rdfs:range)commentdisplayName |
Il frammento di codice C# seguente mostra come viene caricato un file di modello RDF in un grafo e convertito in DTDL, usando la libreria 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);
}
}
}
Passaggi successivi
Continuare con il percorso per lo sviluppo di modelli in base alle ontologie: percorso di sviluppo completo del modello.