我使用 OWLGrinder 创建程序集并将库导入到我的项目中。效果很好。现在我想编写自己的一组类。因此我用相当于程序集的方式扩展了它们。但它就是行不通。

本体拥有一个名为 ManagementObject 的类。

我创建了另一个名为 RealWorldObject 的类 (C#):

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;
        }

这会导致错误:

ObjectManagement.Object.RealWorldObject 确实声明了一个(且只有一个)OwlClassAttribute。这是插件的一个实现错误。

我还应该如何通过以下方式扩展生成的类 OWLGrinder. 。谢谢,我很久以前就使用过 C#,所以我有点生疏了。

有帮助吗?

解决方案

OwlGrinder.exe 生成的自动生成的类在设计时并未考虑到继承。我并不是说它是错误的,它只是不是为此而设计的。自动生成的类包含大量定义为类属性的元数据,继承隐藏了所有这些。基础设施依赖于这些属性的存在,如果它们被隐藏,您会收到这些运行时错误消息。

使用 Visual Studio 对象浏览器查看自动生成的类的属性。OwlClassAttribute、SubClassOfAttribute、LightVersionAttribute 当然是必需的。您只需将 ManagementObject 的类属性复制/粘贴到 RealWorldObject 类的顶部即可。我想,它会起作用的。但同样,您可能会遇到其他障碍,因为您没有遵循 ROWLEX 设计的默认路线。这有点生活在边缘:)

您可以考虑使用 Reflector 或其他工具将自动生成的程序集逆向工程为 C#,而不是继承。有了源代码,您可以直接修改生成的类。您可以使 ManagementObject 类部分化,并在单独的文件中实现其他方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top