Удаление лиц и свойств из RDF

У меня есть файл RDF в моем семантическом веб-проекте, и я использую Rowlex для управления им. Мне нужно было удалить человека из RDF, поэтому я использовал

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

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

С другой стороны, когда я попытался удалить свойство, например, «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: в чем проблема?

Заранее спасибо за внимание и помощь.


person Ehsan    schedule 10.07.2009    source источник


Ответы (2)


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

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

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

person Mr. Lame    schedule 11.07.2009
comment
Большое спасибо за этот очень полезный ответ. Но это заставило меня задать другой вопрос. Я разместил это под этим заголовком: Люди и свойства в семантической сети. Я был бы очень признателен, если бы вы взглянули на это. Еще раз спасибо - person Ehsan; 12.07.2009

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

Вот фактические утверждения, которые у вас есть (формат черепахи):

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

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

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

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

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

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

person Phil M    schedule 10.07.2009
comment
Большое спасибо за руководство. Я проверю еще раз и добавлю код, чтобы увидеть, работает ли он. Еще раз спасибо - person Ehsan; 11.07.2009