Domanda

Ho utilizzato OWLGrinder per creare l'assembly e importato la libreria nel mio progetto.Funziona bene.Ora voglio scrivere il mio set di lezioni.Pertanto li ho estesi con l'equivalente dell'assembly.Ma semplicemente non funziona.

L'ontologia contiene una classe denominata ManagementObject.

Ho creato un'altra classe (C#) chiamata RealWorldObject:

public class RealWorldObject : ManagementObject
    {
        public RealWorldObject(string uri) : base(uri) { }
        public RealWorldObject(string uri, RdfDocument rdfdocument) : base(uri, rdfdocument) { }
        public RealWorldObject(RdfDocument rdfdocument) : base(rdfdocument) { }

        public String getClassName()
        {
            return this.OwlClassName;
        }
        public static RdfDocument addRealWorldObjectIndividualt(RdfDocument rdfDocument)
        {
            Vehicle vehicle = new Vehicle("vehicle1", rdfDocument);

            FixedEvent fxE1 = new FixedEvent("autoGekauft", rdfDocument);
            fxE1.agent = new xmlns.com.foaf._01.Person("robert", rdfDocument);

            vehicle.hasFixedEvent = fxE1;

            return rdfDocument;
        }

Il che porta all'errore:

ObjectManagement.Object.RealWorldObject dichiara uno (e solo uno) OwlClassAttribute.Questo è un bug di implementazione del plugin.

In quale altro modo dovrei estendere le classi generate dal file OWLGrinder.Grazie è da molto tempo che utilizzo C#, quindi sono un po' arrugginito.

È stato utile?

Soluzione

Le classi generate automaticamente prodotte da OwlGrinder.exe non sono state progettate pensando all'ereditarietà.Non sto dicendo che sia sbagliato, semplicemente non è progettato per quello.Le classi generate automaticamente contengono molti metadati definiti come attributi di classe e l'ereditarietà nasconde tutto ciò.L'infrastruttura conta sulla presenza di questi attributi e se sono nascosti ricevi questi messaggi di errore di runtime.

Utilizzando Visual Studio Object Browser, dai un'occhiata agli attributi sulle classi generate automaticamente.OwlClassAttribute, SubClassOfAttribute, LightVersionAttribute sono certamente obbligatori.Puoi semplicemente copiare/incollare gli attributi della classe di ManagementObject nella parte superiore della classe RealWorldObject.Presumo che funzionerà.Ma ancora una volta, potresti imbatterti in ulteriori ostacoli allo spettacolo, poiché non segui i percorsi predefiniti per cui ROWLEX è stato progettato.È un po' vivere al limite :)

Invece dell'ereditarietà, potresti prendere in considerazione il reverse engineering dell'assembly generato automaticamente in C# utilizzando Reflector o altri strumenti.Avendo il codice sorgente in mano, puoi modificare direttamente le classi generate.Potresti rendere parziale la classe ManagementObject e implementare i metodi aggiuntivi in ​​un file separato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top