جينا والفرق بين listStatements وlistObjectsOfProperty
-
21-12-2019 - |
سؤال
لدي ملف يصف الأشخاص بمساعدة FOAF.في Jena أحاول تحليل جميع الأعمار من الملفات الشخصية ولاحظت أن قائمتي 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
.