У меня есть файл онтологии, сгенерированный 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>
В Протеже это выглядит так:
Теперь я использую Jena для разбора файла Ontology. Я могу получить объект OntClass, соответствующий тегу "диапазон":
DatatypeProperty p = ontModel.getDatatypeProperty("http://example.com/NLPSchema.owl#race");
OntClass range = p.getRange().asClass();
Тогда как мне получить красивый нумерованный массив {"african_american", "asian", "caucasian", "латиноамериканец", "other"}, как в Protege?
Я знаю, что у DataRange есть метод под названием «listOneOf», однако я не знаю, как создать объект DataRange, по крайней мере, «p.isDataRange()» возвращает false.