Pergunta

Usei o OWLGrinder para criar a montagem e importei a biblioteca para o meu projeto.Isso funciona bem.Agora quero escrever meu próprio conjunto de classes.Portanto, estendi-os com o equivalente à montagem.Mas simplesmente não funciona.

A ontologia contém uma classe chamada ManagementObject.

Criei outra classe (C#) chamada 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;
        }

O que leva ao erro:

ObjectManagement.Object.RealWorldObject declara um (e apenas um) OwlClassAttribute.Este é um bug de implementação do plugin.

De que outra forma devo estender as classes geradas pelo OWLGrinder.Obrigado, já faz muito tempo que usei C #, então estou meio enferrujado.

Foi útil?

Solução

As classes geradas automaticamente produzidas por OwlGrinder.exe não foram projetadas para herança.Não estou dizendo que seja errado, apenas não foi projetado para isso.As classes geradas automaticamente contêm muitos metadados definidos como atributos de classe e a herança esconde tudo isso.A infraestrutura conta com a presença desses atributos e se eles estiverem ocultos, você recebe essas mensagens de erro em tempo de execução.

Usando o Visual Studio Object Browser, observe os atributos nas classes geradas automaticamente.OwlClassAttribute, SubClassOfAttribute, LightVersionAttribute são certamente obrigatórios.Você pode simplesmente copiar/colar os atributos da classe ManagementObject no topo da sua classe RealWorldObject.Presumo que funcionará.Mas, novamente, você pode encontrar obstáculos adicionais, pois não segue as rotas padrão para as quais o ROWLEX foi projetado.Isso é viver um pouco no limite :)

Em vez de herança, você pode considerar a engenharia reversa de seu assembly gerado automaticamente para C# usando o Reflector ou outras ferramentas.Tendo o código fonte em mãos, você poderá modificar diretamente as classes geradas.Você pode tornar sua classe ManagementObject parcial e implementar seus métodos adicionais em um arquivo separado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top