كيفية تحديد خاصية بنفس الاسم على نوعين مختلفين في روليس؟

StackOverflow https://stackoverflow.com/questions/1243410

سؤال

إذا كان لدي هذين الطبقتين لديهم خصائصان مختلفة ولكن بنفس الاسم:

[RdfSerializable]
public class Type1
{
    [RdfProperty(true), Name = "title"]
    public string Title { get; set; }
}

[RdfSerializable]
public class Type2
{
    [RdfProperty(true), Name = "title"]
    public string Title { get; set; }
}

وحاول تسلسلها إلى RDF والتحقق من صحةها http://www.w3.org/rdf/validator/ الخدمات. كل شيء على ما يرام وهي صحيحة. ولكن بعد أن أحاول توليد ملفات البومة من تلك الفئات مع أداة OnTologyEctractor.exe، أحصل على تلك الرسالة: "فشل استخراج OnTology. http://test.org/1.0#title. يتم تعيينه لأكثر من نوع واحد. "هذه رسالة غريبة مثل الطبقات العليا صحيحة وهناك بعض مواصفات RDF التي لها نفس الموقف مع فئات مختلفة لها نفس الخصائص المسماة.

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

المحلول

أتوقع أن يكون خطأ في روليس. قضيتك هي واحدة صالحة، لكنني أفترض أنني لم أستعد لذلك عندما كتبت OnTologyExtractor. سأحاول إطلاق إصلاح في أقرب وقت ممكن.

تعديل: يتم إصدار OWLEX2.1، يمكنك تنزيله من http://rowlex.nc3a.nato.int.. وبعد الإصدار 2.1 (من بين أمور أخرى) يدعم الآن وظيفة الممتلكات المشتركة. الزمونة الدقيقة في السؤال ستظل تؤدي إلى نفس الخطأ! للتغلب على ذلك، يجب عليك تغيير زخرفة التعليمات البرمجية على النحو التالي:

[RdfSerializable] 
public class Type1 
{ 
    [RdfProperty(true, Name = "title", ExcludeFromOntology=true)] 
    public string Title { get; set; } 
} 

[RdfSerializable] 
public class Type2 
{ 
    [RdfProperty(true, Name = "title", 
               DomainAsType = new Type[]{typeof(Type1), typeof(Type2)})] 
    public string Title { get; set; } 
} 

باستخدام OnTologyExtractor.exe، فإن هذا الرمز سيؤدي إلى خاصية Owl مع فئة مجال مجهولة هو اتحاد Type1 و Type2.
في حين أن هذا هو الحل الصحيح بشكل تقني، فإن إعداد المجالات على الخصائص الحد من إعادة استخدامها في المستقبل المحتمل. كحل، قد ترغب في استبدال مجال العقار بالقيود المحلية. يمكنك تحقيق ذلك على النحو التالي:

[RdfSerializable] 
public class Type2 
{ 
    [RdfProperty(true, Name = "title", 
               DomainAsType = new Type[]{typeof(Type1), typeof(Type2)},
               UseLocalRestrictionInsteadOfDomain = true)] 
    public string Title { get; set; } 
} 

يجب أن تترك USELOCORALRESTRISTRISTIONSTEADOFDOMAIN لم تحدد، واختار Rowlex بين المجال والقيود المحلية وفقا للسياق الحالي.

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