2009-07-10 2 views
1

У меня есть файл RDF в моем семантическом веб-проекте, и я использую Rowlex для его управления. Я необходимо удалить лицо из RDF, так как я использовалУдаление физических и физических свойств из RDF

<RDFDoc instance>.RemoveIndividual(new OwlThing(<individual URI>, <RDFDoc instance>)); 

С помощью этого кода, у меня был индивидуальные нет, но это свойство до сих пор осталось. Поэтому я понял, что сначала должен удалить его свойства. Кроме того, я не нашел команду для удаления всех свойств вместе. Итак, Question1: есть ли способ удалить человека со всеми его свойствами? или я могу удалить все свойства в одной строке кода, а не один за другим? И как я могу удалить свойства с несколькими значениями. Например, три StudyLists, например, на странице вниз.

С другой стороны, когда я пытался удалить свойство, например 'useSudyList' от студента индивидуума, по этому коду:

student.RemoveuseStudyList(student.useStudyList); 

Я нашел мой RDF файл:

<Ontologyowl:Student rdf:about="ehsanm"> 
//other properties 
    <Ontologyowl:useStudyList> 
     <Ontologyowl:StudyList rdf:about="stdl184516"/> 
    </Ontologyowl:useStudyList> 
</Ontologyowl:Student> 

... стал следующим:

<Ontologyowl:Student rdf:about="ehsanm"> 
    //other properties 

</Ontologyowl:Student> 
<Ontologyowl:StudyList rdf:about="stdl184516"/> 

Таким образом, имущество было выброшено. У меня нет этой проблемы с литеральными свойствами. Вопрос2: в чем проблема?

Спасибо за внимание и помощь, заблаговременно.

ответ

2

Ваш вопрос не имеет ничего общего с ROWLEX, но это типичная проблема с графом: если вы удалите узел, как далеко вы каскадируете удаление? Когда вы удаляете свойство с литералом, дело легко, так как продолжения графика нет. Когда вы удаляете свойство, указывающее на другой узел, следует удалить узел? Удаление в вашем примере выглядит очевидным, потому что ваш график не содержит ни круговой ссылки, ни общих отношений.

Представьте следующий график: У вас есть 3 человека: A (Адам), B (Билл) и их отец F (Фред). У вас есть отношения отцовства между A - F и B - F. Вы удаляете отношения между Адамом и его отцом. Следует ли удалить узел отца и привести Билла в непоследовательное состояние (сирота :)? Ответ здесь «нет». Вы удаляете только отношения.

В диаграммах UML у вас есть возможность в агрегировании, чтобы различать «обладание» и «общий». Он выражается в цвете (черный или белый) алмаза в конце линии. В реляционных базах данных вы можете определить или игнорировать «Cascade delete» поверх внешних ключей. Они представляют одну и ту же концепцию. К сожалению, RDF не предлагает эти дополнительные метаданные над свойством. Если бы RDF предоставила эту информацию, мы могли бы определить, когда и как далеко мы должны каскадировать удаление по графику. Но мы этого не делаем. Это приводит к возникновению плохих новостей: вы сами по себе, вы можете реализовать удаление по своему усмотрению.

+0

Вы пригвоздили точку! –

+0

Большое спасибо за этот очень полезный ответ. Но это вызвало у меня еще один вопрос. Я опубликовал это по этому заголовку: «Физические лица и свойства в семантической сети». Я был бы очень признателен, если вы посмотрите на это. Еще раз спасибо – Ehsan

3

Вы удалили недвижимость, однако были и другие заявления, связанные с <stdl184516> которые вы не удалили.

Вот фактические заявления у вас есть (формат Turtle):

<ehsanm> a Ontologyowl:Student . 
## Other statements 
<ehsanm> Ontologyowl:useStudyList <stdl184516> . 
<stdl184516> a Ontologyowl:StudyList . 

Так что имеет смысл, что удаление Ontologyowl:useStudyList предиката для <ehsanm> субъекта (и заявление, которое содержит его) оставят остальное утверждение относительно <stdl184516> type.

Причина, по которой у вас нет этой проблемы с литералами, заключается в том, что у вас нет литералов в качестве субъектов утверждения (они являются только объектами утверждения). Поэтому удаление этого утверждения удаляет литерал (и все ссылки на него). С ресурсами в качестве объекта оператора могут быть дополнительные инструкции относительно этого ресурса (как в случае вашего примера).

RDF считает, что литералы не пересекаются, то есть они все разные (даже если они имеют одинаковое значение). Вот почему удаление предиката в литерал («ссылка» на него, если вы хотите об этом думать) также удаляет литерал.

Обновление (для добавления в ответ г-на Ламе): Концептуально RDF представляет собой грани (отношения/предикаты) в графике узлов (ресурсов). Понятие об удалении узла противоречит RDF; это означает, что узел (ресурс) имеет смысл на своем собственном. Даже набирать ресурс, утверждая его rdf:type, является утверждение node/edge/node. Только URI узла считается непрозрачным и не имеет семантики, не являющейся уникальным идентификатором. Вот почему RDF не разрешает «голые» узлы (узел за пределами оператора) - они не имеют неотъемлемого значения.

Чтобы расширить вопрос, поставленный Ehsan, удаление узла фактически удалит все его входящие/исходящие предикаты.Это действительно не «удаляет» узел, он фактически удаляет все утверждения/утверждения, которые ссылаются на него (считайте его «скрытым», если никакие утверждения не ссылаются на него).

+0

Большое спасибо за руководство. Я снова проверю и добавлю код, чтобы узнать, работает ли он. Еще раз спасибо – Ehsan