Protege 4 - 保存 RDF 会重新格式化嵌套的空白节点



我刚刚从TopBraid切换到尝试Protege。

我有一个带有一些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.ttlhttps://dl.dropboxusercontent.com/u/13814624/bugTestOutput.ttl

简而言之,你的本体不是有效的OWL本体,而Protégé遵循的是"垃圾输入,垃圾输出"原则。 由于一些不良数据正在进入(尽管Protégé确实试图挽救它(,因此您会得到不良数据(实际上,只是挽救的数据(。 您可以使用曼彻斯特OWL验证器验证本体,但您需要选择OWL2 DL配置文件才能获得适当的诊断。 在文档中,输出为:

本体和/或其导入之一不在OWL2 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:Class es。 当你做类似的事情时

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

您有一个将semapi:BaseClass es相关的owl:ObjectProperty,每个rdfs:Class,因此您有一个rdfs:Class相关的对象属性,但在OWL DL中,对象属性只能关联个人。 你开始使用RDF列表的地方,即:

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

您正在使用 RDF 列表作为对象属性断言中的对象。 但是,RDF列表不能在OWL DL中使用,因为它们也用于OWL的RDF序列化。 那么,Protégé似乎正在丢弃一堆对它没有意义的信息,作为OWL本体的RDF序列化。 有人可能会争辩说,当 Protégé 不知道如何处理一些进来的 RDF 时,它应该保留它,但是当 RDF 只是 Protégé 关注的序列化事物(OWL 本体(的一种可能序列化时,这确实是一个站不住脚的立场。

Pellet的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.

最新更新