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 を使用してオントロジー ファイルを解析しています。「range」タグに対応する OntClass オブジェクトを取得できます。
DatatypeProperty p = ontModel.getDatatypeProperty("http://example.com/NLPSchema.owl#race");
OntClass range = p.getRange().asClass();
次に、プロテジのように、列挙型配列 {"african_american" , "asian" , "caucasian" , "hispanic" , "other"} を取得するにはどうすればよいですか?
DataRange に「listOneOf」というメソッドがあることは知っていますが、DataRange オブジェクトの作成方法がわかりません。少なくとも「p.isDataRange()」は false を返します。