2009-08-07 17 views
1

私は2つの異なる特性を持っていますが、同じ名前を持つこれら二つのクラスがある場合:ROWLEXでは2つの異なるタイプで同じ名前のプロパティを定義する方法は?

[RdfSerializable] 
public class Type1 
{ 
    [RdfProperty(true), Name = "title"] 
    public string Title { get; set; } 
} 

[RdfSerializable] 
public class Type2 
{ 
    [RdfProperty(true), Name = "title"] 
    public string Title { get; set; } 
} 

とRDFにそれらをシリアル化し、http://www.w3.org/RDF/Validator/サービスでそれらを検証しようとします。すべてが大丈夫です、そして、彼らは正しいです。 しかし、OntologyExtractor.exeツールを使用してこれらのクラスからOWLファイルを生成しようとすると、そのメッセージが表示されます。 "オントロジー抽出に失敗しました。http://test.org/1.0#titleが複数のタイプに割り当てられています。 これは、上位クラスが正しく、同じ名前のプロパティを持つ異なるクラスと同じ状況にあるRDF仕様があるため、奇妙なメッセージです。

答えて

1

私はそれがROWLEXのバグだと思っています。あなたのケースは正当なものですが、私はOntologyExtractorを書いたときにそれを準備していないと思います。私はできるだけ早く修正をリリースしようとします。

EDIT:ROWLEX2.1がリリースされました。http://rowlex.nc3a.nato.intからダウンロードできます。バージョン2.1(他の中でも)は共有プロパティの機能をサポートしています。問題の正確なコードは、同じエラーが発生します。それを克服するために、次のようにあなたのコードの装飾を変更する必要があります。OntologyExtractor.exeを使用して

[RdfSerializable] 
public class Type1 
{ 
    [RdfProperty(true, Name = "title", ExcludeFromOntology=true)] 
    public string Title { get; set; } 
} 

[RdfSerializable] 
public class Type2 
{ 
    [RdfProperty(true, Name = "title", 
       DomainAsType = new Type[]{typeof(Type1), typeof(Type2)})] 
    public string Title { get; set; } 
} 

を、このコードでは、タイプ1とタイプ2のUNIONである匿名のドメインクラスでのOWLプロパティを発生します。
これは技術的には完全に正しい解決策ですが、プロパティのドメインを設定することで将来の再利用が制限されます。解決策として、プロパティドメインをローカル制限に置き換えることができます。次のようにあなたがそれを達成することができます

[RdfSerializable] 
public class Type2 
{ 
    [RdfProperty(true, Name = "title", 
       DomainAsType = new Type[]{typeof(Type1), typeof(Type2)}, 
       UseLocalRestrictionInsteadOfDomain = true)] 
    public string Title { get; set; } 
} 

あなたが設定されていないUseLocalRestrictionInsteadOfDomainを残すべき、ROWLEXは現在のコンテキストに応じて、ドメインとローカル制限の間で選択します。

+0

素晴らしい!ありがとう!私はそれを検証します。 –

関連する問題