2014-05-04 25 views
0

如何确定Jena中某个类的对象属性限制。对象属性限制 - jena

我一直在试图确定的,如果一个类有一个对象的限制,通过使用这样的事情:

  if (essaClasse.isRestriction()) 
        { 
         System.out.println("Restriction on property " + 
         essaClasse.asRestriction().getOnProperty()); 
        } 
     else 
        { 
         System.out.println("There is not restriction" ); 
        } 

但我得到了:“没有限制”

OWL文件有一个类(的usermodel),它具有以下限制:

<owl:Class rdf:about="&geosim2;UserModel"> 
    <rdfs:label xml:lang="en">UserModel</rdfs:label> 
    <rdfs:subClassOf rdf:resource="&geosim2;Model"/> 
    <rdfs:subClassOf> 
     <owl:Restriction> 
      <owl:onProperty rdf:resource="&geosim2;hasPeople"/> 
      <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality> 
     </owl:Restriction> 
    </rdfs:subClassOf> 
    <rdfs:subClassOf> 
     <owl:Restriction> 
      <owl:onProperty rdf:resource="&geosim2;hasPhysicalPlace"/> 
      <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality> 
     </owl:Restriction> 
    </rdfs:subClassOf> 
    <rdfs:isDefinedBy rdf:datatype="&xsd;string">http://dit.upm.es/~perez/geosim/0.1.3/ns.owl#</rdfs:isDefinedBy> 
    <rdfs:comment xml:lang="en">An instance of this class models a user simulation model.</rdfs:comment> 
</owl:Class> 
+0

怎么你的代码中设置essaClasse? – AndyS

回答

1

如果我们看一下OntClass#isRestriction()实施,我们看到,它需要找到一个规范的能力为了确定它实际上是一个限制条件,在底层图中使用了三倍。具体而言,它会查找?instance rdf:type ?obj,其中?obj由您的配置文件指定。

让我们假设你有一个OWL配置文件。然后OWLProfile#RESTRICTION()指定为了将其解释为Restriction,所讨论的资源需要类型为owl:Restriction

您的本体中确实有这种类型的对象,但您的代码示例不会公开您是否引用它们。如果在你的代码示例中,你的essaClasse引用:&geosim2;UserModel,那么你的代码正在做它应该做的。 &geosim2;UserModel不是的限制,但它是rdfs:subClassOf的东西。

TL; DR:

你需要列出类感兴趣的超类(使用OntClass#listSuperClasses(),然后确定是否那些是限制这将然后给你限制你。类

在代码可能无法编译(注销我的头顶部)。

final ExtendedIterator<OntClass> superClass = esseClasse.listSuperClasses(); 
while(superClass.hasNext()) { 
    final OntClass aParent = superClass.next(); 
    if(aParent.isRestriction()) { 
     // Do interesting things 
    } 
    else { 
     // Do other interesting things 
    } 
}