Йена и разница между listStatements и listObjectsOfProperty

У меня есть файл с описанием людей с помощью FOAF. В Йене я пытаюсь проанализировать все возрасты из профилей и заметил, что мои listStatements и listObjectsOfProperty дают мне разные результаты. Я не мог легко найти какую-либо помощь от Javadocs или другой документации.

У меня есть следующий код для запроса с listStatments:

StmtIterator iter = this.foafmodel.listStatements(
     (Resource) null, 
     this.foafmodel.createProperty("http://xmlns.com/foaf/0.1/age"), 
     (RDFNode) null);

И это код для listObjectsOfProperty:

Property foafAge = this.foafmodel.createProperty("http://xmlns.com/foaf/0.1/age");
NodeIterator iter = this.foafmodel.listObjectsOfProperty(foafAge);

В этом случае итератор listStatements выполняет итерацию 38 раз, а listObjectsOfProperty - только 20 раз. Может кто-нибудь объяснить мне, в чем разница между этими двумя реализациями?

1 ответ

Решение

Давайте предположим, что ваши данные содержат несколько троек с вашей собственностью :p ссылаясь на тот же объект :o, вот так:

:s1 :p :o .
:s2 :p :o .

На первый взгляд мне кажется, что listObjectsOfProperty дают вам все лица, на которые ссылается ваша собственность, без дублирования. Мы можем подтвердить это, углубившись в реализацию, которая зависит от GraphUtil# listObjects(...), Код использует Set<Node> агрегировать все объекты. В результате вы должны получить только одну итерацию с элементом :o,

Другой метод, listStatements должен возвращать вам выписку / тройку за каждый раз, когда используется это свойство. В приведенном выше примере вы получите / должны получить два результата, по одному для каждого оператора, содержащего :p,

Другие вопросы по тегам