Йена и разница между 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
,