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

时间:2013-08-06 00:28:59

标签: rdf ontology protege turtle-rdf blank-nodes

我刚刚从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.ttl https://dl.dropboxusercontent.com/u/13814624/bugTestOutput.ttl

1 个答案:

答案 0 :(得分:1)

简而言之,你的本体论不是一个有效的OWL本体论,而且Protégé遵循“垃圾进,垃圾出”的原则。由于一些不良数据正在进入(虽然Protégé确实试图挽救它),但是你会得到不好的数据(实际上,只是打捞的数据)。您可以使用Manchester OWL Validator验证本体,但是您需要选择OWL 2 DL配置文件以获得适当的诊断。在您的文档上,输出为:

  

本体和/或其中一个导入不在OWL 2 DL配置文件中

     

进口关闭

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

详细报告

     

在IRI课程中使用保留词汇

     
    

SubClassOf(semapi:BaseClass的     RDFS:类)

  
     

使用未申报的课程

     
    

SubClassOf(semapi:BaseClass的     RDFS:类)

  

除了你有三联的事实:

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

你有一个owl:ObjectProperty,它将与semapi:BaseClass es相关,每个rdfs:Class也是rdfs:Class,所以你有一个与之相关的对象属性instances:Instance1 a semapi:DerivedClass; semapi:hasChainTo ( [ a semapi:DerivedClass; semapi:hasChainTo ( ... es,但在OWL DL中,对象属性只能涉及个人。您开始使用RDF列表的位置,即:

lint

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

Pellet的[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. 工具会产生许多警告:

{{1}}