0

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()
        {
            this.OwlClassName を返します。
        }
        public static RdfDocument addRealWorldObjectIndividualt(RdfDocument rdfDocument)
        {
            車両 vehicle = new Vehicle("vehicle1", rdfDocument);

            FixedEvent fxE1 = new FixedEvent("autoGekauft", rdfDocument);
            fxE1.agent = 新しい xmlns.com.foaf._01.Person("ロバート", rdfDocument);

            vehicle.hasFixedEvent = fxE1;

            rdfDocument を返します。
        }

エラーにつながる:

ObjectManagement.Object.RealWorldObject は、1 つ (そして 1 つだけ) の OwlClassAttribute を宣言します。これはプラグインの実装バグです。

他にどのように生成されたクラスをOWLGrinder. Thx 私が C# を使ったのはかなり前のことなので、ちょっとさびています。

4

1 に答える 1

0

OwlGrinder.exe によって生成される自動生成クラスは、継承を考慮して設計されていません。私はそれが間違っていると言っているのではなく、そのために設計されていないだけです。自動生成されたクラスには、クラス属性として定義された多くのメタデータが含まれており、継承によってそのすべてが隠されています。インフラストラクチャはこれらの属性の存在を考慮しており、それらが非表示の場合、これらのランタイム エラー メッセージが表示されます。

Visual Studio Object Browser を使用して、自動生成されたクラスの属性を調べます。OwlClassAttribute、SubClassOfAttribute、LightVersionAttribute は確かに必須です。RealWorldObject クラスの上に ManagementObject のクラス属性をコピーして貼り付けるだけです。私はそれがうまくいくと思います。ただし、ROWLEX が設計されたデフォルトのルートに従わないため、追加のショー ストッパーにぶつかる可能性があります。これは少し端に住んでいます:)

継承の代わりに、Reflector やその他のツールを使用して、自動生成されたアセンブリを C# にリバース エンジニアリングすることを検討してください。ソース コードが手元にあれば、生成されたクラスを直接変更できます。ManagementObject クラスを部分的に作成し、追加のメソッドを別のファイルに実装することができます。

于 2012-02-28T10:35:58.257 に答える