سؤال

أنا باستخدام rowlex في المشروع.لدي خاصية تعيين فرد في قوات الدفاع الرواندية الملف الذي يحتوي على قيمة.على سبيل المثال الفردية 'طالب', هناك خاصية 'isMemberOf' ، مع قيمة الدرجة uri 'class00021'.ثم أريد أن أضيف الثانية قيمة هذه الخاصية.على سبيل المثال 'المشروع' القيمة مع uri 'proj000052'.

تظهر المشكلة هنا:بعد إضافة القيمة الثانية, القيمة الأولى يتم طرح العقار 'isMemberOf ، حتى من الفرد (الطالب) ، و يتم تخزينها كـ فرد جديد.

رمز اعتدت على هذه العملية هو مثل هذا:

//Add a class to a student 
public void Add_Class
    (string uri_stu, string uri_class)
{        
        //Open RDF
        RdfDocument rdfDoc = new RdfDocument(@"RDF_Repository\RDF_Student.rdf");
        //Find the student
        //Student student = new Student(uri_stu, rdfDoc);
        Student student = (Student)rdfDoc.GetIndividual(uri_stu);
        //Add a class
        student.studyMemberOf = new ClassOfCourse(uri_class, rdfDoc);
        rdfDoc.ExportToRdfXml(@"RDF_Repository\RDF_Student.rdf");
}


//Add a project to a student 
public void Add_Project
    (string uri_stu, string uri_proj)
{
        //Open RDF
        RdfDocument rdfDoc = new RdfDocument(@"RDF_Repository\RDF_Student.rdf");
        //Find the student
        Student student = (Student)rdfDoc.GetIndividual(uri_stu);
        //Add a project                        
        student.studyMemberOf = new Project(uri_proj, rdfDoc);
        rdfDoc.ExportToRdfXml(@"RDF_Repository\RDF_Student.rdf");
}

أدى قوات الدفاع الرواندية مثل هذا:

<?xml version="1.0"?>
<rdf:RDF xmlns:Ontologyowl="http://www.owl-ontologies.com/Ontology1243411901.owl#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <Ontologyowl:Student rdf:about="stu000012">
        <Ontologyowl:studyMemberOf>
            <Ontologyowl:Project rdf:about="proj000052"/>
        </Ontologyowl:studyMemberOf>
    </Ontologyowl:Student>
    <Ontologyowl:ClassOfCourse rdf:about="class000021"/>
</rdf:RDF>

...وإذا واصلنا إضافة السابق الملكية سوف يتم طرح.فكيف يمكن التغلب على هذه المشكلة ؟

هل كانت مفيدة؟

المحلول

كل الأنطولوجيا الصف ، ROWLEX يولد اثنين .صافي حصص في "الكامل" و "النور" واحدة.اثنين إنشاؤه تلقائيا الطبقات باختلاف اصطلاح التسمية.إذا كانت البومة الدرجة يدعى "طالب" من الدرجة الخفيفة سوف يكون اسمه "طالب" أيضا.كامل الدرجة يدعى "Student_".هم تماما للصرف مع واحد آخر ، محض الغرض من وجود اثنين هو الراحة.على الدرجة الكاملة يحتوي على كل الطرق الممكنة/الخصائص التي تحتاج إليها.ضوء الدرجة يحتوي فقط على الأكثر استخداما منها.المشكلة مع كامل الطبقات التي تحصل مزدحمة حقا.كل واحد من البومه الملكية سوف تحصل على 10 (!) الخصائص والأساليب الخاصة بك .صافي الدرجة:

  • إضافة (typesafe)
  • إضافة (لا typesafe)
  • إزالة (typesafe)
  • إزالة (لا typesafe)
  • محل (typesafe)
  • محل (لا typesafe)
  • غير مجموعة الملكية (typesafe)
  • غير مجموعة الملكية (لا typesafe)
  • مجموعة الملكية (typesafe)
  • مجموعة الملكية (لا typesafe)

إذا كان لديك فقط 5 البومة خصائص لتلبية احتياجات ، إنشاؤه تلقائيا .صافي الدرجة الكاملة سوف يكون 5x10 طرق/خصائص.هذه عدد كبير من أعضاء بسهولة هزيمة فائدة من التحسس.ومن هنا عموما استخدام الضوء الفئات.

على ضوء الدرجة ، عليك فقط عدم مجموعة الملكية تنفيذها (ما لم أصل القيود صراحة المباشر خلاف ذلك) وهذا العقار داخليا يستدعي استبدال الأسلوب.في حال كنت بحاجة إلى استخدام كامل الدرجة.

هذا كيف يمكنك الحصول على واستخدام الدرجة الكاملة (لم تحقق من رمز):

Student_ student = (Student_)rdfDoc.GetIndividual(uri_stu, Student.Uri, false);
student.AddstudyMemberOf(new Project(uri_proj, rdfDoc));

نصائح أخرى

وأنا لست على دراية Rowlex، ولكن اعتقد ان القضية هي كيف تقوم بإنشاء الخاصة بك المسند studyMemberOf جديد (أو لا، كما يبدو).

وبمقارنة:

student.studyMemberOf = new ClassOfCourse(uri_class, rdfDoc);

وو:

student.studyMemberOf = new Project(uri_proj, rdfDoc);

ويبدو أن تشير إلى أنك كنت تعيين فرد جديد إلى المسند واحد، بدلا من إضافة بيانا جديدا مع نفس المسند (والذي هو بالضبط سؤالك - لست متأكدا كيف مفيدة هذا الجواب).

وأيضا، على مذكرة الأسلوبية، يبدو أنك تقوم بدمج البيانات الخاصة بك عن الأفراد والأنطولوجيا الخاص بك (الذي يشاركونه نفس مساحة الاسم). ربما كان هذا هو ليس ما تريد، وعادة الطالب، والطبقة، والأفراد المشروع سيكون محددات (أو العقد مجهول) في مساحة اسم آخر. على سبيل المثال:

<?xml version="1.0"?>
<rdf:RDF xmlns:Ontologyowl="http://www.owl-ontologies.com/Ontology1243411901.owl#"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <Ontologyowl:Student rdf:resource="http://students.uri/stu000012">
        <Ontologyowl:studyMemberOf>
            <Ontologyowl:Project rdf:resource="http://projects.uri/proj000052"/>
        </Ontologyowl:studyMemberOf>
    </Ontologyowl:Student>
    <Ontologyowl:ClassOfCourse rdf:resource="http://classes.uri/class000021"/>
</rdf:RDF>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top