ROWLEX 2つの異なるタイプに同じ名前のプロパティを定義するには?
-
12-09-2019 - |
質問
私は2つの異なる特性を持っていますが、これら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 /検証/ のサービス。すべてが大丈夫です、彼らは正しいです。 私はOntologyExtractor.exeツールを使用してこれらのクラスからOWLファイルを生成しようとした後しかし、私はそのメッセージが表示されます。 「オントロジー抽出に失敗しました。 http://test.org/1.0#title には複数に割り当てられていますタイプ。" 上流階級が正しいと同じ名前のプロパティを持つ異なるクラスで同じような状況があり、いくつかのRDFの仕様があるので、これは奇妙なメッセージです。
解決
私はそれがROWLEXのバグです期待しています。あなたの場合は、有効なものであるが、私はOntologyExtractorを書いたとき、私はそれのために準備していなかったと仮定します。私はできるだけ早く修正をリリースしようとします。
編集:/:ROWLEX2.1がリリースされた、あなたはのhttpからダウンロードすることができます/rowlex.nc3a.nato.intする。 (とりわけ)バージョン2.1は現在、共有財産の機能をサポートしています。問題の正確なコードはまだ同じエラーをもたらすであろう!次のようにそれを克服するために、あなたはあなたのコードの装飾を変更する必要があります:
[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; }
}
OntologyExtractor.exeを使用して、このコードでは、タイプ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は現在のコンテキストに応じて、ドメインとローカル制限の間で選択します。