Вопрос

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

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

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

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

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:в чем проблема?

Заранее благодарю за ваше внимание и помощь.

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top