2014-05-04 68 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 
    } 
}