0

Protege を試すために TopBraid から切り替えました。

これに似たRDFのオントロジーがあります:

instances:some_thing1 a semapi:SomeClass ;
                               semapi:hasChainTo (
                                      [ 
                                            a semapi:SomeOtherClass ;
                                            semapi:hasChainTo (
                                                 [ ... ]
                                                 [ ... ]
                                            )
                                      ] 
                              ) .

このネストされた空白ノードの構文は、チェーンが非常に深くなり、チェーンが時々変更され、新しいチェーンが追加される可能性があるため、この構文は流動的で非常に読みやすく、保守しやすいため、うまく機能するという考えです。

それだけでなく、結果のグラフに対するクエリを既に作成しています。

問題は、これを Protege にインポートしてすぐに保存すると、結果が次のように再フォーマットされることです。

   instance:some_thing1 rdf:type semapi:SomeClass ,
                               owl:NamedIndividual ;
                               semapi:hasChainTo [ ] .


   [ rdf:type semapi:SomeClass ;
       semapi:hasChainTo [ ]
   ] .

結果として得られる RDF は、クエリ システムを完全に破壊するだけでなく、このアプローチを使用して「連鎖」を表現することの他の利点も破壊します。

これを回避する方法はありますか?そうでない場合は、TopBraid に戻らざるを得なくなる可能性があります。

更新:問題の再現は次のとおりです。

私はbugTest.ttlそれを書いてProtegeで開き、すぐに名前を付けて保存>タートル> bugTestOutput.ttl

https://dl.dropboxusercontent.com/u/13814624/bugTest.ttl https://dl.dropboxusercontent.com/u/13814624/bugTestOutput.ttl

4

1 に答える 1

1

つまり、あなたのオントロジーは有効な OWL オントロジーではなく、Protégé は「ガベージ イン、ガベージ アウト」の原則に従っています。いくつかの悪いデータが入ってくるので (Protégé はそれをサルベージしようとしますが)、悪いデータが出てきます (実際には、サルベージされたデータだけです)。Manchester OWL Validatorでオントロジーを検証できますが、適切な診断を得るには OWL 2 DL プロファイルを選択する必要があります。ドキュメントでは、出力は次のとおりです。

オントロジーおよび/またはそのインポートの 1 つが OWL 2 DL プロファイルにありません

輸入閉鎖

Ontology IRI                                         Physical URI
OntologyID(OntologyIRI(<http://ideation.io/semapi>))

詳細レポート

クラス IRI の予約語彙の使用

SubClassOf(semapi:BaseClass rdfs:Class)

宣言されていないクラスの使用

SubClassOf(semapi:BaseClass rdfs:Class)

トリプルがあるという事実は別として:

<http://ideation.io/semapi>
      a       owl:Ontology .

最初のファイルでは、これは OWL オントロジーではないようです。例えば、

semapi:BaseClass a rdfs:Class; 
                 rdfs:subClassOf rdfs:Class .

RDFS語彙で使用できるいくつかのクラスを定義していますが、owl:Classesを宣言していません。あなたが何かをするとき

semapi:hasChainTo a owl:ObjectProperty; 
                  rdfs:domain semapi:BaseClass;
                  rdfs:range  semapi:BaseClass .

owl:ObjectPropertyesを関連付けるsemapi:BaseClassがあり、それぞれが であるrdfs:Classため、 es を関連付けるオブジェクト プロパティがありますrdfs:Classが、OWL DL では、オブジェクト プロパティは個体のみを関連付けることができます。RDFリストの使用を開始する場所、つまり:

instances:Instance1 a semapi:DerivedClass;
                        semapi:hasChainTo (
                            [
                                a semapi:DerivedClass;
                                semapi:hasChainTo (
...

オブジェクト プロパティ アサーションのオブジェクトとして RDF リストを使用しています。ただし、RDFリストはOWLのRDFシリアル化でも使用されるため、OWL DLでは使用できません。したがって、Protégé は、OWL オントロジーの RDF シリアル化として意味のない一連の情報を破棄しているように見えます。Protégé が入ってくる RDF をどう処理するかを知らない場合、それを保存する必要があると主張できるかもしれませんが、RDF がシリアル化されたもの (OWL オントロジー) の可能なシリアル化の 1 つにすぎない場合、それは実際には支持できない立場です。 Protégéが関わっていること。

ペレットのlintツールは、いくつかの警告を生成します。

[Untyped classes]
- http://ideation.io/semapi#DerivedClass
- http://ideation.io/semapi#BaseClass
- http://www.w3.org/2000/01/rdf-schema#Class

[Untyped individuals]
- 6 BNode(s)

[Using rdfs:Class instead of owl:Class]
- http://ideation.io/semapi#DerivedClass
- http://ideation.io/semapi#BaseClass



=========================================================
OWL 2 DL violations found for ontology <http://ideation.io/semapi>:
Use of undeclared class: <http://ideation.io/semapi#BaseClass> [ObjectPropertyRange(<http://ideation.io/semapi#hasChainTo> <http://ideation.io/semapi#BaseClass>) in <http://ideation.io/semapi>]
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [ClassAssertion(<http://ideation.io/semapi#DerivedClass> _:genid5) in <http://ideation.io/semapi>]
Use of undeclared class: rdfs:Class [SubClassOf(<http://ideation.io/semapi#BaseClass> rdfs:Class) in <http://ideation.io/semapi>]
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [ClassAssertion(<http://ideation.io/semapi#DerivedClass> _:genid11) in <http://ideation.io/semapi>]
Use of undeclared class: <http://ideation.io/semapi#BaseClass> [SubClassOf(<http://ideation.io/semapi#DerivedClass> <http://ideation.io/semapi#BaseClass>) in <http://ideation.io/semapi>]
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [ClassAssertion(<http://ideation.io/semapi#DerivedClass> _:genid9) in <http://ideation.io/semapi>]
Use of undeclared class: <http://ideation.io/semapi#BaseClass> [SubClassOf(<http://ideation.io/semapi#BaseClass> rdfs:Class) in <http://ideation.io/semapi>]
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [ClassAssertion(<http://ideation.io/semapi#DerivedClass> _:genid1) in <http://ideation.io/semapi>]
Use of undeclared class: <http://ideation.io/semapi#BaseClass> [ObjectPropertyDomain(<http://ideation.io/semapi#hasChainTo> <http://ideation.io/semapi#BaseClass>) in <http://ideation.io/semapi>]
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [ClassAssertion(<http://ideation.io/semapi#DerivedClass> _:genid7) in <http://ideation.io/semapi>]
Use of reserved vocabulary for class IRI: rdfs:Class [SubClassOf(<http://ideation.io/semapi#BaseClass> rdfs:Class) in <http://ideation.io/semapi>]
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [ClassAssertion(<http://ideation.io/semapi#DerivedClass> _:genid3) in <http://ideation.io/semapi>]
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [SubClassOf(<http://ideation.io/semapi#DerivedClass> <http://ideation.io/semapi#BaseClass>) in <http://ideation.io/semapi>]
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [ClassAssertion(<http://ideation.io/semapi#DerivedClass> <http://ideation.io/instances#Instance1>) in <http://ideation.io/semapi>]


No OWL lints found for ontology <http://ideation.io/semapi>.

<http://ideation.io/semapi> does not import other ontologies.
于 2013-08-06T16:36:05.777 に答える