Domanda

Ho un file RDF nel mio progetto web semantico e lo uso Rowlex per la manipolazione di esso. Ho bisogno di rimuovere un individuo da RDF, quindi ho usato

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

Con questo codice, ho avuto la mia individuale andato, ma le sue proprietà ancora rimasto. Così ho capito che avrei dovuto rimuovere le sue proprietà prima. Inoltre non ho trovato un comando per la rimozione di tutte le proprietà insieme. Così, Question1 : c'è un modo per rimuovere un individuo con tutte le sue proprietà? o, posso rimuovere tutte le proprietà in una riga di codice e non uno per volta? E come posso rimuovere le proprietà con più valori. Per esempio tre StudyLists, nell'esempio in basso pagina.

D'altra parte, quando ho cercato di rimuovere una proprietà, ad esempio 'useSudyList' dal singolo studente, da questo codice:

student.RemoveuseStudyList(student.useStudyList);

Ho trovato il mio file RDF:

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

... è diventato in questo modo:

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

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

In questo modo la proprietà è stato buttato fuori. Io non ho questo problema con proprietà letterali. Domanda 2 :? Qual è il problema

Grazie per l'attenzione e di aiuto, di anticipo.

È stato utile?

Soluzione

La tua domanda non ha nulla a che fare con ROWLEX ma è un tipico problema di grafico: se si elimina un nodo, fino a che punto si fa a cascata l'eliminazione? Quando si elimina una proprietà con un valore letterale, il caso è facile in quanto non v'è la continuazione del grafico. Quando si elimina una proprietà che punta a un altro nodo si dovrebbe eliminare il nodo? La cancellazione nel tuo esempio sembra evidente, perché il grafico non contiene né riferimento circolare, né le relazioni condivise.

Immaginate il seguente grafico: Hai 3 persone: A (Adam), B (Bill), e il loro padre F (Fred). Hai rapporto fathership tra A - F e B - F. Si elimina rapporto tra Adam e suo padre. In caso di eliminare il nodo padre e portare Bill in uno stato incoerente (orfano :)? La risposta qui è "no". Si elimina solo il rapporto.

In diagrammi UML, si ha la possibilità in relazione di aggregazione di distinguere tra "possedere" e "condivisa". Si esprime nel colore (nero o bianco) del diamante alla fine della linea. Nei database relazionali, è possibile definire o ignorare "Cascade eliminare" le chiavi straniere. Essi rappresentano lo stesso concetto. Purtroppo, RDF non offre questo metadati supplementare sopra una proprietà. Aveva RDF di avere queste informazioni, potremmo determinare quando e fino a che punto dovremmo cascata delezione sul grafico. Ma non lo facciamo. Che imposta il caso per la cattiva notizia:. Si è da soli, è possibile implementare la cancellazione, come si vede in forma

Altri suggerimenti

Hai fatto rimuovere la proprietà, tuttavia c'erano altre dichiarazioni relative al <stdl184516> che non hai rimosso.

Ecco le dichiarazioni attuali Abbiamo (formato tartaruga):

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

Quindi ha senso che la rimozione del predicato Ontologyowl:useStudyList per il vostro <ehsanm> soggetto (e la dichiarazione che lo contiene) avrebbe lasciato l'affermazione rimanente per quanto riguarda il tipo di <stdl184516>.

Il motivo per cui non si dispone di questo problema con letterali è che non hai letterali come soggetti di una dichiarazione (sono solo oggetto di una dichiarazione). Quindi, la rimozione di questa affermazione rimuove il letterale (e tutti i riferimenti ad esso). Con le risorse come oggetto di una dichiarazione, ci potrebbero essere le dichiarazioni aggiuntive in materia di quella risorsa (come è il caso nel tuo esempio).

RDF considera letterali disgiunti, nel senso che sono tutte diverse (anche se hanno lo stesso valore). Questo il motivo per cui la rimozione di un predicato a un (il "link" ad esso se si vuole pensare in questo modo) letterale rimuove anche il letterale.

Update (per aggiungere alla risposta del signor Lame): Concettualmente, RDF è circa bordi (relazioni / predicati) in un grafo di nodi (risorse). L'idea di eliminazione di un nodo è contraria alla RDF; essa implica il nodo (risorse) ha un senso su di essa la propria. Anche digitando una risorsa, affermando la sua rdf:type è una dichiarazione nodo / bordo / nodo. solo il nodo URI viene considerato opaco e non ha semantica oltre ad essere un identificatore univoco. Questo è il motivo per cui RDF non permettere nodi "nude" (un nodo al di fuori di una dichiarazione) -. Non hanno significato intrinseco

Per estendere la domanda posta da Ehsan, l'eliminazione di un nodo sarebbe effettivamente eliminare tutti i suoi predicati in entrata / uscita. Questo non significa veramente "cancella" il nodo, rimuove in realtà tutte le dichiarazioni / affermazioni fanno riferimento (pensare ad esso come "nascosto" quando non ci sono dichiarazioni fanno riferimento).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top