Рассмотрим следующую онтологию, где PERSON
, NAME
, SURNAME
и IDENTIFICATION
— классы. NAME
и SURNAME
являются подклассом IDENTIFICATION
. hasSurname
и hasName
являются функциональными ObjectProperty. hasValue
— это свойство DataTypeProperty с доменом IDENTIFICATION
и строкой диапазона.
Давайте сделаем автоматический экземпляр этой модели, используя jena с двумя людьми, человек 1 — «Генри Форд», а человек 2 — «Харрисон Форд».
Чтобы справиться с этим повторением, необходимо автоматически создать экземпляр онтологии в соответствии со следующей схемой, где индивидуум name1
используется как для человека1, так и для человека2.
String NS = .... // the name space
OntModel model = .... // Jena model to use
// creating all the individuals with random uri
Individual person1 = model.createIndividual(NS + "PERSON" + Math.random());
Individual name1 = model.createIndividual(NS + "NAME" + Math.random());
Individual surname1 = model.createIndividual(NS + "SURNAME" + Math.random());
Individual person2 = model.createIndividual(NS + "PERSON" + Math.random());
Individual name2 = model.createIndividual(NS + "NAME" + Math.random());
Individual surname2 = model.createIndividual(NS + "SURNAME" + Math.random());
// asserting that ...
// person1 _hasName_ (name1 _hasValue_ "Ford")
// person1 _hasSurname (surname1 _hasValue_ "Henry")
name1.addProperty(model.getOntProperty(NS + "hasValue"), Resourcefactory.createLiteral("Ford"));
surname1.addProperty(model.getOntProperty(NS + "hasValue"), Resourcefactory.createLiteral("Henry"));
model.add(person1, model.getOntProperty(NS + "hasName"), name1);
model.add(person1, model.getOntProperty(NS + "hasSurname"), surname1);
name1 = null; // loosing reference to name1
// asserting that ...
// person2 _hasName_ name1
// person2 _hasSurname (surname2 _hasValue_ "Harrison")
Как найти человека класса NAME
, чье свойство hasvalue
является «Фордом», чтобы правильно завершить инстанцирование?
Спасибо за любой ответ.