我有一个 Protege 4.2.0 生成的本体文件。它包括如下定义的 DatatypeProperty。
<owl:DatatypeProperty rdf:about="http://example.com/NLPSchema.owl#race">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="http://example.com/NLPSchema.owl#Person"/>
<rdfs:subPropertyOf rdf:resource="http://example.com/NLPSchema.owl#semanticProperty"/>
<rdfs:range>
<rdfs:Datatype>
<owl:oneOf>
<rdf:Description>
<rdf:type rdf:resource="&rdf;List"/>
<rdf:first>african_american</rdf:first>
<rdf:rest>
<rdf:Description>
<rdf:type rdf:resource="&rdf;List"/>
<rdf:first>asian</rdf:first>
<rdf:rest>
<rdf:Description>
<rdf:type rdf:resource="&rdf;List"/>
<rdf:first>caucasian</rdf:first>
<rdf:rest>
<rdf:Description>
<rdf:type rdf:resource="&rdf;List"/>
<rdf:first>hispanic</rdf:first>
<rdf:rest>
<rdf:Description>
<rdf:type rdf:resource="&rdf;List"/>
<rdf:first>other</rdf:first>
<rdf:rest rdf:resource="&rdf;nil"/>
</rdf:Description>
</rdf:rest>
</rdf:Description>
</rdf:rest>
</rdf:Description>
</rdf:rest>
</rdf:Description>
</rdf:rest>
</rdf:Description>
</owl:oneOf>
</rdfs:Datatype>
</rdfs:range>
</owl:DatatypeProperty>
在 Protege 中,它看起来像这样:
现在我正在使用 Jena 来解析 Ontology 文件。我能够获得与“范围”标签对应的 OntClass 对象:
DatatypeProperty p = ontModel.getDatatypeProperty("http://example.com/NLPSchema.owl#race");
OntClass range = p.getRange().asClass();
那么我怎样才能得到像 Protege 中的枚举数组 {"african_american" , "asian" , "caucasian" , "hispanic" , "other"} 呢?
我知道 DataRange 有一个名为“listOneOf”的方法,但是我不知道如何制作 DataRange 对象,至少“p.isDataRange()”返回 false。