Question

J'ai un fichier RDF dans mon projet web sémantique et j'utilise Rowlex pour la manipuler. J'ai besoin de retirer une personne de RDF, donc je

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

Avec ce code, j'avais ma personne disparu, mais il est encore resté propriétés. Donc, je compris que je devrais retirer ses propriétés d'abord. D'ailleurs, je ne l'ai pas trouvé une commande pour enlever toutes les propriétés ensemble. Ainsi, Question1 : est-il un moyen d'enlever un individu avec toutes ses propriétés? ou, puis-je supprimer toutes les propriétés en une seule ligne de code et non un par un? Et comment puis-je supprimer des propriétés avec des valeurs multiples. Par exemple trois StudyLists, dans l'exemple vers le bas page.

Par contre, quand j'ai essayé de supprimer une propriété, par exemple, « useSudyList » de personne étudiant, par ce code:

student.RemoveuseStudyList(student.useStudyList);

J'ai trouvé mon fichier RDF:

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

... est devenu comme ceci:

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

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

Ainsi, la propriété a été rejetée. Je n'ai pas ce problème avec des propriétés littérales. Question2 : quel est le problème

Merci pour votre attention et aide à l'avance.

Était-ce utile?

La solution

Votre question n'a rien à voir avec ROWLEX mais il est un problème typique de graphique: si vous supprimez un nœud, comment bien vous la suppression en cascade? Lorsque vous supprimez une propriété avec un littéral, le cas est facile car il n'y a pas de poursuite du graphique. Lorsque vous supprimez une propriété pointant vers un autre nœud si vous supprimez le nœud? Suppression dans votre exemple semble évident parce que votre graphique ne contient ni référence circulaire, ni les relations partagées.

Imaginez le graphique suivant: Vous avez 3 personnes: A (Adam), B (Bill), et leur père F (Fred). Vous avez la relation entre paternelles A - F et B - F. Vous supprimez la relation entre Adam et son père. Si vous supprimez le noeud père et apporter le projet de loi en une contradiction (orphelin :) Etat? La réponse est « non ». Vous supprimez la relation uniquement.

Dans les diagrammes UML, vous avez la possibilité en relation d'agrégation pour différencier les « posséder » et « partagée ». Elle est exprimée dans la couleur (noir ou blanc) du diamant à la fin de la ligne. Dans les bases de données relationnelles, vous pouvez définir ou ignorer des clés étrangères « Cascade supprimer ». Ils représentent le même concept. Malheureusement, RDF ne propose pas des métadonnées supplémentaires sur une propriété. Avait RDF ont cette information, nous pourrions déterminer quand et comment devrions-nous en cascade jusqu'à la suppression sur le graphique. Mais nous ne le faisons pas. Cela règle le cas pour les mauvaises nouvelles. Vous êtes seul, vous pouvez mettre en œuvre la suppression comme bon vous semble

Autres conseils

Vous avez fait enlever la propriété, mais il y avait d'autres déclarations relatives à <stdl184516> que vous n'avez pas supprimé.

Voici les déclarations réelles que vous avez (format tortue):

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

Il est donc logique que la suppression du prédicat Ontologyowl:useStudyList pour votre sujet <ehsanm> (et la déclaration qui le contient) laisserait l'affirmation reste en ce qui concerne le type de <stdl184516>.

La raison pour laquelle vous n'avez pas ce problème avec littéraux est que vous n'avez pas littéraux comme sujet d'une déclaration (ce sont des objets que d'une déclaration). Ainsi, la suppression de cette déclaration supprime le littéral (et toutes les références à celui-ci). Avec des ressources comme l'objet d'une déclaration, il pourrait y avoir des déclarations supplémentaires concernant cette ressource (comme cela est le cas dans votre exemple).

RDF considère disjoints littéraux, ce qui signifie qu'ils sont tous différents (même si elles ont la même valeur). Ce pourquoi la suppression d'un prédicat à un littéral (le « lien » pour si vous voulez penser de cette façon) supprime également le littéral.

Mise à jour (à ajouter à la réponse de M. Boiteux): Conceptuellement, RDF est sur les bords (relations / prédicats) dans un graphe de noeuds (ressources). La notion de la suppression d'un nœud est contraire à RDF; il implique le noeud (ressource) a un sens sur son propre. Même en tapant une ressource en affirmant son rdf:type est un nœud / edge / déclaration de nœud. seul l'URI de noeud est considéré comme opaque et n'a pas au-delà de la sémantique étant un identifiant unique. Voilà pourquoi RDF ne permet pas de noeuds « nus » (un nœud en dehors d'une déclaration) -. Ils ont pas de sens intrinsèque

Pour étendre la question posée par Ehsan, la suppression d'un nœud supprimerait en fait tous ses prédicats entrant / sortant. Cela ne veut pas vraiment « supprimer » le nœud, il supprime en fait toutes les déclarations / affirmations qui font référence (penser comme « caché » quand aucune déclaration y font référence).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top