سؤال

لدي ملف يصف الأشخاص بمساعدة 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top