Pregunta

Tengo un archivo RDF en mi proyecto web semántica y utilizo Rowlex para la manipulación de la misma. Me he necesitado para eliminar a un individuo de RDF, por lo que utiliza

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

Con este código, que habían ido a mi persona, pero es aún quedaba propiedades. Así que me di cuenta de que la haga quitar de las propiedades en primer lugar. Además no he encontrado un comando para la eliminación de todas las propiedades juntas. Por lo tanto, Pregunta 1 : ¿hay una manera de quitar un individuo con todas sus propiedades? o, puedo eliminar todas las propiedades en una sola línea de código y no uno por uno? ¿Y cómo puedo quitar propiedades con varios valores. Por ejemplo, tres StudyLists, en el ejemplo abajo la página.

Por otro lado, cuando traté de eliminar una propiedad, por ejemplo 'useSudyList' de individuo estudiante, por este código:

student.RemoveuseStudyList(student.useStudyList);

He encontrado mi archivo RDF:

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

... se convirtió de esta manera:

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

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

Así, la propiedad fue expulsado. No tengo este problema con propiedades literales. Pregunta2 : ¿Cuál es el problema

Gracias por su atención y ayuda, por adelantado.

¿Fue útil?

Solución

Su pregunta no tiene nada que ver con ROWLEX pero es un problema típico gráfico: si elimina un nodo, ¿hasta dónde la eliminación en cascada? Cuando se elimina una propiedad con un literal, el caso es fácil ya que no hay continuidad de la gráfica. Cuando se elimina una propiedad que apunta a otro nodo en caso de que suprimir el nodo? La deleción en su ejemplo parece obvio porque su gráfico no contiene ni referencia circular, ni relaciones compartidas.

Imagine el siguiente gráfico: Tienes 3 personas: A (ADAM), B (Bill), y su padre F (Fred). Tiene relación Fathership entre A - F y B - F. Se elimina la relación entre el hombre y su padre. Si usted suprime el nodo padre y llevar a Bill en un estado incoherente (huérfano :)? La respuesta es "no". Se elimina sólo la relación.

En los diagramas UML, usted tiene la opción de relación de agregación de diferenciar entre "poseer" y "compartida". Se expresa en el color (blanco o negro) del diamante al final de la línea. En las bases de datos relacionales, puede definir o ignorar "Eliminar en cascada" sobre las claves externas. Ellos representan el mismo concepto. Por desgracia, RDF no ofrece estos metadatos extra sobre una propiedad. RDF tenido dispone de esta información, podríamos determinar cuándo y en qué medida debemos cascada eliminación sobre el gráfico. Pero no lo hacemos. Eso prepara el caso para las malas noticias:. Usted está en su propia, se puede implementar la eliminación como mejor le parezca

Otros consejos

Usted hizo quitar la propiedad, sin embargo hubo otras declaraciones relacionadas con <stdl184516> la que no ha quitado.

Aquí están las declaraciones reales que tiene (formato de tortuga):

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

Así que tiene sentido que la eliminación del predicado Ontologyowl:useStudyList para el sujeto <ehsanm> (y la declaración que lo contiene) dejaría la afirmación restante con respecto al tipo de <stdl184516>.

La razón por la que usted no tiene este problema con los literales es que usted no tiene literales como sujetos de una declaración (que sólo son objetos de una declaración). Por lo tanto la eliminación de esa declaración elimina el literal (y todas las referencias a ella). Con recursos como objeto de una declaración, podría haber declaraciones adicionales con respecto a ese recurso (como es el caso en su ejemplo).

RDF considera disjuntos literales, lo que significa que son todas diferentes (incluso si tienen el mismo valor). Es por esto que la eliminación de un predicado a un (el "enlace" para que si se quiere pensar en él de esa manera) literal también elimina el literal.

Actualizar (para añadir a la respuesta del Sr. Lame): Conceptualmente, se trata de RDF bordes (relaciones / predicados) en un gráfico de nodos (recursos). La noción de la eliminación de un nodo es contrario a RDF; que implica el nodo (recurso) tiene significado por sí mismo. Incluso escribir un recurso afirmando su rdf:type es una declaración de nodo / EDGE / nodo. El nodo URI solo se considera opaco y no tiene la semántica más allá de ser un identificador único. Esta es la razón por RDF no permitir que los nodos "desnudos" (un nodo fuera de una sentencia.) - no tienen ningún significado inherente

Para extender la pregunta planteada por Ehsan, la eliminación de un nodo sería realmente eliminar todos sus predicados entrantes / salientes. Esto no significa verdaderamente "eliminar" el nodo, que en realidad elimina todas las declaraciones / afirmaciones que hacen referencia a él (piensa en él como "oculta" cuando hacen referencia a ninguna declaración él).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top