Pergunta

Eu tenho um arquivo RDF no meu projeto web semântica e eu uso Rowlex para manipulá-lo. Eu necessário para remover um indivíduo de RDF, então eu usei

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

Com este código, eu tive meu gone individual, mas suas propriedades ainda permaneceu. Então eu descobri que eu a removerei de propriedades primeiro. Além disso, eu não encontrou um comando para a remoção de todas as propriedades em conjunto. Então, Question1 : se existe uma maneira para remover um indivíduo com todas as propriedades de TI? ou, eu posso remover todas as propriedades em uma linha de código e não um por um? E como eu posso remover propriedades com vários valores. Por exemplo três StudyLists, no exemplo abaixo página.

Por outro lado, quando eu tentei remover uma propriedade, por exemplo 'useSudyList' de indivíduo estudante, por este código:

student.RemoveuseStudyList(student.useStudyList);

Eu encontrei o meu arquivo RDF:

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

... tornou-se assim:

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

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

Assim, a propriedade foi jogado fora. Eu não tenho esse problema com propriedades literais. Question2 : o que é o problema

Obrigado por sua atenção e ajuda, com antecedência.

Foi útil?

Solução

A sua questão não tem nada a ver com ROWLEX mas é um problema gráfico típico: se você excluir um nó, o quão longe você cascata a exclusão? Quando você exclui uma propriedade com um literal, o caso é fácil, pois não há continuação do gráfico. Quando você excluir uma propriedade apontando para outro nó que você deve excluir o nó? Eliminação no seu exemplo parece óbvio, porque o gráfico não contém nem referência circular, nem relacionamentos compartilhados.

Imagine a seguinte gráfico: Você tem 3 pessoas: A (Adam), B (Bill), e seu pai F (Fred). Você tem relação fathership entre A - F e B - F. Você exclui relação entre Adam e seu pai. Se você suprimir o nó pai e trazer Bill em um inconsistente (órfão :) estado? A resposta aqui é "não". Você excluir somente o relacionamento.

diagramas na UML, você tem a opção no relacionamento de agregação de diferenciar entre "possuir" e "compartilhada". É expressa na cor (preto ou branco) do diamante no final da linha. Em bancos de dados relacionais, você pode definir ou ignorar "Cascade excluir" as chaves estrangeiras. Eles representam o mesmo conceito. Infelizmente, RDF não oferece metadados extra sobre um imóvel. Teve RDF têm esta informação disponível, podemos determinar quando e até onde devemos cascata eliminação sobre o gráfico. Mas nós não. Que define o caso para a má notícia:. Você está no seu próprio país, você pode implementar a eliminação como você vê o ajuste

Outras dicas

Você fez remover a propriedade, no entanto, havia outras declarações relacionadas com <stdl184516> que você não remover.

Aqui estão as declarações reais você tem (formato Turtle):

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

Por isso, faz sentido que a remoção do predicado Ontologyowl:useStudyList para o seu assunto <ehsanm> (e a declaração que contém) deixaria a afirmação restante quanto ao tipo de <stdl184516>.

A razão pela qual você não tem esse problema com literais é que você não tem literais como sujeitos de uma declaração (eles são apenas objetos de uma instrução). Então, removendo essa afirmação remove o literal (e todas as referências a ele). Com recursos como objeto de uma declaração, poderia haver declarações adicionais sobre esse recurso (como é o caso no seu exemplo).

RDF considera literais disjuntos, significando que eles são todos diferentes (mesmo que tenham o mesmo valor). Isto porque a remoção de um predicado a um literal (o "link" a ele se você quiser pensar dessa maneira) também remove o literal.

Atualização (para adicionar a resposta do Sr. Lame): Conceitualmente, RDF é sobre bordas (relações / predicados) em um gráfico de nós (recursos). A noção de exclusão de um nó é contrário à RDF; ela implica o nó (recurso) tem significado por si própria. Mesmo escrevendo um recurso, afirmando a sua rdf:type é uma declaração nó / edge / nó. O nó URI sozinho é considerado opaco e não tem semântica além de ser um identificador exclusivo. É por isso que RDF não permite "a nu" nós (um fora nó de uma instrução) -. Eles não têm nenhum significado inerente

Para estender a questão colocada por Ehsan, a exclusão de um nó seria realmente apagar todos os seus predicados de entrada / saída. Isto não verdadeiramente "apagar" o nó, ele realmente remove todas as declarações / afirmações que fazem referência a ele (pense nisso como "escondida" quando há declarações referência a ela).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top