0

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

本体包含一个名为 ManagementObject 的类。

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

公共类 RealWorldObject : ManagementObject
    {
        公共 RealWorldObject(string uri) : base(uri) { }
        公共 RealWorldObject(string uri, RdfDocument rdfdocument) : base(uri, rdfdocument) { }
        公共 RealWorldObject(RdfDocument rdfdocument) : base(rdfdocument) { }

        公共字符串 getClassName()
        {
            返回 this.OwlClassName;
        }
        公共静态 RdfDocument addRealWorldObjectIndividualt(RdfDocument rdfDocument)
        {
            车辆车辆 = new Vehicle("vehicle1", rdfDocument);

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

            车辆.hasFixedEvent = fxE1;

            返回 rdfDocument;
        }

这导致错误:

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

我还应该如何扩展生成的类OWLGrinder。Thx 很久以前我使用 C#,所以我有点生疏了。

4

1 回答 1

0

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

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

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

于 2012-02-28T10:35:58.257 回答