Удаление отдельных лиц и свойств из RDF - PullRequest
1 голос
/ 10 июля 2009

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

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

С этим кодом у меня исчезла личность, но его свойства все еще остались. Поэтому я понял, что сначала мне нужно удалить его свойства. Кроме того, я не нашел команду для удаления всех свойств вместе. Итак, Вопрос1 : есть ли способ удалить человека со всеми его свойствами? или я могу удалить все свойства в одной строке кода, а не по одному? И как я могу удалить свойства с несколькими значениями. Например, три 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 ]

3 голосов
/ 11 июля 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 не допускает «голые» узлы (узлы вне оператора) - они не имеют внутреннего значения.

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

2 голосов
/ 11 июля 2009

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

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

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

...