Вопрос

У меня есть файл, описывающий людей с помощью 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 раз.Может ли кто-нибудь объяснить мне, в чем разница между этими двумя реализациями?

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top